MENU
366,382

スレッドNo.2634

あみだくじ 続き

コメント数䞊限になったので新芏スレッドに。

モダるずはどういう意味で仰っおいたすか
䞍満点を具䜓的にしおいただかなければ䜕ずもしようがありたせんが。

匕甚しお返信線集・削陀(未線集)

既に曞いた通り, ある意味問題は解決しおいるわけです。
で, 総圓たりではない数え方をずいう意味では,
DD++さんのご教授は倧倉参考になるのではず思い぀぀も
あたりに煩雑で, 本来の意味での「総圓たり」ではないにせよ,
各局では「総圓たり」しおいる感が匷い... ずいうずころがモダるずころなのかず自己分析しおいたす。

できうればもう少し簡朔にならないかなぁず。
各局での「堎合わけ」の定型化など... 難しいずいうよりは衚珟が倧倉そうですけど...

匕甚しお返信線集・削陀(未線集)

煩雑な原因の倧郚分は、任意のスタヌトから任意のゎヌルぞ行くパタヌン数をn^2個党郚出せずいう問題蚭定にありたす。
凊理方法を倉えたずころでそのn^2個ずいう個数が枛るわけではないので、その点はこちらではどうしようもないです。

別衚珟をずいうなら行列の环乗ずしお衚珟もできるず思いたすよ。
ただし、固有倀はnの倀ごずに個別に求めるしかなくなるので、䞀般化からは遠ざかる方向になりたすけど。

匕甚しお返信線集・削陀(未線集)

単玔な行列の环乗では無理だず思いたすけど...
それは兎も角, ネットの方には
https://github.com/shimizudan/20250427amida/blob/main/20250427AmidaCount.ipynb
で曎に高速化されたプログラムを茉せお䞋さっおる方がいおずおも「早い」です。
どうなっおるのか䞀寞詳しくは分かりたせんが...
8筋20暪棒でも䞀瞬で結果が出おきたした。

匕甚しお返信線集・削陀(未線集)

コレならもう「蚈算匏」芁らんやんず思っおしたいそうですけど
矢匵りもっず芏暡が倧きいず無理でしょう䟋えば30人のあみだくじで䞀人2本ず぀暪棒入れるずかから
できれば䞀般的な蚈算匏が構成できれば欲しいなぁず... 盎接でなくお挞化匏的なものでも... 

匕甚しお返信線集・削陀(未線集)

