笑噴了,我用Python幫韋小寶選最佳老婆組合

端午放假在家,平時上班真的很忙很忙,沒有時間休息!而碼農放鬆的最好的辦法躺着看電視劇煲電影,有的人是喜歡看電影,有的人是打遊戲,當然還有的碼農酷愛看動漫。

小編其實三者都喜歡,而且還是一個武俠金庸迷,放假在家翻了翻金庸的電視劇 “飛雪連天射白鹿,笑書神俠倚碧鴛”,每一部都非常經典。最帥的還是古天樂版本的楊過,最羨慕的人物還是鹿鼎記裏面的韋小寶。

01.小寶的7個老婆

韋小寶有7個老婆,每一個老婆都是如花似玉,才藝非凡,都有自己的技能和亮點,我大概列了一個表格:

如果現在給韋小寶出一道題目,如果只能選擇最少個數的老婆來滿足所有的技能,應該怎麼選。就是佔據了顏值高,脾氣好,有智慧,武功高,有社會地位,而且還溫柔善良。

是不是很麻煩該怎麼選擇呢?今天我們用Python大法來幫小寶一把,看我Python大法如何解決~

02.數據結構設計

我們需要把上面的表格裏面的數據轉爲計算機的數據結構,我們用列表來存儲數據。分別列了技能,老婆的名字和每個老婆擁有的技能,大致如下:

  • Talents爲技能樹

  • wives爲老婆的名字

  • WifeTalents爲每個老婆的技能列表

這裏用了一個嵌套列表,注意這個嵌套列表的順序和上面的老婆的名字一一對應。

看起來裏面最弱的應該是建寧公主,她僅僅佔據了社會地位這一點,其他的武功,性格,智慧好像都不行。而雙兒應該是奪冠的熱門對象,溫柔又體貼,還會做飯,武功也高。那麼到底用程序算出來的結果是怎麼樣呢,我們拭目以待~

03.算法來也

1).首先,設定搜索的空間

小寶有7個老婆,我們可以選擇或者不選擇其中的每一位佳人。每位佳人對應的就是兩種選擇,因爲搜索的空間爲2**n ,7個老婆的搜索空間就是2的7次方,比如:

假設7個人爲A,B,C,D,E,F,G

[]

[A][B][C][D][E][F][G]

[AB][AC][AD][AE]...

[ABC][ABD][ABE]...

[ABCD][ABCE]...

...

限於篇幅,我就不完全展開了所有的組合情況。

2).接着,設計一個函數來檢查技能

我們上面有這麼多組合,我們接着我們設計一個函數來專門檢查,是否缺少一門技,如果缺少一門技能絕活,說明這個不是正確的組合,需要拋棄。


如果我們檢查了所有的技能絕活且在所有的迭代中都沒有返回False,意味着該組合覆蓋了所有的絕活,則返回True.

03.主函數設計

  • 這裏是7個老婆,wifeList爲7,我們用 result來暫時存儲,起始的值爲完整的7個老婆;

  • 然後我們設計一個搜索空間2的n次方,num=i爲對應的組合;

  • 接着用前面設計的excellent函數來檢查這個組合是否覆蓋了所有的技能絕活;如果滿足了,則與當前已知最優的老婆組合進行比較,如果人數少,則更新最優組合;

最後運行一下代碼,看看計算機算出來的,最佳老婆組合是什麼:

答案竟然是蘇荃,建寧公主,曾柔 ,也就是說選擇了這3個老婆就可以佔全了所有的技能列表。我們來看一下:

確實從圖標上看 蘇荃,建寧公主,曾柔 可以佔滿技能樹!但是竟然沒有雙兒,溫柔可人,武功高強的雙兒竟然落選了。天哪,小編第一個表示不服氣,小夥伴們你們服氣嗎,趕緊在留言區寫下你的評論。

需要本次源碼的繼續研究的,可以在文末獲取。

????長按上方二維碼 2 秒

回覆「韋小寶」即可獲取源碼

往期熱門乾貨:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章