登录
转载

笑喷了,我用Python帮韦小宝选最佳老婆组合

专栏一步一步带你学Python
发布于 2021-02-26 阅读 522
  • 程序员
转载

端午放假在家,平时上班真的很忙很忙,没有时间休息!而码农放松的最好的办法躺着看电视剧煲电影,有的人是喜欢看电影,有的人是打游戏,当然还有的码农酷爱看动漫。

小编其实三者都喜欢,而且还是一个武侠金庸迷,放假在家翻了翻**金庸的电视剧 “飞雪连天射白鹿,笑书神侠倚碧鸳”,每一部都非常经典。**最帅的还是古天乐版本的杨过,最羡慕的人物还是鹿鼎记里面的韦小宝。

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 秒

回复「韦小宝」即可获取源码

往期热门干货:

评论区

励志做一条安静的鳄鱼。

0

0

0

举报