【求一高效算法,感兴趣的朋友可以来试试,高分】解决方案整理系列三

来源:互联网 发布:淘宝店主收到法院传票 编辑:程序博客网 时间:2024/05/16 16:02

 问题: (帖子路径:http://topic.csdn.net/u/20091027/09/db4cd117-bfbe-491f-bcb8-d54ee08c0787.html)
求一个高效算法:
有100名小朋友,
现在有一堆礼物
若是礼物数量小于100,比如为81,则这个81份礼物随机分配给小朋友,但要确保是一个人只能拿到一份礼物;

若是礼物数量大于100,
比如为115,则每个人至少有一份礼物,部分人有两份礼物,但没人拿到两份份以上的礼物;
比如为245,则每个人至少有两份礼物,部分人有三份礼物,但没人拿到三分份以上的礼物;

就是这个思路,这里声明不是大学老师布置的题目啊,是自己工作中一个抽象出来的问题,
希望得到大家的思路,,参与者,高分重谢!
也是个大家交流的机会

 

 


这个帖子让我感慨,我们csdn论坛中卧虎藏龙,真的很佩服,

本次系列一,把主要的解决思想整理一下

地址:http://blog.csdn.net/yinyuan1987/archive/2009/10/30/4748636.aspx

系列二,把大家使用不同的解决方法或实例提出来共享一下

地址:http://blog.csdn.net/yinyuan1987/archive/2009/10/30/4748671.aspx

系列三,把大家对性能方面思路提出来共享一下

地址:http://blog.csdn.net/yinyuan1987/archive/2009/10/30/4748715.aspx

 

 

 

 

三.对性能方面的思考:

79楼朋友asxinyu_usst说:

楼主说的是不是礼品和人数都很大时,产生的随机数会冲突导致效率降低啊?
我认为,上面的方法有几种都可行,关键是用的随机数和打乱小朋友的算法效率?

如果人数比较少呢,把小朋友打乱,相当于产生一个随机全排列,每次按照这个随机全排列来打乱,然后从头到尾分配即可;这种随机全排列的生产算法我研究过,我有比较好的方法实现。

如果人数比较多的话,产生随机全排列的方法不一定可行,但是呢,可以对问题进行分块,在块内进行随机分配,我想你抽象出来的问题既然要随机分配的话,应该对这个随机性有些要求,否则直接从头到尾分好了。

我认为 随机性的这个要求不同会影响到算法的效率。

 

 

78楼朋友引用71 gukuitian 的回复:


这个洗牌算法 就类似于生成一组全排列数据啊。。。我有过研究。。。如果你需要的随机性高,花的时间就多点。。。。

 

98楼朋友sbwwkmyd提供了:

位图法生成随机数

 

184楼朋友wo554006164测试:

我写了个,礼物1亿,小朋友1万时用时在1秒左右.不怎么样!

原创粉丝点击