2017華為軟件精英挑戰(zhàn)賽心得

連續(xù)擼了一整個(gè)清明假期的挑戰(zhàn)賽代碼終于結(jié)束了。作為比賽的最后店煞,做個(gè)小小的總結(jié)蟹演。

一些小感悟

  1. 寫代碼的時(shí)候,千萬不要為了方便隨意使用全局變量顷蟀,使用全局變量后酒请,代碼的耦合度大大提高。

  2. 對(duì)于這類比賽鸣个,能對(duì)特定的case進(jìn)行特定的編程或者調(diào)參羞反,對(duì)結(jié)果會(huì)有一定提升(可能會(huì)被禁止)。

  3. 對(duì)于每一次提交囤萤,保存好當(dāng)前的提交版本昼窗,使用git是一個(gè)不錯(cuò)的方案。

  4. 看不懂的代碼最好不要隨意復(fù)制涛舍,出了問題怎么改都不知道澄惊。

  5. 團(tuán)隊(duì)的互相協(xié)助,是在比賽中陷入僵局時(shí)的解藥富雅。

題目

【PDF】賽題

求解思路

基本思路是最小費(fèi)用流+遺傳

在剛看到題目的時(shí)候掸驱,很容易發(fā)現(xiàn)這是一個(gè)最優(yōu)化問題,而且屬于NP-難問題没佑。因此我第一個(gè)想法就是毕贼,采用遺傳或者粒子群算法進(jìn)行求解,目標(biāo)函數(shù)根據(jù)題意很快就可以寫出图筹,我們使用費(fèi)用函數(shù)即可帅刀,但是卻不知道怎么個(gè)編碼让腹,對(duì)服務(wù)器編碼 or 網(wǎng)絡(luò)流編碼 or both。

直到我找到了最小費(fèi)用最大流算法扣溺,使用該算法骇窍,輸入服務(wù)器節(jié)點(diǎn),即可計(jì)算出從服務(wù)器到滿足各個(gè)消費(fèi)節(jié)點(diǎn)需求的最小費(fèi)用網(wǎng)絡(luò)流路徑锥余。這樣腹纳,結(jié)合第一個(gè)思路,算法的整體框架就很明確了驱犹。我們先通過遺傳算法嘲恍,產(chǎn)生一堆服務(wù)器節(jié)點(diǎn),然后將這些服務(wù)器節(jié)點(diǎn)輸入到最小費(fèi)用流算法中雄驹,得出各條路徑佃牛,通過路徑和服務(wù)器信息我們既可以得出該方案下的網(wǎng)絡(luò)費(fèi)用,將費(fèi)用作為遺傳算法的適應(yīng)度函數(shù)医舆,再使用遺傳算法中的變異俘侠、交叉、選擇等操作蔬将,選出優(yōu)秀的染色體爷速,然后返回最小費(fèi)用流算法,如此迭代循環(huán)霞怀。下面展示算法的流程圖惫东。

最大流、最小費(fèi)用算法

算法的具體過程這里我就不展開了毙石,放上比賽時(shí)廉沮,我們參考的一些文檔與網(wǎng)頁(yè)。

【PDF】網(wǎng)絡(luò)流的應(yīng)用

最小費(fèi)用最大流

從入門到精通: 最小費(fèi)用流的“zkw算法”

SPFA算法

SPFA是一種單源最短路徑算法胁黑。在這個(gè)題目中废封,我們使用了最小費(fèi)用流算法,網(wǎng)絡(luò)中存在負(fù)權(quán)邊丧蘸,大家熟知的Dijkstra算法便失去了用武之地。SPFA該上場(chǎng)了遥皂。

SPFA算法的詳細(xì)步驟力喷,看看下面這個(gè)鏈接就好了(⊙o⊙)SPFA 算法詳解( 強(qiáng)大圖解,不會(huì)都難演训!)

接下來我說說針對(duì)賽題的改進(jìn)策略弟孟。

首先,SPFA算法本身有兩種改進(jìn)策略:SLF 和 LLL

SLF:Small Label First 策略样悟,設(shè)要加入的節(jié)點(diǎn)是j拂募,隊(duì)首元素為i庭猩,若dist(j) < dist(i),則將j插入隊(duì)首陈症,否則插入隊(duì)尾蔼水。

