找回密码
 欢迎注册
查看: 1041|回复: 114

[讨论] 砌砖墙的趣题

[复制链接]
发表于 2025-2-26 00:20:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
砌砖墙的趣味难题
砌砖墙问题.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-2-26 07:51:46 来自手机 | 显示全部楼层
这个题目中墙高比较重要,30稍微大了一些,对计算资源要求太高了,稍微小一点计算压力就不会那么大了。
我们可以看纵向第一部分对应砖头排放方案,从上到下,只有2323...或3232...两种情况。
对于上面两种排列方案,我们都可以先去掉前面两列,余下0101...和1010...
任何时候,我们假设每个中间状态每行余下长度都是012之一。我们对上一个状态中所有余下长度为0的位置补上砖头,于是0变为2或3,原先的1或2保持不变(当然除了最后一步变换过程不允许出现相邻等高),这样012变为123,所以我们同样可以长度全部减1变为012。
由于所有的0不能相邻,最多一半行为0,每个0可以变换为2或3(但是如果相邻位置有2的就不可以选择2),所以每个状态最多可以到达2^15个状态,数目还可以接受。
而总体状态数目,第一行有012三种选择,但是下面每一行都不能和上一行相同,所以只能有两种选择,所以共3*2^29个状态,共1.5G个状态。
我们需要为这1.5G个状态都保留一个计数器,然后每次迭代产生一个新的1.5G个状态,使用双缓冲区需要3G个计数器。关键这些数字到后面可能会比较大,用8字节甚至16字节整数表示预计都会溢出。但是使用更大的整数很可能计算机内存空间会不够。
而一种可行结果就是选择一批接近2^64互素的数作为模,进行模运算,最后将不同模下计算结果使用中国剩余定理进行恢复。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-2-26 08:02:45 来自手机 | 显示全部楼层
改求W(28,8)看看

点评

22595322040  发表于 2025-2-27 14:10
这个数据量会很简单  发表于 2025-2-26 08:21
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-2-26 12:02:29 | 显示全部楼层
长度为 n 的墙,一层的铺设方案数记为`F_n`, 则\(F_n=F_{n-2}+F_{n-3},F_2=1,F_3=1,F_4=1\),
例如\(F_9=5\), 5种铺设方案分别为(2,2,2,3),(2,2,3,2),(2,3,2,2),(3,2,2,2),(3,3,3),分别记为\(A_1,A_2,A_3,A_4,A_5\),
相邻两层的可邻方案:\(A_1 ↔ A_4, A_2 ↔ A_5 ↔ A_3\),
设第m层为\(A_i\)的方案数为\(a_{i,m}\),则\(W(9,m)=a_{1,m}+a_{2,m}+a_{3,m}+a_{4,m}+a_{5,m}\),
\( \begin{pmatrix}
a_{1,m}  \\
a_{2,m}  \\
a_{3,m}  \\
a_{4,m}  \\
a_{5,m}  \\
\end{pmatrix}
=\begin{pmatrix}
0&0&0&1&0  \\
0&0&0&0&1  \\
0&0&0&0&1  \\
1&0&0&0&0  \\
0&1&1&0&0  \\
\end{pmatrix}\begin{pmatrix}
a_{1,m-1}  \\
a_{2,m-1}  \\
a_{3,m-1}  \\
a_{4,m-1}  \\
a_{5,m-1}  \\
\end{pmatrix}\)
求得\(W(9,m)=2^{\lfloor\frac{m+1}{2}\rfloor}+2^{\lfloor\frac{m}{2}\rfloor}+2\)

点评

