找回密码
 欢迎注册
楼主: mathe

[擂台] 马踏棋盘回路计数问题

[复制链接]
发表于 2011-5-31 17:19:37 | 显示全部楼层
经过近2小时的计算,6×7的哈密顿回路是: 2011-5-31 15:41:03 Total: 1067638 2011-5-31 17:14:07 按照这样的递增速度,9×10的,即使经年累月也几乎算不出来。

评分

参与人数 1鲜花 +1 收起 理由
KeyTo9_Fans + 1

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-6-1 03:34:05 | 显示全部楼层
我写了一个程序,可以快速计算$6$*$n$的棋盘的马步回路总数,结果如下: 棋盘规模?回路总数?程序运行时间 $6$*$7$:?$1067638$?$20s$ $6$*$8$:?$55488142$?$42s$ $6$*$9$:?$3374967940$?$56s$ $6$*$10$:?$239187240144$?$70s$ …… 当行数达到$8$时,每增加$1$行,运行时间增加$14s$。(在答案小于$2^64$的前提下) 通过搜索以上数据,发现这个工作已经被别人在半年前率先完成了: http://oeis.org/A175881 所幸的是,网上暂时未能搜索到$7$*$2n$的棋盘的马步回路总数。 我应该尽快改进我的程序,争取率先完成$7$*$2n$的棋盘的马步回路总数的计算工作。

评分