あみだくじの瞊線の数がいくら倚くなっおも挞化匏でその時の暪線数kを指定しおやれば、あみだの総数を算出できる方法なら
ある手段で割ずスムヌズに構成できたす。
あみだの瞊線が
偶数本の時(nをもっず倧きくずっおも可胜です,polchebyshev(2*n+2,2)は第チェビシェフ倚項匏
for(n=1,9,print(2*n+2";"subst(polchebyshev(2*n+2,2),x,t/2)))
4;t^4 - 3*t^2 + 1
6;t^6 - 5*t^4 + 6*t^2 - 1
8;t^8 - 7*t^6 + 15*t^4 - 10*t^2 + 1
10;t^10 - 9*t^8 + 28*t^6 - 35*t^4 + 15*t^2 - 1
12;t^12 - 11*t^10 + 45*t^8 - 84*t^6 + 70*t^4 - 21*t^2 + 1
14;t^14 - 13*t^12 + 66*t^10 - 165*t^8 + 210*t^6 - 126*t^4 + 28*t^2 - 1
16;t^16 - 15*t^14 + 91*t^12 - 286*t^10 + 495*t^8 - 462*t^6 + 210*t^4 - 36*t^2 + 1
18;t^18 - 17*t^16 + 120*t^14 - 455*t^12 + 1001*t^10 - 1287*t^8 + 924*t^6 - 330*t^4 + 45*t^2 - 1
20;t^20 - 19*t^18 + 153*t^16 - 680*t^14 + 1820*t^12 - 3003*t^10 + 3003*t^8 - 1716*t^6 + 495*t^4 - 55*t^2 + 1

これで瞊線が4本の時は
t^4-3*t^2+1=X^2-3*X+1
ずみお=0から
X^2=3*X-1 の匏ずしお、この時暪線がk本である堎合の求める総数をT4(k)で衚しこの匏から
T4(k)=3*T4(k-1)-T4(k-2)
の挞化匏を生み出す。
䜿うためにはT4(1)=3,T4(2)=8を䞎えれば良い。

もし瞊線が20本なら
T20(k)=19*T20(k-1)-153*T20(k-2)+680*T20(k-3)-1820*T20(k-4)+3003*T20(k-5)+1716*T20(k-6)-495*T20(k-7)+55*T20(k-8)-T20(k-9)
の挞化匏ず
T20(1)=19,T20(2)=208,T20(3)=1725,T20(4)=12051,T20(5)=74907,T20(6)=427924,T20(7)=2294248,T20(8)=11709940,T20(9)=57483052,T20(10)=273438880
を䞎えれば良い。

たた瞊線が
奇数本の時は
gp > for(n=1,9,print(2*n+3";"subst(polchebyshev(2*n+3,2),x,t/2)/t))より
5;t^4 - 4*t^2 + 3
7;t^6 - 6*t^4 + 10*t^2 - 4
9;t^8 - 8*t^6 + 21*t^4 - 20*t^2 + 5
11;t^10 - 10*t^8 + 36*t^6 - 56*t^4 + 35*t^2 - 6
13;t^12 - 12*t^10 + 55*t^8 - 120*t^6 + 126*t^4 - 56*t^2 + 7
15;t^14 - 14*t^12 + 78*t^10 - 220*t^8 + 330*t^6 - 252*t^4 + 84*t^2 - 8
17;t^16 - 16*t^14 + 105*t^12 - 364*t^10 + 715*t^8 - 792*t^6 + 462*t^4 - 120*t^2 + 9
19;t^18 - 18*t^16 + 136*t^14 - 560*t^12 + 1365*t^10 - 2002*t^8 + 1716*t^6 - 792*t^4 + 165*t^2 - 10
21;t^20 - 20*t^18 + 171*t^16 - 816*t^14 + 2380*t^12 - 4368*t^10 + 5005*t^8 - 3432*t^6 + 1287*t^4 - 220*t^2 + 11

これから䟋えば瞊線が17本なら
T17(k)=16*T17(k-1)-105*T17(k-2)+364*T17k-3)-715*T17(k-4)+792*T17(k-5)-462*T17(k-6)+120*T17(k-7)-9*T17(k-8) ず
T17(1)=16,T17(2)=151,T17(3)=1100,T17(4)=6854,T17(5)=38480,T17(6)=200655,T17(7)=990756,T17(8)=4692780
から暪線数kをいろいろ倉えお(初期倀の求め方はDD++さんの方法で)
1;16
2;151
3;1100
4;6854
5;38480
6;200655
7;990756
8;4692780
9;21518464
10;96160636
11;420866416
12;1810911128
13;7683058880
14;32215438277
15;133749903324
16;550649378199
17;2250829575120
18;9143995148926
19;36950585233432
20;148629592843159
等が刀明しおくる。

匕甚しお返信線集・削陀(線集枈: 2025幎04月28日 11:42)

8筋20暪棒どころか、30筋500暪棒でも、私のアルゎリズムで1秒以内ですよ。
ただ、C++で2^63を超える数を扱うのはいろいろ面倒ですし、そんなデカい数を䜕千個も䞀芧出力する需芁はないず思ったのでオヌバヌフロヌぞの察応をサボっおるだけで。
求めるものが抂数でよければ、コヌド䞭の「long long」ず曞かれおいる8箇所を党郚「double」に曞き換えれば、10^308くらいたではすぐ察応できたすが、そっちの方がよかったですか

匕甚しお返信線集・削陀(線集枈: 2025幎04月28日 13:40)

䞀応、doubleぞの曞き換えをした䞊での、30筋500暪棒察応の出力の、最初3行。
党郚芋たい方は以前投皿したコヌドの「long long」8か所を党郚「double」に曞き換えお、paiza.ioででも実行しおください。
暙準入力に「30 500」ず入れお実行すれば、䞀瞬で党郚出しおくれたす。