W(10,m)=7, 8, 12, 18, 28, 44, ...  发表于 2025-2-28 10:46
看懂了!W(9,m)=正确!手工太难了。W(10,m)来几个?谢谢!  发表于 2025-2-28 10:41
n多试几个,看看\(A_1,A_2,A_3...\)之间的网络关系,\(A_1,A_2,A_3...\)相当于定点,有连线就表示可以互邻,看看有没有规律,完全没有连通的,就是相互独立  发表于 2025-2-28 09:53
如果有公式,关键要寻找可邻方案的映射规律,考虑对称性,分块矩阵,减小矩阵阶数  发表于 2025-2-26 18:28
$F_28=1081$,非手工可算的了.  发表于 2025-2-26 17:05
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-2-27 14:19:45 | 显示全部楼层
  1. W(5,3)=2
  2. W(6,3)=2
  3. W(7,3)=2
  4. W(8,3)=4
  5. W(9,3)=8
  6. W(10,3)=12
  7. W(11,3)=18
  8. W(12,3)=32
  9. W(13,3)=52
  10. W(14,3)=84
  11. W(15,3)=138
  12. W(16,3)=224
  13. W(17,3)=372
  14. W(18,3)=602
  15. W(19,3)=984
  16. W(20,3)=1622
  17. W(21,3)=2632
  18. W(22,3)=4326
  19. W(23,3)=7068
  20. W(24,3)=11538
  21. W(25,3)=18940
  22. W(26,3)=30880
  23. W(27,3)=50586
  24. W(28,3)=82774
  25. W(29,3)=135182
  26. W(30,3)=221490
  27. W(31,3)=361890
  28. W(32,3)=592050
  29. W(33,3)=968914
  30. W(34,3)=1583520
  31. W(35,3)=2591888
  32. W(36,3)=4238268
  33. W(37,3)=6931602
  34. W(38,3)=11341878
  35. W(39,3)=18544674
  36. W(40,3)=30339902
  37. W(41,3)=49624962
  38. W(42,3)=81159636
  39. W(43,3)=132775260
  40. W(44,3)=217145450
  41. W(45,3)=355198316
  42. W(46,3)=581008088
  43. W(47,3)=950261294
  44. W(48,3)=1554444062
  45. W(49,3)=2542445130
  46. W(50,3)=4158614872
  47. W(51,3)=6802350092
  48. W(52,3)=11125962552
  49. W(53,3)=18199000338
  50. W(54,3)=29767324088
  51. W(55,3)=48689175564
  52. W(56,3)=79641091872
  53. W(57,3)=130264504166
  54. W(58,3)=213072176376
  55. W(59,3)=348516717728
  56. W(60,3)=570055242266
复制代码

  1. W(5,8)=2
  2. W(6,8)=2
  3. W(7,8)=2
  4. W(8,8)=4
  5. W(9,8)=34
  6. W(10,8)=112
  7. W(11,8)=220
  8. W(12,8)=502
  9. W(13,8)=2052
  10. W(14,8)=6932
  11. W(15,8)=17878
  12. W(16,8)=46328
  13. W(17,8)=148544
  14. W(18,8)=479942
  15. W(19,8)=1359910
  16. W(20,8)=3772878
  17. W(21,8)=11374294
  18. W(22,8)=34936064
  19. W(23,8)=102506218
  20. W(24,8)=294713000
  21. W(25,8)=870875826
  22. W(26,8)=2617507202
  23. W(27,8)=7735113546
  24. W(28,8)=22595322040
  25. W(29,8)=66606869850
  26. W(30,8)=197913291570
  27. W(31,8)=585572397094
  28. W(32,8)=1722438038790
  29. W(33,8)=5076737233760
  30. W(34,8)=15024950202434
  31. W(35,8)=44422134336212
  32. W(36,8)=130997964852956
  33. W(37,8)=386430031644840
  34. W(38,8)=1141753533955872
  35. W(39,8)=3373655221138906
  36. W(40,8)=9958030701259110
  37. W(41,8)=29388419608058736
  38. W(42,8)=86790080054425448
  39. W(43,8)=256347413786406926
  40. W(44,8)=756865913979599708
  41. W(45,8)=2234335001007116852
  42. W(46,8)=6597394609869990208
  43. W(47,8)=19482781302086490892
  44. W(48,8)=57527219555110524796
  45. W(49,8)=169845776954810922238
  46. W(50,8)=501497183406137667130
  47. W(51,8)=1480846685491495250274
  48. W(52,8)=4372556574225491530904
  49. W(53,8)=12910451514299199510894
  50. W(54,8)=38120159791430188843994
  51. W(55,8)=112559393309682925845140
  52. W(56,8)=332357486816328885460062
  53. W(57,8)=981341246588125270846010
  54. W(58,8)=2897583308869358196767578
  55. W(59,8)=8555737874645973139378696
  56. W(60,8)=25262653717513938123110956