参与人数 1贡献 +3 收起 理由
mathe + 3

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-6-1 08:54:36 | 显示全部楼层
我的程序这几天刚设计出来,所以效率很低,7×8的算了整整一个通宵才到3000万,估计有几十亿。 版主既然能算6*10,就直接设计7*10,8*10,9*10好了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-6-1 11:02:45 | 显示全部楼层
我写了一个程序,可以快速计算$6$*$n$的棋盘的马步回路总数,结果如下: 棋盘规模?回路总数?程序运行时间 $6$*$7$:?$1067638$?$20s$ $6$*$8$:?$55488142$?$42s$ $6$*$9$:?$3374967940$?$56s$ $6$*$10 ... KeyTo9_Fans 发表于 2011-6-1 03:34
非常不错,链接里面已经算到很多项了: 0, 0, 0, 0, 8, 9862, 1067638, 55488142, 3374967940, 239187240144, 15360134570696, 964730606632516, 61989683445413228, 4005716717182224826, 255967892553030600920, 16378998506224697063588, 1050504687249683771795632, 67351449674771471216148786, 4314151246752166099728445868, 276453522147273309254029785276, 17717606001764726850971209939188, 1135386328785418512845166305951994, 72754625853111517738642395445641832, 4662311340698795306229004946849255108, 298772700964630993744576968415214630040, 19145888052227167790585189427230454709502, 1226902568798073025855948189578313739199398, 78622502118507651703659030426757524782646558, 5038287048556094010756276060713112469110084532, 322863244258188584511076820531771298243292346804, 20689713115693125810120458424283134088711708746418, 1325838052128808846982470604742513077251389064878480, 84962322582242436449028078490147227914653412498469176, 5444553480688572729507994773339404670293124094670063400, 348897761885575809340513599895637906535045836867112425442, 22358059291249098112956347313304579317330515128430578229580, 1432748662105938633370488721737295472216003424322051173765262, 91813368745075979865082473968848043302481279531417429418851766, 5883582334056740305836749071273843581025553554521365508472081512, 377031597006006571424070743308269493020186682009428464253448495336
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-6-1 12:54:22 | 显示全部楼层
此题与走格子路线数统计问题: http://bbs.emath.ac.cn/viewthread.php?tid=517 是同一类问题。 在走格子路线数统计问题里,$4$种走法的位移为: $(0,1)$、$(1,0)$、$(0,-1)$、$(-1,0)$ 我们可以根据 ... KeyTo9_Fans 发表于 2011-5-27 14:48
状态数目随着行的数目增加而迅速增加。对于9*n问题,不知道计算到5行时状态数目增加到多少。如果这时状态数目还不是多的离谱(比如规模在百万左右就还可以),我们可以将9*5行状态结果保存起来。然后同样另外一侧的5行也是这些状态,两边进行匹配就可以了。而匹配过程中,我们可以做一些简单索引,比如两边如果匹配,它们的联通分支数目必须相等,这样可以部分增加匹配的速度。 而同样,如果我们能够将9*6的所有状态都计算出来,那么反向的9*6的状态也同样在里面了,它们最边界两行必将重叠,于是应该可以相互计算对方的状态,由此可以更快的计算总数目
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-6-1 13:36:14 | 显示全部楼层
2011-6-1 13:12:50 path 1 1 28 3 14 11 26 9 18 23 20 4 13 30 27 6 15 24 21 8 17 29 2 5 12 25 10 7 16 19 22 path 2 1 28 3 14 11 26 9 16 19 22 4 13 30 27 6 15 24 21 8 17 29 2 5 12 25 10 7 18 23 20 path 3 1 28 3 24 11 26 9 20 17 14 4 23 30 27 6 21 12 15 8 19 29 2 5 22 25 10 7 18 13 16 path 4 1 28 3 24 11 26 9 18 13 16 4 23 30 27 6 21 12 15 8 19 29 2 5 22 25 10 7 20 17 14 path 5 1 28 3 12 25 10 7 18 23 20 4 13 30 27 6 15 24 21 8 17 29 2 5 14 11 26 9 16 19 22 path 6 1 28 3 12 25 10 7 16 19 22 4 13 30 27 6 15 24 21 8 17 29 2 5 14 11 26 9 18 23 20 path 7 1 28 3 22 25 10 7 20 17 14 4 23 30 27 6 21 12 15 8 19 29 2 5 24 11 26 9 18 13 16 path 8 1 28 3 22 25 10 7 18 13 16 4 23 30 27 6 21 12 15 8 19 29 2 5 24 11 26 9 20 17 14 path 9 1 28 25 8 5 20 23 12 17 14 26 7 30 3 24 9 18 15 22 11 29 2 27 6 19 4 21 10 13 16 path 10 1 28 25 8 5 20 23 10 13 16 26 7 30 3 24 9 18 15 22 11 29 2 27 6 19 4 21 12 17 14 path 11 1 28 25 18 5 20 23 14 11 8 26 17 30 3 24 15 6 9 22 13 29 2 27 16 19 4 21 12 7 10 path 12 1 28 25 18 5 20 23 12 7 10 26 17 30 3 24 15 6 9 22 13 29 2 27 16 19 4 21 14 11 8 path 13 1 28 25 6 19 4 21 12 17 14 26 7 30 3 24 9 18 15 22 11 29 2 27 8 5 20 23 10 13 16 path 14 1 28 25 6 19 4 21 10 13 16 26 7 30 3 24 9 18 15 22 11 29 2 27 8 5 20 23 12 17 14 path 15 1 28 25 16 19 4 21 14 11 8 26 17 30 3 24 15 6 9 22 13 29 2 27 18 5 20 23 12 7 10 path 16 1 28 25 16 19 4 21 12 7 10 26 17 30 3 24 15 6 9 22 13 29 2 27 18 5 20 23 14 11 8 2011-6-1 13:12:50 棋盘: 回路数 3*10: 16 4*10: 0 5*10: 13311268 6*10: 239187240144 7*10: ? 8*10: ? 9*10: ? 以10为边长,可能有点大,不知道有没有更好的扩充方法?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-6-1 16:19:21 | 显示全部楼层
经过2小时30分钟的计算,得到7*8棋盘的马步回路总数是34524432316。 由于我的笔记本电脑内存不够大,我只能将中间状态的数据写到硬盘上。 在硬盘上读写数据比在内存中读写数据慢10倍以上。 每个状态需要用16字节的数据表示。 中间状态数目的峰值是69414932,占用了1.04GB的硬盘空间。 计算8*9棋盘的马步回路总数估计要用30GB的硬盘空间,5天的时间。 如果是9*10的棋盘,大概需要800GB空间,6个月的时间。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-6-1 22:22:52 | 显示全部楼层
8*9的资源要求不大 9*10的就不行了需要优化
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-6-2 11:03:04 | 显示全部楼层
本帖最后由 KeyTo9_Fans 于 2011-6-2 11:09 编辑 7*2n棋盘的闭马路总数如下: 7*2: 0 7*4: 0 7*6: 1067638 7*8: 34524432316 7*10: 1250063279938854 7*12: 38350427205194670084 7*14的闭马路总数太多,我们只知道这个数除以2^64的余数为2987064776549805854。 ##### 现在暂时没有空闲的台式机可用,而我的笔记本电脑空不出30GB的硬盘空间,所以暂时不能计算8*n棋盘的闭马路总数。 等到一个月后我的台式机把另外一个程序跑完了,才可以计算8*n棋盘的闭马路总数。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-6-2 11:20:31 | 显示全部楼层
可以上载源代码吗?我可以帮你运行。不过我要在Linux上运行。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-21 21:09 , Processed in 0.027784 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表