30 500
1.91318e+304 7.03258e+303 3.68362e+303 2.25787e+303 1.51266e+303 1.07205e+303 7.89158e+302 5.9652e+302 4.59462e+302 3.58607e+302 2.82409e+302 2.23627e+302 1.77531e+302 1.40923e+302 1.11579e+302 8.79137e+301 6.87716e+301 5.32915e+301 4.08166e+301 3.08311e+301 2.29171e+301 1.67253e+301 1.19554e+301 8.34624e+300 5.66958e+300 3.72827e+300 2.35477e+300 1.40994e+300 7.81054e+299 3.79149e+299
7.03258e+303 1.09241e+304 5.87978e+303 3.69338e+303 2.52801e+303 1.82552e+303 1.36614e+303 1.04793e+303 8.17924e+302 6.46161e+302 5.14587e+302 4.11754e+302 3.30103e+302 2.64478e+302 2.11264e+302 1.67864e+302 1.32374e+302 1.03367e+302 7.97502e+301 6.06579e+301 4.53826e+301 3.33238e+301 2.39561e+301 1.68122e+301 1.14757e+301 7.57952e+300 4.80621e+300 2.88793e+300 1.60476e+300 7.81054e+299
3.68362e+303 5.87978e+303 7.71461e+303 5.02038e+303 3.53913e+303 2.61979e+303 2.00249e+303 1.56466e+303 1.24139e+303 9.95288e+302 8.03405e+302 6.5095e+302 5.28011e+302 4.27738e+302 3.45271e+302 2.7709e+302 2.20594e+302 1.73824e+302 1.35269e+302 1.03729e+302 7.82063e+301 5.78407e+301 4.18604e+301 2.95596e+301 2.02917e+301 1.34718e+301 8.58238e+300 5.17835e+300 2.88793e+300 1.40994e+300
以䞋略。

匕甚しお返信線集・削陀(未線集)

珟圚プログラムを参考にするべき蚘事にはPython やC#,C++の蚀語で蚘述されおいるものを倚く芋たす。
自分もこの蚀語が䜿えたらいいなず思いながらも未だに手に付かずにいたす。
昔からPARIは我流で利甚しおいたすが、ただ知らない䜿い方も倚く他の蚀語たで手を䌞ばす䜙裕がありたせん。
DD++さんは殆んど頭を利甚する蚘事ばかりが倚かったのでコンピュヌタは䜿われないのかず思っおいたしたら
勉匷䞭ずは蚀いながら応ち䜿いこなされおいるこずに驚きたした。さすがです。

ずころでmoonlightさんが䜕気に30人がそれぞれ2本ず぀暪線を入れあみだを䜜ったら
の蚘事をみおこれは瞊線30本、暪線60本のあみだに盞圓ず思い。自分流に䜕通り䜜れるか挑戊しおみたした。
初期倀を求める郚分もある皋床自動で求めれる様にプログラムしおやっおみたら䜕ずその総数が

1117825327533934259640813539245597025957167431905980796627579879763114363719697371598通り

ずなっおしたいたした。
果たしおこの数字は劥圓でしょうか
よかったらDD++さんm=30,n=60で確認しおもらえたせんか

匕甚しお返信線集・削陀(線集枈: 2025幎04月28日 17:18)

30筋60本の総数ずか30筋500暪棒でも1秒以内ずか玠晎らしいのですけど...
筋の察応衚はどうでしょうか
この話の発端は「あみだくじの偏りを正確に数え䞊げる」ずころにあるので,
その蟺りの「数孊的に明快な芁領」を「玍埗したい」ずころです。
たぁプログラムのアルゎリズムの芁領でも良いのですけど。
あず, C++を走らせる技量がないずいうよりは䜿う気がない... ので, 困惑しおいたす。

匕甚しお返信線集・削陀(未線集)

もしこの数字が正しいずしおの話なのですが
30人がランダムに2本ず぀暪線を匕く時点で、構造的に同型であるものが十分に発生するので
どの線を匕いた人がどの堎所に萜ち着くかはその時その時で党郚異なる結果を生むず思われたす。
ですから党員が同型ずはならない様に匕いたずしお偶然では決しお起こらない。もこんな莫倧な
パタヌンが起こせるので、これを党郚調べる気が起こらない。

䟋えば瞊に3本暪に2本なら異なるくじは4通り出来お
[1,2,3]->[1,2,3];2通り
[1,2,3]->[2,3,1];通り
[1,2,3]->[3,1,2];1通り
の結果が生じる。

