首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求算法,该怎么处理

2012-03-22 
求算法现有C_m_n(27,7)888030,即只能在1,2,3...-27个号码中选7个号码的去组合,假设每一个组合初始时只能

求算法
现有C_m_n(27,7)=888030,即只能在1,2,3...-27个号码中选7个号码的去组合,假设每一个组合初始时只能选100次

01,02,03,04,05,06,07 100次
.
.
.
21,22,23,24,25,26,27 100次


假如现在我买 01,03,04,05,06,10,11,17,19,20,21,22,23,25,27 15个号码
这时候我就需要去判断这C_m_n(15,7)中的每一组号码是否超出了 100次的上限,
如何去快速查找我买的每一个组合目前的上限呢?

用二分法也不行,因为我必须在1秒内必须完成这个查找(服务器性能是很高的).

[解决办法]
呵呵 状态空间定位问题 组合数的状态空间我还真不知道

如果是排列数的状态空间 就可以用康拓展开式在O(1)时间内找到

详情参考
http://bbs.bccn.net/thread-362383-4-3.html
[解决办法]
第一个是03,则01,02,是满的全组合,则03的基数为C26^6+C25^6
第二个是04,基数为0
第三个是06,则05是满的,06的基数为C21^4;
第四个是08,则07是满的,08的基数为C19^3;
……
03040608101326对应的序号为C26^6+C25^6+C21^4+C19^3+C17^2+C15+C14+(26-14);
你可以简化一下,也可以用数组将每位的基数算好到时直接读取,避免二次计算,这样,你的查找速度将进入ns级(看在什么机器上)。

热点排行