優化座位編排演算法思考過程

2021-08-15 09:08:35 字數 2366 閱讀 4216

座位編排演算法

任務:提高座位利用率,優先**結構。

問題描述:在實際考試的機房中,存在大量考試機未被使用的現象。造成物力人力的不合理。

挑戰:座位編排演算法複雜,**結構不清晰,**量接近1萬行(十年前寫的)。因為本演算法是公司最難的乙個演算法。所以想要讀懂這個座位編排演算法本身就有難度。

1,可以自行設計乙個更好的演算法實現座位編排。

2,可以在已經有的基礎上優化,優化方向盡可能提高座位利用率,根據其演算法思想,重新組織其類關係,使其結構清晰易懂。

先理解整個背景知識。

1,有兩種排座的方式機考和紙考。策略有自動編排和手動編排,其中手動編排是對自動編排的乙個有力補充,目的也是為了提高座位利用。

2,編排規則有同單位隔離,同專業隔離,同單位和同專業隔離。隔離(前後桌滿足這個要求就會被隔離)。

3,優先規則有考生報滿四科先排座。按照專業優先排座。按照身份號排座(給考生的身份證號排個序列)。

4,地區範圍限制。考區,考點,考試場地,試室(某個考點下從第二試室到第八試室進行排座,目的也是盡可能提高座位使用率)。

5,考生範圍限制,這些考生是哪個考區的,又是哪些考點的。(目的也是提高座位利用率)

6,這個功能是開放給各個考點的,由考點的管理員使用。

學習並分析

1,準備300個考生的基礎資料,進行自動座位編排,debug方式進行理解學習。

2,整理出整個類圖及其相應關係。在national rose工具中畫出所有類圖關係,理解每乙個類的字段屬性和類的方法。當然命名上的不規範或者摸稜兩可是存在的。很是苦惱。也從此懂得了乙個好的命名甚至比演算法和**結構更為重要。

3,分析其演算法實現的思想。上萬行的**dubug一次會花費很多時間。

4,理解其演算法實現過程,本身就有一定難度,但是最終還是理解了(只能說是讀懂了而已),就是花費了很多的時間和精力。加班,但是不給加班工資。

我選擇在已有的演算法基礎上進行優化,因為並沒有想出更好的實現方式。原有的實現方式也在生產環境上跑了10多年,想必是非常穩定和值得學習借鑑的。

自動編排處,增加試室範圍方式。

手動編排處,查詢出有且只有滿足查詢條件的場次的考生。

設計其部分類圖關係和移動一些方法到相應的類中,提高**的整潔度和降低**理解的難度。

針對已經有的演算法實現過程。分析出其缺陷。

1,類的命名不規範。或者見名並不知意。

2,欄位名不規範,還出現拼音的方式。

3,合適的方法並沒有出現在合適的類裡。

4,大量使用構建器方式進行獲取物件。當然也有三處是使用單例模式的getinstance()方法獲取物件。

5,**彈性不好。設計其類圖及其關係,欄位名稱及方法。但是還是使用其原有的演算法思想,只是重新組織了**結構,讓其能夠清晰易懂。

1,把原來的單一試室選擇修改為範圍性的試室選擇。

2,在手動編排處,原來:查詢出滿足場次一的考生,是只要報了的科目存在場次一都會被查詢出來,對提高座位利用率根本沒有任何作用。修改:查詢只報了場次一的考生,並支援多個場次查詢。實際情況是,乙個專業是四個科目,乙個科目對應乙個場次。但是查詢的時候,需要傳入合理的場次資訊。12個場次(總是4的倍數)。分成1234是一組,5678是一組,9101112是一組。在js處寫演算法實現合理的場次(當我勾選場次一的時候,5678,9101112都會被置灰)。這個是乙個小演算法。可以先想想如何實現,然後學習一下,你們的更簡潔思路。要簡潔喲。

3,把原來的編排規則,採用面向介面的方式進行程式設計,利於擴充套件。

3,多型的方式取消原來的if  else  語句。

1,滿足生成環境的座位編排功能,管理員自動編排然後使用手動編排對單個不合理的考生佔座位進行移出移入,提高了座位利用率。

2,貢獻了一張整理的類圖,而類圖就表達了一切。我相信後面的維護此功能的人會更加愉悅。所以做這一件事情是非常有意義的。

3,**結構清晰易懂。

4,收穫,提高了對命名的認識深度,提高了**閱讀能力,提高了理解力。基礎知識的運用更加熟練。也認識到複雜的東西,只要足夠耐心和努力也是可以攻克的

核心類設計

我的設計思考過程 1

夜已深,我呆坐在凌亂堆著草稿的寫字桌旁邊,和今天鄭州的天氣一樣,我的心裡充滿了大霧。因為我以前也和朋友製作過幾個小的 頁面和功能都很簡單,我對ps dw fw flash等工具也比較熟悉,滿以為很簡單的問題,畢竟是個人的 嘛,也不是多麼複雜的技術,於是11月的時候就開始 的開發工作,那時候一切進行的...

學習SVM過程思考過的問題

1 在低維空間和高維空間中遇到線性可分和不可分的問題應該如何解決?在低維空間中的線性可分問題,可以直接用logistic回歸解,當然也可以用svm 沒有用到核函式或者理解為用了線性核 在低維空間中的線性不可分問題,用svm解,利用核函式將原 低維 空間對映到高維空間,但計算任然在原空間進行,降低了複...

程式即大腦的思考過程

程式即大腦的思考過程 例如 上班這個行為 我們現在住在b點,上班的地點是a點。現在,我們早上起床了,要上班了。搜尋了一下路線,發現可以通過路線c到達公司。那麼,我們的大腦中就形成了乙個資料夾。這就是我們大腦中的圖式,也就是記憶標籤。資料夾的名稱為,上班路線。以後,我們想到上班路線這個事情時,大腦就會...