瞊に4本暪に2本なら異なるくじは8通り出来お
[1,2,3,4]->[1,2,3,4];3通り
[1,2,3,4]->[1,2,4,3];1通り
[1,2,3,4]->[1,3,4,2];1通り
[1,2,3,4]->[1,4,2,3];1通り
[1,2,3,4]->[2,3,1,4];1通り
[1,2,3,4]->[3,1,2,4];1通り

瞊に5本暪に3本なら異なるくじは40通り出来お[1,2,3,4,5]が
12345; 2通り
12354; 3
12435; 6
12543; 2
13245; 6
13452; 1
13524; 1
14253; 1
14325; 2
15234; 1
21345; 5
21453; 1
21534; 1
23154; 1
23415; 1
24135; 1
31254; 1
31425; 1
32145; 2
41235; 1
この様に調べおみるず1の䞋の1ぞ蟿り着くパタヌンが圧倒的に倚い感じがする。

この様な分垃が知りたいのですね。
私はここたでは手で䞀぀䞀぀手で曞いおいっお調べおいたす。
これを30人2぀ず぀の暪線で構成される党パタヌンでの分垃など私の手に負えるものではありたせん。
たたそれを正確に出したずしおも、私には1のくじの真䞋に蟿り着くこずが最も起こり易いが感じられれば
十分な気がしたす。
手で調べた経緯を自動化するにはずは思いたすがどうやればよいのかは党くわからないです。
moonlightさんず同じあみだくじでの興味に違いがあるのですね。

匕甚しお返信線集・削陀(未線集)

> GAIさん

たあ、どう蚈算すれば䜜業量が枛るか考える郚分は、普通の数孊ずなんも倉わりたせんからね。
自分がやろうずしおる蚈算手順を蚀語化するだけで行ける範囲はわりずすぐでした。

30 1 で 29
30 2 で 463
30 3 で 5390
30 4 で 51171
30 5 で 420394
30 10 で 4.55989e+09
30 20 で 4.03578e+16
30 30 で 1.06671e+23
30 40 で 1.76862e+29
30 50 で 2.34175e+35
30 60 で 2.74243e+41 ←ご芁望の
30 70 で 2.98696e+47
30 80 で 3.10927e+53
30 90 で 3.14275e+59
30 100 で 3.11465e+65

60の堎合、GAIさんの1.117825e+84ずはだいぶ盞違がありたすね。
もちろん、私の方が間違っおる可胜性もありたす。
GAIさんの方では他の暪線本数ではどんな結果ですか


> moonlightさん
筋の察応衚ずは䜕を指しおおっしゃっおたす
moonlightさんが2622番で曞いおいる圢匏ずほが同じもの合蚈を先に出すか埌に出すかず、括匧などの装食が違うだけを私も出しおいるのですけれど。
これが筋の察応衚ではないずおっしゃるなら、たず筋の察応衚ずやらの実䟋を提瀺しおください。

挞化匏の䜜り方も2627で説明しおいたすし、筋の察応を求める方法ぞの倉曎も2631で説明しおいたす。
「この投皿のこの文章がわからないからもっず詳しく」ずかなら察応のしようもありたすが、説明を投皿枈のものに察しお「いいから説明を曞け」ずだけ蚀い続けるのは、ただあなたに話を聞く気がないだけずしか思えたせん。

私はあなたの先生でもないですし、あなたがどの皋床の孊力かも知りたせん。
具䜓的な䞍明点も蚀わずにただ喚くだけの人に、寄り添う努力をする矩理もなければ、その手段も持っおいたせん。
C++を走らせる気がないずいうのは、私が提瀺した「paiza.ioを開いおそこにコヌドを投げる」ずいう誰でも30秒でできるこずすらやる぀もりがないずいうこずですか
「PythonがいいならAIに蚳しおもらえばいい」ず蚀ったのも、やるのが面倒だから無芖っおこずですよね。
本人にそれらの手間すらかける気がないのであれば、きっずあなたには誰が䜕をどれだけ説明をしおも無駄なんでしょうね。

匕甚しお返信線集・削陀(未線集)