复制代码

  1. W(5,18)=2
  2. W(6,18)=2
  3. W(7,18)=2
  4. W(8,18)=4
  5. W(9,18)=1026
  6. W(10,18)=13532
  7. W(11,18)=52492
  8. W(12,18)=161464
  9. W(13,18)=5419032
  10. W(14,18)=94385908
  11. W(15,18)=653517380
  12. W(16,18)=3031190318
  13. W(17,18)=41406122054
  14. W(18,18)=722866878568
  15. W(19,18)=6618416976764
  16. W(20,18)=41147857059630
  17. W(21,18)=395581870108610
  18. W(22,18)=5880148170906870
  19. W(23,18)=62785147255739698
  20. W(24,18)=475301752397698704
  21. W(25,18)=4102137937682820450
  22. W(26,18)=51558909858908089200
  23. W(27,18)=579717342760207477970
  24. W(28,18)=5038564721563370586652
  25. W(29,18)=43335854641959711701112
  26. W(30,18)=477225542588996664792450
  27. W(31,18)=5374914492777019452357536
  28. W(32,18)=50814096418169751478577742
  29. W(33,18)=451324282765571437728703648
  30. W(34,18)=4605683113917978510340534032
  31. W(35,18)=50346139607250165592418539490
  32. W(36,18)=500237770489503326151466359462
  33. W(37,18)=4611673539765950943937650815126
  34. W(38,18)=45330920260731412140309463316352
  35. W(39,18)=479562216882260809527500921211400
  36. W(40,18)=4865240038369072163277257175600278
  37. W(41,18)=46340256614459864765726248030688152
  38. W(42,18)=450042920053408629096741426573049106
  39. W(43,18)=4625916170729336922256835121732515528
  40. W(44,18)=47207673819942095644942272593941149860
  41. W(45,18)=460022568646740914527728914872766757058
  42. W(46,18)=4469410533939318034830785156262625971442
  43. W(47,18)=45081124614042764494919428058617125029174
  44. W(48,18)=458416482768409541045937507725207061446792
  45. W(49,18)=4533281680380514932787533841337631178013828
  46. W(50,18)=44287260736887525475771105217030907833969830
  47. W(51,18)=441729646004470591046937635052632405977905452
  48. W(52,18)=4465500153827428400183714220522111060717270822
  49. W(53,18)=44488622858101663650391264696028756535633287084
  50. W(54,18)=437450592776497990440353676911692105793611352808
  51. W(55,18)=4341376907281848300805188372285741876352314385160
  52. W(56,18)=43617315620821797608032917885803545456708326426170
  53. W(57,18)=435920961309865543462316429763272359417125053044430
  54. W(58,18)=4309401074202423186110600711790782861820825236558024
  55. W(59,18)=42702255899349049481964697674794104257062498315893620
  56. W(60,18)=427079373506467512260261098948203976177678273099187618
复制代码

点评

W(30,28)=1436232808487659942960885259827737780  发表于 2025-2-27 20:20
是的,高度值决定了空间复杂度。不过由于使用大整数,宽度变大,大整数值变大,导致每个整数需要内存变大  发表于 2025-2-27 20:19
应该是高度值比长度值更决定计算量大小。  发表于 2025-2-27 19:04
计算到W(20,28)=504817263177870686178已经消耗54G内存了,估计进展不了多久了,随着大整数越来越大,应该很快会内存溢出。所以基本直到高度到20多一点  发表于 2025-2-27 17:40
验证了前几个数据,是正确的。编程思维很强大。  发表于 2025-2-27 15:38
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-2-28 08:25:28 | 显示全部楼层
  1. W(5,3)=2
  2. W(5,28)=2
  3. W(6,28)=2
  4. W(7,28)=2
  5. W(8,28)=4
  6. W(9,28)=32770
  7. W(10,28)=1664082
  8. W(11,28)=12754588
  9. W(12,28)=53632488
  10. W(13,28)=17172927220
  11. W(14,28)=1396582222520
  12. W(15,28)=25564099775312
  13. W(16,28)=214048909876110
  14. W(17,28)=14033497275877206
  15. W(18,28)=1295322428620005664
  16. W(19,28)=37007961627193010272
  17. W(20,28)=504817263177870686178
  18. W(21,28)=15409404291116782846950
  19. W(22,28)=1258433613107827413793412
  20. W(23,28)=47468150107899962317161314
  21. W(24,28)=907668599318003493336331466
  22. W(25,28)=20770595356595103736440426122
  23. W(26,28)=1302143435795255897467758192504
  24. W(27,28)=57099607501770633656907338658254
  25. W(28,28)=1404574101456107490397212309568276
  26. W(29,28)=30972294402378955108832388432526072
  27. W(30,28)=1436232808487659942960885259827737780
  28. W(31,28)=67163049757097022239786188244342552642
  29. W(32,28)=1975780758706447910863807389219229629322
  30. W(33,28)=46505223330987684037199883038619451472248
  31. W(34,28)=1712346196958214843693410665388009998846898
  32. W(35,28)=78473401101330960664899133408076542756636534
  33. W(36,28)=2626690256664306770183457300751773921380543296
  34. W(37,28)=67812141773566372292501287168582908521275376760
  35. W(38,28)=2171556375003107032620508833012951027976190879500
  36. W(39,28)=92990342309074804636254679307169658558517933591350
  37. W(40,28)=3364399501468350227755374401943826996898981912113860
  38. W(41,28)=95372617006865994123831403953084265571756759240464148
  39. W(42,28)=2871044671389878376834846808687068083025351210371195042
  40. W(43,28)=112501332497411767575773283243345380289510062715430790656
  41. W(44,28)=4231815998480366669679535225149058244061704505469250588320
  42. W(45,28)=129723159150295555402809019353029267417193977390471503054122
  43. W(46,28)=3861456108521620209913777954710887506925282651603861100474946
  44. W(47,28)=139801110474395947811304670713697583882605567933704019723610376
  45. W(48,28)=5278835373910199151476874372162930811037489805583874103473950434
  46. W(49,28)=172070201944364970567915662626290366526741493785825831880250218132
  47. W(50,28)=5203180021279721351423895535693462044036635417396213483340785846686
  48. W(51,28)=177657500737767403760520990212287241418368613126215561714675878713988
