将链表储存的单位随机取出一半

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了将链表储存的单位随机取出一半脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

最近有个需求,其中一个主要的要求是假设一个建筑物中有20个农民在进行修缮工作,我想要从这个建筑物到另一个建筑物进行一次拖拽操作。该拖拽操作将会将其中一的农民(向下取整,保证最少有一个农民)取出成一个农民小队,他们将前往另一个建筑物准备新的修缮工作。其中每个农民单位并不完全一样,比如里面可能有强壮类型的农民,灵活类型的农民或速度类型的农民,也就是说每个农民要视为单个的个体,不能直接按数量取出

大致看上去,想法就是直接在储存空间中进行取半数的循环,每次随机进行存储农民的类型,然后返回一个储存农民类型的List

但是存放农民信息的储存空间是链式结构,不能直接按索引取。那么最好的办法则是使用蓄水池算法

 

比如20个农民我们要取其中的10个农民,那么就先将前10个农民放进我们要返回的List中,而对第11个农民以10/11的概率选取他来替换已选中List的随机一个农民。

而该第11个农民被第12个农民替换后仍然保留的概率是 [第十二农民没被替换的概率]加上[第十二个农民替换但没选中第十一个农民的概率],总计为[2/12]加上[10/12 * 9/10],为11/12

那么以此可以判断第11个农民被第13个农民替换后仍然保留的概率为12/13,累乘后的式子则是10/11 *  11/12 * ... * 19/20,最后可以得出该农民被保留的概率为1/2,以此就能保证每个农民被选中的概率都是均等的。

 

最后返回这个List就完成了

脚本宝典总结

以上是脚本宝典为你收集整理的将链表储存的单位随机取出一半全部内容,希望文章能够帮你解决将链表储存的单位随机取出一半所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。