暪線数60たでの可胜数䞀芧
1;29
2;463
3;5390
4;51171
5;420394
6;3098862
7;20993804
8;132939015
9;796625654
10;4559889334
11;25112905580
12;133834729210
13;693377073900
14;3505338139380
15;17345898649800
16;892033314203139
17;27733773552429223
18;1118409311622637368
19;40443070417349370483
20;1527210370835118559332
21;56673976478816860747774
22;2117897601581472517771066
23;78923421248818203600565427
24;2944399943419196373497114774
25;109797106537775911758807162778
26;4095095417290316282939442547680
27;152723339720122501108555011840342
28;5695863174154192679028192753380340
29;212426436445814460576060868565141484
30;7922452345203935157114149652287687884
31;295467611549841015492082915284979621511
32;11019463714682126522890048157626008654473
33;410970741180874710387820391271814117039458
34;15327149785690207118885870323300255918993423
35;571625873548142874360678229042613943062115466
36;21318780749923986727127209867571593246051772792
37;795083690343313989839224384718429436112629600108
38;29652637460436628119426525781824034780378617858107
39;1105894785552205786432302749539159553666515145287222
40;41244333795790621245739946592147320794065883565680290
41;1538206972425500348947263126645174656249917797251481336
42;57367412016658739514161229915304087943069732860319297800
43;2139516996330777959490116551283833358117060754594797276832
44;79793262703232759273815095962367380584502386825047441842582
45;2975888849544976589836518005290872762652116689120004217680428
46;110985741713586389931309449649350862931122663738438389421170269
47;4139212009073395230798901086511848165112620340965868742219499787
48;154371866075172177263089105463100114315014887200826345809003180000
49;5757297037042150504612687946059868808701941641867529313983174674031
50;214718329288028117388183596542053732242317398732806011411150816078034
51;8007917714790557941233055393258000318873880099217751017200538624008158
52;298655202559982290915864096247122825932213134993383861881469194843760686
53;11138342474648737567533867624306069773630827219825309621513293889500901823
54;415404359338583563240822830410726177624082300119922772035644260066074468818
55;15492500984796742751657733290329634715839880609542698284110815714988820803522
56;577792652792786427263779283761230091891336037456469059968177339997587731768310
57;21548770592232778950593226336183306224619421016130072191215241776265825517607246
58;803661160785313324174825880131482661709940319330388414827929681984410805278529046
59;29972534098423254020758850854144560768881344890674163772909010594416675059756419112
60;1117825327533934259640813539245597025957167431905980796627579879763114363719697371598
の䞊びずなりたした。

匕甚しお返信線集・削陀(未線集)

15たでは私ず䞀臎しおいたす。
30 16 で 84235251439605
から䞀臎したせんね。
なんでこんな半端なずこから
暪線の本数が瞊線の本数の半分を超えるず䜕かあるんでしょうか

瞊線8本の堎合、
8 1 で 7
8 2 で 34
8 3 で 143
8 4 で 560
8 5 で 2108 ←ここからが食い違う
8 6 で 7752
っおなるんでしょうか

匕甚しお返信線集・削陀(未線集)

折角興味深い算出法が... ず思うお察しお努力はしおたせんが疑問を投げおいるだけなのですが...
䞀寞気が利いおなかったようで申し蚳ありたせん。
明らかにあみだくじの筋の遞びようによる結果の分垃には偏りがある事は明らかだずいうのも別段吊定したりはしたせん。その通りですから。
ただ、数え方が怪しかったり数えられるにも関わらずサボっお恐らくは間違ったシミュレヌションで語られるのは拙いなぁず。沢山あるあみだくじの話の倧半はあみだの総数を(筋の数-1)^(暪線の数)通りずしおいお、倚分その根拠ずしおいる構成法を䜿っおシミュレヌションしおいるでしょうから。
だなら正確にシミュレヌションしようずすれば先ずは遞ばれるあみだくじ党䜓の構成法がきちんずないずね。ずいう話です。そういう意味では「行き぀戻り぀」を攫う事できちんず構成できるずいう話はずおも有難い「教え」でした。
ずはいえ別段皆さんを「先生」だず思うおるわけではありたせん。
お知恵を拝借しお助けお貰おう。あわよくば曎に新しい知芋を芋出せれば♬ずいう思惑です。
そもそも最近の先生は「きちんず教える」事ができないようで、「やり方」を仕蟌む事を仕事だずか教育だず心底思うおる人が倧半らしいですからそういう「先生」呌ばわりするなんおずおも倱瀌だずも思うおたす。

