重新開始戰鬥06 程式設計之美 電梯排程問題

2021-06-21 04:29:39 字數 838 閱讀 6351

問題描述:

一座不高的樓裡有一部電梯,為了解決電梯擁擠的問題,電梯的設計者規定每次電梯從一層往上走時,只允許電梯停在其中的某一層。所有的乘客都從一樓上電梯,到達某層樓後,電梯停下來,所有乘客再從這裡爬樓梯道自己的目的層。在一樓的時候,每個乘客選擇自己的目的層,電梯則自動計算出應停的樓層。

學模型:設floor[i]表示第i層要去的人數。target為電梯應該停下的層數。那麼該問題的用表示式解釋為:

解法一:最低效最直觀最簡單的演算法——每一層每一層的進行計算,即先計算target=1時的情況,然後計算target=2的情況……最後選出最小的。

顯然,從target=1到target=n要進行n次計算,每次計算又是乙個求和過程。因此,這種演算法的時間複雜度為o(n

2)。記住,時間複雜度為o(n2)的演算法通常不好

方法二的關鍵在於利用了數學的方法,因此在我們拿到乙個題目的時候,除了考慮傳統的貪心策略,動態規劃策略……去解決的時候,也應該嘗試一下數學的方法,即有沒有在數學模型上,存在等效的而又簡單的解決辦法。

假設電梯停在i層,所有乘客需要的爬的樓梯的總數為y,那麼假設n1個乘客再i層,n2個乘客再i層以下,n3個乘客再i層以上。這個時候如果是停在i-1層,那麼總的要爬的樓梯數為y+n1-n2+n3,如果n1+n3

2,則應該停在i-1層,然後從i-1層以此類推。如果是停在i+1層,那麼總的要爬的樓梯數為y+n1+n2-n3,如果n1+n2

3,則應該停在i+1層,然後從i+1層開始以此類推。

因此可以從1層開始計算,依次遞增,直到n1+n3>n2,或者從頂層開始,依次遞減,直到n1+n2>n3,總之時間複雜度為o(n)。

重新開始戰鬥03 程式設計之美 買書問題

問題描述 由於 哈利波特 系列相當暢銷,店長決定通過 活動來回饋讀者。上櫃的 哈利波特 瓶裝本系列中,一共有5卷。假設每一捲單獨銷售均需8歐元。如果讀者一次購買不同的兩卷,就可以扣除5 的費用,三卷更多。具體的折扣如下 本數 折扣 2 5 3 10 4 20 5 25 每本書只能享受一種折扣。例如買...

重新開始戰鬥05 程式設計之美 光影切割

問題描述 假設有乙個矩形區域,有若干條直線切割該區域,並且沒有一條直線與y軸平行,且不存在三條 以及3條以上 切割線相交於一點的情況。請問該矩形平面被分割成多少塊。分析 假設一塊矩形區域已經被切割成很多塊,那麼此時再增加一條切割線,新的切割線與其他切割線相交,且有m個交點。那麼新的切割線被分割成m ...

重新開始戰鬥04 程式設計之美 尋找ID問題

問題描述 乙個很大的列表 有10億多個數 這個列表中全是都是id號,正常狀態下每個id都會再列表中出現兩次 都是亂序 1.當有乙個id號丟失時,如何找到這個id號 2.當有兩個id號丟失時,如何找到這兩個id號。解法一 最直觀 申請乙個陣列,這個陣列和id列表一樣大,然後遍歷id列表,每遍歷乙個id...