1. 程式人生 > >寒假作業2 電梯問題

寒假作業2 電梯問題

技術 無法 實踐 時也 align 自己 img 小時 字符

電梯升降

github: https://github.com/Seast90/Elevator

方案 代碼行數 bug數
A 預計200+ 預計20+個
B 120 20個

優化過程

 模擬現實的電梯寫的代碼。
  本來想寫A方案的貪心思路,就是僅靠當前數據進行權值計算來判斷電梯接下來應該如何運作,但是由於思路不完整並且覺得僅僅憑借權值判斷會出現有些情況無法最優的情形,所以思路A只寫了一個模板,然後去寫了思路B的代碼,就是在當前時間暴力dfs每種電梯可行的情況中最優的情況,用字符串存儲電梯的運作,然後讀取最優運作的字符串進行電梯的調度。
  優化主要在dfs的思路上的優化和代碼的debug,運行過程中我發現我的dfs有部分可以剪枝,所以對代碼進行了大刀闊斧的整改,在出的幾個測試數據都沒有bug的情況下我提交了代碼。
  對於貪心的權值判斷我有個大概的框架,但是並不能保證所有情況下都能最優,所以還沒決定要如何寫貪心策略的代碼。

測試數據

在一層樓 停下多次 載客:
技術分享圖片

來回載客的復雜情況:
技術分享圖片

選取最優策略的判斷:
技術分享圖片

復雜情況選取策略:
技術分享圖片

電梯中途掉頭的情況:
技術分享圖片

電梯不掉頭等待乘客的情況:
技術分享圖片

總體來說滿足我的預期並且在圖二情況中跑贏了stolf犇犇的貪心電梯,也從側面證實了我對貪心策略無法做到百分百最優策略的判斷(但是其他五種情況都一樣 stolf犇犇太強了%%%)

收獲

一開始以為這題並不難 所以水了幾天只思考沒實踐,後來開始實踐的時候才發現自己考慮的還是太少了,還是有些部分沒有考慮清楚,
其中包括對貪心策略的判斷,一開始覺得這個策略不會很難想,後來發現很難將這個策略做到極致,總會有些小情況是沒辦法完美解決的,
所以改寫了暴力的代碼,並且發現暴力的代碼也是一樣的不好寫= =。debug了幾個小時的終於把問題解決清楚,總的來說對於B代碼還是比較滿意的,
但是對於A代碼沒寫出來還是有些不滿意,同時也得多留心生活中的一些小事情,說不定之後就會遇到同樣的代碼題(

Pintia 編程題

技術分享圖片

寒假作業2 電梯問題