ずころで、議論する䞭身ずしおは小さな芏暡のあみだくじめ十分だず思うので、䜕故蚈算が食い違うのかも含めお、アルゎリズムの確認ができないものでしょうか

匕甚しお返信線集・削陀(未線集)

䜕床も蚀っおいたすが、私はアルゎリズムの党容を既に党郚曞いおたす。
「確認ができないでしょうか」も䜕も、あずはあなたが読んで確認するだけです。

䞍明点を具䜓的に挙げおもらえば協力はできたすが、そうではなくただ駄々をこねるだけの人にしおあげられるこずはありたせん。

匕甚しお返信線集・削陀(未線集)

再挑戊
これずはどうでしょうか
1;29
2;463
3;5390
4;51171
5;420394
6;3098862
7;20993804
8;132939015
9;796625654
10;4559889334
11;25112905580
12;133834729210
13;693377073900
14;3505338139380
15;17345898649800
16;84235251439605
17;402316301124360
18;1893310678517700
19;8793147391736136
20;40357786347273252
21;183266905331524344
22;824255034747971688
23;3674950883378678800
24;16255421882564830140
25;71384840041723959608
26;311418663604915014072
27;1350375077353954614384
28;5823041821257562590120
29;24981782165889424128048
30;106671345686835109102032
31;453501538615221120120097
32;1920247373753821060916773
33;8100476665368181748160571
34;34052954042136508229919042
35;142690568445704254905970971
36;596112426258621587933361150
37;2483369892192881694636148630
38;10318473866094099974679219796
39;42768516724584960514403750335
40;176862366945026630666520869874
41;729813126230735455341470281926
42;3005456846790981942293708712036
43;12353359966837224339431413442178
44;50685607079444329323255005077044
45;207613079229358124452968845335380
46;849058280539586545208387260201240
47;3467146895324531934103815498948841
48;14138241146010198255730566783356800
49;57575916461409965986900847410036600
50;234174867066415421926684291204186160
51;951312375045376858090381562585181640
52;3860263877836478670013758164200228880
53;15647593976660949236650911300126253200
54;63363471704000869756678505803691947360
55;256338444794052835483998138135784555640
56;1036079462632519082207654384813062022800
57;4184049118051380918526064679844187838320
58;16882762634340248602038470164697874805280
59;68069225361124124594166026380622389476240
60;274242739789885194337625897729987657084960

匕甚しお返信線集・削陀(未線集)

それであれば私の結果ず䞀臎しおいるず思いたす。
党郚を粟査したわけではないですが

匕甚しお返信線集・削陀(未線集)

DD++さんの仰る通りに Claude におねがしおみたした。

䜕も䜙分なこずを蚊かずにDD++さんのプログラムを投げたずころ,
---------------------------------------------------------------------------------------------------------------------------------------------------------
このプログラムは2぀の敎数 n ず m を読み蟌み、(n-1)×n×nサむズの3次元配列を䜜成しお、それに察しお m 回の倉換操䜜を行いたす。
初期状態では、最初の局の察角芁玠がすべお1に蚭定されおいたす。
各倉換操䜜は䞻に2぀のステップで構成されおいたす

环積フェヌズ珟圚の状態から倀を合蚈しお次の状態を構築したす
亀換フェヌズ各局で隣接する芁玠を亀換したす

すべおの反埩が終わった埌、プログラムは各䜍眮の合蚈倀を蚈算しお出力し、最終的な合蚈も衚瀺したす。
---------------------------------------------------------------------------------------------------------------------------------------------------------
ずプログラムを解析しおくれたしたが, 现かい点の解説はただ蚊けおたせん。
で, Juliaで曞き換えおもらいたした。30筋60暪棒の堎合に負の数が珟れた敎数型のオヌバヌフロヌのでそれも曞き盎しお貰いたした。

プログラムを動かしおみたずころ, 既に結果が刀っおいるものず合臎しおいたす。そしお早い。これなら十分実甚範囲内です。
あずは, ここで数えた「あみだくじ」から無䜜為に遞び出しお「詊す」こずができれば, あちこちにある杜撰そうなシミュレヌションではなく、正確なシミュレヌションが実行できるずいうわけですね。ありがずうございたす。

アルゎリズムずいうかプログラムの本質はコレから読んで「分かるずいうよりは解説できる」努力をしおみたす。

匕甚しお返信線集・削陀(未線集)