复制代码

上面计算消耗13小时(80G)内存。
由于高度从28到30,无论空间还是时间复杂度都增加四倍以上,预计用这种方法计算W(60,30),需要至少512G内存的服务器,计算时间会在三天左右。
这个算法的一个问题是主要时间花费在内存访问上,所以CPU计算能力不重要。我试过采用openmp进行多线程计算,发现没有任何好处。
另外一种可行方案就是将中间数据写入SSD磁盘,但是由于磁盘速度远低于内存,整个时间会慢很多倍(比如以月为单位?)。

点评

厉害了, 80GB内存的电脑,是公司的吗  发表于 2025-2-28 18:11
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-2-28 08:32:25 | 显示全部楼层
换个方向试试 ?

已知W(9,3)=8, W(9,8)=34, W(9,18)=1026。

W(9,1)=5,
W(9,2)=6,
W(9,3)=8,
W(9,4)=10,
W(9,5)=14,
W(9,6)=18,
W(9,7)=26,
W(9,8)=34,
W(9,9)=50,
W(9,10)=66,
W(9,11)=98,
W(9,12)=130,
W(9,13)=194,
W(9,14)=258,
W(9,15)=386,
W(9,16)=514,
W(9,17)=770,
W(9,18)=1026,

{5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 258, 386, 514, 770, 1026, 1538, 2050, 3074, 4098, 6146, 8194, 12290, 16386, 24578, 32770, 49154, 65538}

LinearRecurrence[{1, 2, -2}, {5, 6, 8}, 30]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-2-28 12:40:47 | 显示全部楼层
本帖最后由 yigo 于 2025-2-28 12:56 编辑

n=12,13时的映射关系和矩阵:
111111.jpg
或者这样表示映射关系:
111112.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-2-28 16:59:29 | 显示全部楼层
难道没有公式吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-2-28 19:07:10 | 显示全部楼层
已知W(10,3)=12, W(10,8)=112, W(10,18)=13532, W(10,28)=1664082。

W(10,1)=7,
W(10,2)=8,
W(10,3)=12,
W(10,4)=18,
W(10,5)=28,
W(10,6)=44,
W(10,7)=70,
W(10,8)=112,
W(10,9)=180,
W(10,10)=290,
W(10,11)=468,
W(10,12)=756,
W(10,13)=1222,
W(10,14)=1976,
W(10,15)=3196,
W(10,16)=5170,
W(10,17)=8364,
W(10,18)=13532,

{6, 8, 12, 18, 28, 44, 70, 112, 180, 290, 468, 756, 1222, 1976, 3196, 5170, 8364, 13532, 21894, 35424, 57316, 92738, 150052, 242788, 392838, 635624, 1028460, 1664082, 2692540, 4356620}

LinearRecurrence[{2, 0, -1}, {6, 8, 12}, 30]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2025-3-9 22:29 , Processed in 0.030800 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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