算法描述:假如你能记住7(5~9不等,一般人瞬时记忆容量)个数,现在有n对不同的数,每当你找到一对,就可以将这对数从这堆数中删除。求算法使处理次数最小,并求n=100时最少处理次数
最少处理次数……?当然是100次……只要春哥保佑,每次都翻到一对就好。具体的算法的话,假设只能记住7个数,那么唯一的作法就是记住7个数后每次翻开两个,和前面7个对比,如果有相同的则消,否则继续。
■网友
从这个实际问题的角度看是不能排序的,也不能用哈希之类的东东,那似乎没有什么优化的余地,纯粹拼RP,最朴素的算法应该是先翻开并记住前7个数,有重复则去掉并继续记满7个,然后继续翻……翻到第200个数就一定前7张全部配对了,配对需要翻的平均次数是100,还剩93对,再按前面这样来,第二次配对平均需要翻93次,一直进行下去,总共需要100+93+86+79+...+9+2=765次。这是平均情况,最好情况,自然是前两个每次都配对去掉,那翻100次就足够了。
■网友
问题的起源应该是一个游戏吧,翻到相同的就去掉。表述可能有遗漏吧,呵呵
推荐阅读
- 假如把中国电信监测到的3亿人一个月每天上网的所有行为打个包,哪些数据应该被提出从这些数据能得到啥
- 端口到底是啥概念和ip之间有啥关系能形象+抽象的从技术角度描述一下吗
- 为啥这个算法误差的看起来这么小
- 使用算法帮助人们筛选reader的信息是否存在可能
- 请问如果想成为算法工程师的话,大学选专业是选软件工程好还是计算机科学与技术好。
- 怎样向不懂编程的人描述某一段代码的“优美”?
- 神经网络算法是否真的属于人工智能范畴
- 以算法为例,是否存在讲解者认为“懂得自然懂了,不懂的我说再多也白搭”的心理
- 豆瓣FM的推荐算法还有哪些可以改进的地方
- 如果已确定图像中物体的位置, 常用的目标分割和提取算法有哪些