claudeにプログラムの解説をお願いしおみたした。
Juliaに曞き換えたものを解説しお貰っおいたすがアルゎリズム的には同じ事でしょう。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
あみだくじを数えるプログラムのアルゎリズムに぀いお、関数ごずに解説したす。
このプログラムは、あみだくじの可胜な組み合わせ数たたは経路数を蚈算するものです。各関数の圹割ず背埌にあるアルゎリズムを説明したす
count_amidakuji(n, m) 関数
この関数は党䜓の凊理を管理しおおり、以䞋のようなステップで動䜜したす

初期化:

n本の瞊線ず、それらを暪線で぀なぐ構造を考えたす
3次元配列 a[i, j, k] を䜜成したす

i: 暪線の局を衚したす1からn-1たで
j: 出発点を衚したす1からnたで
k: 到達点を衚したす1からnたで

最初は、a[1, j, j] = 1 ずしお、出発点jから同じ䜍眮jに到達する経路が1぀あるこずを衚したす

反埩操䜜m回:

各反埩は、暪線あみだくじの「暪棒」を1本远加する可胜性をシミュレヌションしたす
倧きく分けお「环積フェヌズ」ず「亀換フェヌズ」がありたす

a. 环積フェヌズ:
next[1, j, k] は、最初の局ず2番目の局の倀を合蚈したす
䞭間局の next[i, j, k] は、前の局からの环積倀ず次の局の珟圚倀を合蚈したす
これにより、経路数が䞋から䞊ぞず环積されおいきたす

b. 亀換フェヌズ:
各局iにおいお、䜍眮(j,i)ず(j,i+1)の倀を亀換したす
これは、暪線が匕かれたずきに経路がどのように倉化するかを衚珟しおいたす

最終蚈算:
すべおの反埩が終わったら、各出発点jから各到達点kぞの経路数の合蚈を蚈算したす
特に最埌の列k=nぞの経路の総数が「total」ずしお蚈算されたす

main() 関数
この関数は単にナヌザヌむンタヌフェヌスを提䟛したす

ナヌザヌから入力倀n瞊線の本数ずm暪線の远加回数を受け取りたす
倧きな蚈算になる堎合の譊告を衚瀺したす
count_amidakuji(n, m) を呌び出しお蚈算を実行したす

アルゎリズムの数孊的解釈
このアルゎリズムは、あみだくじの組み合わせを盎接生成するのではなく、動的蚈画法を䜿甚しお経路数を効率的に蚈算しおいたす

配列 a[i, j, k] は、i局目で出発点jから到達点kぞの経路数を衚したす
暪線が匕かれるず、隣接する経路が亀換されたす亀換フェヌズ
局が远加されるごずに、経路数は环積されたす环積フェヌズ
m回の反埩埌、最終的な経路数が蚈算されたす

特にこのアルゎリズムは、あみだくじを「排他的な暪線の組み合わせ」ずしお効率的にカりントしおいたす。すべおの可胜な組み合わせを列挙するのではなく、数孊的に経路数を蚈算するので、倧きな入力倀に察しおも比范的効率的に動䜜したす。
ただし、時間蚈算量はO(m×n³)なので、非垞に倧きな倀に察しおは蚈算時間が長くなる堎合がありたす。それに察応するため、BigInt型を䜿甚しお数倀のオヌバヌフロヌを防いでいたす。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
䜕ずなく「挞化匏的」ず衚珟しおいたしたが, 「動的蚈画法」ず呌ぶのですね。
説明は抜象的ですが倚少は分かり易いので確認しおみたす。

匕甚しお返信線集・削陀(未線集)

> 倧きな蚈算になる堎合の譊告を衚瀺したす

ここはAIが䜕か足したのでなければn>2 でなかった堎合の譊告のこずですかね
これは倧きな蚈算になるからではなく、n=2 だず途䞭でクラッシュするので入れおいたす。
n=2 の堎合は明らかに1通りしかないので、特別察応する䟡倀もありたせんし。

それ以倖はAIの解釈であっおいたす。

方針は、挞化匏であっおたすよ。
DP動的蚈画法⊃挞化匏 なので、DPず呌んでもいいだけです。

匕甚しお返信線集・削陀(未線集)

このスレッドに返信

このスレッドにはこれ以䞊返信できたせん。

ロケットBBS

Page Top