LLL:Large Label Last 策略,設(shè)隊(duì)首元素為i录肯,隊(duì)列中所有dist值的平均值為x趴腋,若dist(i)>x則將i插入到隊(duì)尾,查找下一元素论咏,直到找到某一i使得dist(i) <= x优炬,則將i出對(duì)進(jìn)行松弛操作。

SLF 可使速度提高 15 ~ 20%厅贪;SLF + LLL 可提高約 50%蠢护。

其次,我們?cè)谧钚≠M(fèi)用流使用SPFA算法時(shí)养涮,我們只需要知道是否存在從S到T的路徑糊余,而不必需要他們之間的最短路徑,因此单寂,我們?cè)谇蟮搅似渲械囊粭l路徑時(shí)dist != null贬芥,即可返回,不必繼續(xù)執(zhí)行宣决。

程序代碼

比賽的代碼我已經(jīng)放到GitHub上蘸劈,寫的比較糟糕,沒有優(yōu)化尊沸,請(qǐng)各位大佬輕噴+_+

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末威沫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子洼专,更是在濱河造成了極大的恐慌棒掠,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評(píng)論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屁商,死亡現(xiàn)場(chǎng)離奇詭異烟很,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蜡镶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門雾袱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人官还,你說我怎么就攤上這事芹橡。” “怎么了望伦?”我有些...
    開封第一講書人閱讀 170,031評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵林说,是天一觀的道長(zhǎng)煎殷。 經(jīng)常有香客問我,道長(zhǎng)腿箩,這世上最難降的妖魔是什么豪直? 我笑而不...
    開封第一講書人閱讀 60,334評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮度秘,結(jié)果婚禮上顶伞,老公的妹妹穿的比我還像新娘。我一直安慰自己剑梳,他們只是感情好唆貌,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垢乙,像睡著了一般锨咙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上追逮,一...
    開封第一講書人閱讀 52,895評(píng)論 1 314
  • 那天酪刀,我揣著相機(jī)與錄音,去河邊找鬼钮孵。 笑死骂倘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的巴席。 我是一名探鬼主播历涝,決...
    沈念sama閱讀 41,300評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼漾唉!你這毒婦竟也來了荧库?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,264評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤赵刑,失蹤者是張志新(化名)和其女友劉穎分衫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體般此,經(jīng)...
    沈念sama閱讀 46,784評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚪战,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恤煞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屎勘。...
    茶點(diǎn)故事閱讀 40,989評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖居扒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丑慎,我是刑警寧澤喜喂,帶...
    沈念sama閱讀 36,649評(píng)論 5 351
  • 正文 年R本政府宣布瓤摧,位于F島的核電站,受9級(jí)特大地震影響玉吁,放射性物質(zhì)發(fā)生泄漏照弥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評(píng)論 3 336
  • 文/蒙蒙 一进副、第九天 我趴在偏房一處隱蔽的房頂上張望这揣。 院中可真熱鬧,春花似錦影斑、人聲如沸给赞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽片迅。三九已至,卻和暖如春皆辽,著一層夾襖步出監(jiān)牢的瞬間柑蛇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評(píng)論 1 275
  • 我被黑心中介騙來泰國(guó)打工驱闷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耻台,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,452評(píng)論 3 379
  • 正文 我出身青樓空另,卻偏偏與公主長(zhǎng)得像盆耽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子痹换,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 前言 其實(shí)讀完斯坦福的這本《互聯(lián)網(wǎng)大規(guī)模數(shù)據(jù)挖掘》征字,讓我感覺到,什么是人工智能娇豫?人工智能就是更高層次的數(shù)據(jù)挖掘匙姜。機(jī)...
    我偏笑_NSNirvana閱讀 12,623評(píng)論 1 23
  • 1 序 2016年6月25日夜,帝都冯痢,天下著大雨氮昧,拖著行李箱和同學(xué)在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,109評(píng)論 0 12
  • 先貼上我們名次浦楣,我們是上合賽區(qū)的【上江湖南西盒浞剩】隊(duì)。初賽38名振劳,復(fù)活賽8椎组,然后就game over啦: 這次的賽題...
    歪歪kiu閱讀 12,057評(píng)論 4 49
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)历恐,斷路器寸癌,智...
    卡卡羅2017閱讀 134,722評(píng)論 18 139
  • [玫瑰]20170217徐海波讀《不輸在家庭教育上》分享(上海专筷,第195天) 《讀懂孩子說謊的“怪招”》摘錄: 5...
    覺之燈閱讀 273評(píng)論 0 0