小飛的電梯排程演算法,光影切割問題《程式設計之美》

2021-06-23 05:48:54 字數 1783 閱讀 7356

小飛的電梯排程演算法:

1.8問題描述:

小飛是實習程式設計師,下班高峰期時電梯的每層都有人上下,等電梯是件煩人的事情。

小飛有個方案:電梯每次計算裡面的人,和上的樓層,從而統計出在哪一層停,該上樓的出電梯爬樓梯;該下樓的出電梯爬樓梯下去。

問題:電梯停靠在哪一層,能保證這次乘客爬樓梯的層數總和最少?

分析:要算出乘客爬樓梯的層數最少。關鍵就是統計每次做電梯的人數,和樓層的總高度。

現在假設總共有n層,電梯停在第x層,到第i 層的人數為tot[i];

需要走的層數為 sigma;

解法一:從第一層開始計算,用列舉法x到第n層。o(n*n)

int  p//p[i],表示到達i層的人數;

int minfloor,targetfloor,floor;

targetfloor=-1;

for(i=1;i<=n;++i)

}return(targetfloor,minfloor);

時間複雜度o(n*n);

解法二:優化演算法 時間複雜度o(n);

現在先規定到達抵達第i層乘客們一共需要爬y層。到達第i層的有x2人,第i層以下x1人,到達第i層以上有x3人;

現在假設電梯在(i-1)層停下來,i層以下的人少走x1層;此時i層以上的人要多爬(x2+x3)層;

所以第(i-1)層停下時:y-x1+x2+x3=y-(x1-x2-x3)

同理在第(i+1)層停下時:多走x1+x2,少走x3    可得      y+x1+x2-x3=y-(x3-x1-x2)

當i層以下的人數比i層以上的人數和第i層人數之和**在(i-1)層停。即x1>x2+x3

那麼當x3>x1+x2時,在第(i+1)層停。

int p//p[i]表示需要在到達第i層的人數

int minfloor,targetfloor;

int x1,x2,x3;

minfloor=0;

targetfloor=1;

for(x1=0,x2=p[1],x3=0,i=2;i<=n;++i)

for(i=2;i<=n;++i){//for迴圈的功能是進行一層一層的列舉,上述那個(x1+x2

光影切割問題

1.7take note

問題描述:在cs遊戲中的破舊倉庫裡。由於光線照射到地面,會形成光亮面和陰暗面。

如現在有三條光線照射在倉庫裡,地面形成了一塊一塊的光暗面,如圖所示:1-8

現在的問題是:在x軸【a,b】的區間內,求出地面被分割的塊數

解決方法:遇到這題,首先是試數,構造出模擬圖,觀察規律。

兩條線,乙個焦點,塊數:4;

三條線,兩個焦點,塊數:6;

三條線,三個焦點,塊數:7;

現在假設有n條線,m個交點;對於每增加一條線,假設就多了m個交點,把這條線分割成(m+1)段,每條線段會將原來的區域分割成兩塊,那麼在原    來的基礎上就多出了就多出了一塊,因此新增了(m+1)塊區域。那麼n條線,m個交點,就分割成(m+n+1)個區域。

回歸到本題,它問的是在區間【a,b】上分割的塊數。可以轉化為找區間【a,b】的交點數。

小飛的電梯排程演算法

程式設計之美 第1.8節 小飛的電梯排程演算法 假設樓層共有n層,電梯停在第x層,要去第i層的乘客數目總數為total i 所爬樓梯的總數就是sum,求使得這個和最小的x的值,即電梯停的樓層數。stop1函式是o n 2 的演算法,就是假設在每層樓停下,計算此時需要爬的樓梯數,如果比最小的少,則賦值...

小飛的電梯排程演算法

1 問題描述 某大廈一共有6部電梯,在高峰時間,每層都有人上下,電梯在每層都停,實習生小飛常常會被每層都停的電梯弄的很不耐煩,於是他提出了這樣乙個辦法 由於樓層不太高,每次電梯往上走時,我們只允許電梯停在其中的某一層。所有乘客都從一樓上電梯,到達某層後,電梯停下來,所有乘客再從這裡爬樓梯到自己的目的...

1 8 小飛的電梯排程演算法

題目 有一棟樓,現在設計一種電梯排程演算法 電梯在一樓讓大家上電梯,然後根據大家選擇要到的樓層算出某一樓層i,電梯在i層停下讓所有人下電梯,然後大家爬樓梯達到自己的樓層。請問電梯停在哪一層,可以使得這一次的所有乘客爬樓層之和最短?一 最直接最簡單的方法就是直接列舉從第一層到最後一層,然後算出電梯停在...