编程序解决组合数学问题,程序效率不高咋办

这么久都没人回答……手机党只好,手写证明了……编程序解决组合数学问题,程序效率不高咋办

很多细节没办法补充,如果你在我面前的话,还能跟你说……不过上面那些结论,可以做出严谨的证明。对了,那个C集合是不可选的元素集合。
■网友
设B中最大元素为S,则B至多有S个元素。
那么把这个S个元素两两配对,(1,S-1),(2,S-2)。。那么可知,B中元素必定是从这些配对中至多每对取一个(一般情况下,有些配对的两个元素一个都没取)。那么可以估计B中元素的数目至多为S/2个(取整什么的细节先不管)。
上面只是一个简单的对于B中元素数目的简单估计。估计结果就是大致是原集合的一般左右。
那么根据上面的想法,可以尝试构造如下:
B={1008,1009,。。。,2015},即将比2015/2大的元素都挑出来。
B={1,3,5,。。。,2015},即将奇数都挑出来。
【编程序解决组合数学问题,程序效率不高咋办】 将2015个元素分成4分,取第二份和第四份。
将2015个元素分成8分,取第2、4、6、8份。
类似分成16份,32份,64份,128份,256份,512份等等,顺着取差不多就行了。不过分得越多分,每份的边缘不一定都会取进去,这样分多了反而浪费。具体计算一下哪个取法多好了。
基本上估计结果就是一半左右了。
暂时想到这么多。。

■网友
设A={1,2,……,N},B={x,x∈A且mod(x,2)=1},即B就是A中所有奇数的集合。因为三个奇数满足x+y≠z,这样计算量就减少了一半。接下来考虑往B中加入偶数,再对偶数细分,将mod(x,2)=0分成两类mod(x,4)=0和mod(x,4)=2,可以证明下B1=B∪{x,x∈A且mod(x,4)=0}是否满足x+y≠z,若不满足则再将mod(x,4)=0细分为mod(x,8)=0和mod(x,8)=4两种情况,以此类推……算法思路就这样。


    推荐阅读