1 名前:デフォルトの名無しさん mailto:sage [2016/12/01(木) 16:58:30.97 ID:gTkHDluD.net] プログラミングのお題スレです。 前スレ プログラミングのお題スレ Part8©2ch.net echo.2ch.net/test/read.cgi/tech/1444216746/ 【出題と回答例】 1 名前:デフォルトの名無しさん お題:お題本文 2 名前:デフォルトの名無しさん >>1 使用言語 回答本文 【ソースコードが長くなったら】 (オンラインでコードを実行できる) ideone.com/ codepad.org/ compileonline.com/ rextester.com/runcode runnable.com/ code.hackerearth.com/ melpon.org/wandbox https://paiza.io/ 宿題は宿題スレがあるのでそちらへ。
381 名前: ◆QZaw55cn4c mailto:sage [2017/07/14(金) 18:52:31.62 ID:TDGI45F0.net] >>370 個体発生は系統発生を繰り返す
382 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 12:42:06.98 ID:odVkuNfb.net] >>361 厳密解を出しているのなら、チャレンジ (わかって近似値解狙いなら気にしないで) "14432" と "887654329" 両方とも既出の"貪欲つぶし"(?)数列 "14432"は 20秒 (ゼロインデック順で02341) "887654329"は 80秒(同123456708)でいける。
383 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 14:59:21.20 ID:OEoVgGO0.net] >>373 ideone.com/cBzPSj C++。それ解くとほかの問題が解けなくなる。 厳密解のつもりだったが、ちょっと自分の領分超えてるなぁ。 うまくいかないものだ。 真実が奥の方にあると貪欲法は弱いな。Orz
384 名前:デフォルトの名無しさん [2017/07/16(日) 16:33:07.01 ID:8ZBD9z9c.net] お題: 自分用多倍長整数演算関数 …って思ったけど、処理系の標準ではないとか、仕事でGNU MP使っては駄目とかの 制約で、簡易的なもの(乗算くらいまでとか)を書いた事ある人は少なくないと見た。
385 名前:デフォルトの名無しさん mailto:sage [2017/07/16(日) 18:30:49.57 ID:8+Akms5T.net] 多倍長整数演算がサポートされている言語を使う 終わり
386 名前: ◆QZaw55cn4c mailto:sage [2017/07/16(日) 18:54:09.85 ID:eA1jggM5.net] >>375 C++98 codepad.org/hUObVCsR オートボクシング等はなく便利にはできていない.
387 名前:デフォルトの名無しさん [2017/07/16(日) 2
] [ここ壊れてます]
388 名前:0:34:05.63 ID:yctBkD01.net mailto: 掛け算の実装がキモだろう。 ここがボトルネックになるはず。 ここができると円周率とか、ルート計算も高速化できるはず。 [] [ここ壊れてます]
389 名前: ◆QZaw55cn4c mailto:sage [2017/07/16(日) 20:36:24.09 ID:eA1jggM5.net] >>378 うん,FFTを使うそうだが‥いまいちよくわからない
390 名前:375 mailto:sage [2017/07/16(日) 20:41:46.81 ID:8ZBD9z9c.net] >>376 仕事で言語を選べる立場になってみたいものだわ。 この言語でやってってののは多々あるけど…orz >>377 Karatsuba-Ofman法を目指してごーごー
391 名前:デフォルトの名無しさん mailto:sage [2017/07/17(月) 22:48:25.95 ID:5edeqhg+.net] >>296 手計算で計算出来るレベルにまで計算量を減らせた もちろん数学的な裏付け付きで ある条件を見たせば一瞬で求まる "123456789123456789" > 98秒 残念ながら、これだけはその条件を満たしてない
392 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 06:37:17.84 ID:nFCFlf58.net] >>381 22とか2323もその条件を満たしてない感じ?
393 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 07:37:05.09 ID:Ew0RSScO.net] 22 は微妙 2323 は大丈夫
394 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 07:41:44.22 ID:Ew0RSScO.net] まだコードになってないんで、 コードになったらアップします 寿司を食べる時間 < レーンの回転周期 という前提をつけちゃおうと思ったけど、 つけない方が良さそうですね 寿司を食べる時間がレーンの回転周期の整数倍の寿司は ちょっと特別な処理が必要
395 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 08:01:32.43 ID:Ew0RSScO.net] 整数倍の寿司が無いもので 条件に当てはまらない最小は 2222 かな
396 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 08:49:51.93 ID:YLlwVFMJ.net] >>334 SageMath ttps://sagecell.sagemath.org/?q=brdclf 普通に(?)多桁のisqrt()なので何の捻りも無し。
397 名前:386 mailto:sage [2017/07/18(火) 09:39:56.20 ID:YLlwVFMJ.net] >>339 つ mpz_sqrt()
398 名前:デフォルトの名無しさん mailto:sage [2017/07/19(水) 18:12:29.37 ID:Np9hKHT2.net] >>296 >>373 ideone.com/B9vl8l C++。結局、i7-6700のmem2G使って7分で解けた。 どうしようもない位遅いな。 でも一応題意には添えたと思う。 もう見たくない・・・。Orz 高速化するにはインラインアセンブリ使うか、スレッド分割できるようなアルゴリズムかんがえるか。 よくわからんけど、数学で頑張ってる人に期待だ。
399 名前:386 mailto:sage [2017/07/20(木) 01:57:16.81 ID:Q7XnESC/.net] 100のべき乗に変更 ttp://sagecell.sagemath.org/?q=mciykc
400 名前:デフォルトの名無しさん mailto:sage [2017/07/21(金) 15:21:18.13.net] >>296 ideone.com/mXPglY C++。試しに再起化してみたら処理速度倍になった。 自分の環境では3分ちょいで解ける。 相変わらずメモリ馬鹿食いするけど。 もう俺には無理。 俺の中では終了でーす。Orz
401 名前:デフォルトの名無しさん mailto:sage [2017/07/22(土) 08:54:36.28 ID:OQXA8cUK.net] >>388 数学で頑張ってる人だけど、 もうちょっとまって >>296 の問題だけなら簡単だけど、 まだ全体を解明できてない というか、忙しくて>>381 から進んでない
402 名前:デフォルトの名無しさん mailto:sage [2017/07/22(土) 08:55:28.19 ID:OQXA8cUK.net] このスレが無くならないうちに解明します
403 名前:デフォルトの名無しさん mailto:sage [2017/07/22(土) 10:43:30.03 ID:apsnR2Z0.net] >>391 wktkデス! コード見るのが好きなのでぜひ完走していただけたらと思います。
404 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 11:26:56.94 ID:ipiEUPYV.net] >>375 のほかの実装はでてこないねぇ‥
405 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 12:53:55.68 ID:7fREas1L.net] >>394 使えるコードにするためには、規模がでかくなりすぎるから
406 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 14:15:20.13 ID:ipiEUPYV.net] C/C++ で最長1000行ぐらいとみて、2日ぐらいあれば、とりあ
407 名前:ヲず動く 土日で仕上がってくるんじゃないかと期待してたんだが [] [ここ壊れてます]
408 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 14:18:11.58 ID:7fREas1L.net] 速度が考えられてないコードなんて実用にはならないよ
409 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 14:21:31.79 ID:7fREas1L.net] ていうか、 コードに対する条件とか サポートする機能とか 条件が無さすぎる
410 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 14:24:57.75 ID:ipiEUPYV.net] 速度‥か‥ どうしてもローテートとかキャリーフラグとかを使いたいから、これはアセンブラの領域になるね よくみかけるアセンブラ中毒者が今頃爪を研いでいるのだろうか?
411 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 14:25:42.29 ID:ipiEUPYV.net] >>398 そこは「自分用」だから自由に決めていいんでないかい?
412 名前:デフォルトの名無しさん [2017/07/23(日) 14:49:34.77 ID:TcY6qE9r.net] >>394 当日に >>305 で >>390 より10倍以上早いのがでているだろう。 しかも 計算量まで書いてある
413 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 14:53:19.94 ID:ipiEUPYV.net] >>401 お題が違うのでは?
414 名前:デフォルトの名無しさん [2017/07/23(日) 15:05:28.62 ID:TcY6qE9r.net] >>402 >>394 確かに違った、すいません。 c++多倍長なら、karatsubaにも対応して300行くらいの以下をパクって使うのも一案 sites.google.com/site/indy256/algo_cpp/bigint
415 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 15:09:21.91 ID:ipiEUPYV.net] >>403 base 10進ならば、表示(operator<<) が楽でいいね、なるほど、それは思いつかなかった
416 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 16:51:44.88 ID:7fREas1L.net] >>399 通常、 処理時間のほとんどが乗算 乗算のほとんどがFFT アセンブラの出番は当分先
417 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 16:52:43.21 ID:7fREas1L.net] FFTのライブラリをどこからか持ってくるのでもいいけど、 それなら素直に多倍長ライブラリを持ってくれば ってことになる
418 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 16:54:07.19 ID:7fREas1L.net] 今は浮動小数点演算が速いので、 カラツバの出番はあまりない
419 名前:デフォルトの名無しさん mailto:sage [2017/07/23(日) 18:50:17.74 ID:5CSy1R8t.net] 基数を10のべき乗にするとか(printf()的なものが簡単だから)、乗算はunsigned shortやintとの 乗算に限るとか、除算無しとかいうのは… プログラムの本体に組み込まれてしまって、再利用可能なライブラリの形で括りだされてる事の 方が少ないかw
420 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 00:48:44.80 ID:XgJeE+LA.net] >>6-285 SageMath ttp://sagecell.sagemath.org/?q=veftjc
421 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 18:24:00.06 ID:UuUAOyUA.net] >>408 裁定ラインとしては、乗算は Bigint×Bigint、および除算の実装ですかね、でも足し算の回数での乗算や引き算の回数での除算は嫌ですね
422 名前:デフォルトの名無しさん [2017/07/24(月) 18:58:12.05 ID:5ve8i6tz.net] お題:お題スレ3の>>170 をファレイ数列を使って解く。 peace.2ch.net/test/read.cgi/tech/1390525149/170
423 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 19:10:35.21 ID:nJVItCRy.net] >>411 Ruby def farey_sequence(n) (1..n-1).map{|i| 1r*i/n} end def ans_411(m) (2..m).map{|i| farey_sequence(i)}.flatten.uniq.sort end ans_411 3 #=> [(1/3), (1/2), (2/3)] ans_411 5 #=> [(1/5), (1/4), (1/3), (2/5), (1/2), (3/5), (2/3), (3/4), (4/5)]
424 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 19:11:05.16 ID:7nQ6Z7f9.net] >>296 超高速版が出来ました! ideone.com/FrRkof 一皿9秒が上限であれば、計算オーダーはn 関数自体は何秒でも大丈夫です コードだけじゃ意味がわからないでしょうけど、とりあえずコードだけ あまりテストしてないので、バグって
425 名前:スらごめんなさい [] [ここ壊れてます]
426 名前:デフォルトの名無しさん [2017/07/24(月) 23:00:47.69 ID:fjGi9Yh0.net] オーダーnは凄いな
427 名前:デフォルトの名無しさん mailto:sage [2017/07/25(火) 05:40:32.49 ID:ubbfnjuS.net] >>413 うーんわからん。 俺の思考とは別系統かな。 ホントに0秒で解けてるし、素晴らしい。 素直に賞賛。
428 名前:デフォルトの名無しさん mailto:sage [2017/07/25(火) 11:52:16.57 ID:bLUUDw7G.net] 回転寿しの問題は、部分的な最短経路が全体の最短経路にならないんだよな だが最短時間はレーン長の2倍程度の再帰回数で出る そのあと数十億回再帰して総当たりしてもそれより短くならない 最後の皿から逆方向に探索してもおそらく同じ状況
429 名前:デフォルトの名無しさん mailto:sage [2017/07/25(火) 11:56:47.84 ID:bLUUDw7G.net] 例えば、”122” は最短時間6だが、1周目で2番目の要素”2”をパスしないとそうならない
430 名前:411 mailto:sage [2017/07/26(水) 19:54:35.63 ID:6H34MdHA.net] >>412 ファレイ数列の中間数(mediant)を再帰的に生成すると、uniqもsortも要らないのだけど、 mが3や5だと大差無いかw
431 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 20:50:49.45 ID:s8dUUqTb.net] >>411 リンク先が見えません 問題文をもう一回書いてください
432 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 20:52:34.29 ID:s8dUUqTb.net] と思ったら見れました ファレイ数列を使って何かを解くわけじゃなくて、 ファレイ数列を求める問題?
433 名前:411 mailto:sage [2017/07/26(水) 23:20:07.89 ID:6H34MdHA.net] >>420 元の問題はそういうもの(=ファレイ数列の両端(0/1と1/1)無し版を求める問題)と 解釈してますです。
434 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 23:26:01.52 ID:lPM9zwS7.net] #include <list> #include <iostream> const int N_MAX = 10; struct RATIONAL { int num; int den; }; int main() { std::list < RATIONAL > farey; RATIONAL zero = {0, 1}; RATIONAL one = {1, 1}; farey.push_back(zero); farey.push_back(one); for (int n = 1; n <= N_MAX; n++){ for (std::list < RATIONAL > ::iterator i1 = farey.begin(), i0 = i1++; i1 != farey.end(); i0 = i1, i1++) { if (i0->den + i1->den <= n) { RATIONAL m = {i0->num + i1->num, i0->den + i1->den}; farey.insert(i1, m); } } std::cout << n << " : "; for (std::list < RATIONAL > ::iterator i = farey.begin(); i != farey.end(); i++) { std::cout << i->num << "/" << i->den << " "; } std::cout << "\n"; } return 0; }
435 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 23:29:22.49 ID:lPM9zwS7.net] これから0と1を除けば良いって問題であれば、 表示のループに以下を加えれば if (i->den != 1)
436 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 23:31:57.11 ID:lPM9zwS7.net] 問題の意味も意図も良くわからん 出題者が「そういうものと解釈しています」とか 出題者が >>418 みたいな回答をバカにする発言とか なんか非常に感じが悪い
437 名前:412 mailto:sage [2017/07/27(木) 00:12:38.86 ID:qteH6K3e.net] そもそも>>412 のfarey_sequenceは定義が間違ってたわ んでもって再帰にすると>>412 より遅くなるという Ruby class Farey def self.[](m) if m == 1 [0r, 1r] else succ(m - 1) end end def self.succ(m) self[m].each_cons(2).inject([0r]){|s, (a, b)| x = a.denominator + b.denominator s << 1r*(a.numerator + b.numerator)/x if x == m + 1 s << b } end end Farey[3] # => [(0/1), (1/3), (1/2), (2/3), (1/1)] Farey[5] # => [(0/1), (1/5), (1/4), (1/3), (2/5), (1/2), (3/5), (2/3), (3/4), (4/5), (1/1)]
438 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 01:59:46.61 ID:GuEy9AL1.net] >>411 Java https://ideone.com/w0q7cN
439 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 18:51:16.80 ID:XBSdfIgC.net] >>375 のほかの実装はでてこないねぇ‥
440 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 19:19:26.77 ID:mqZJq6H+.net] 昔brainf**kで実装したのあるけどちょっとなぁ
441 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 19:24:55.65 ID:WViVOgsq.net] また懐かしい言語を
442 名前:デフォルトの名無しさん mailto:sage [2017/07/28(金) 19:26:36.86 ID:WViVOgsq.net] どうせならチューリングマシンで作ってよ
443 名前:デフォルトの名無しさん [2017/07/30(日) 10:59:37.37 ID:A7gIx2b1.net] お題:MathematicaのFareySequence[n,k](引数2つ)に相当するものの実装 ttp://reference.wolfram.com/language/ref/FareySequence.html
444 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 11:53:03.31 ID:EQKnHSgY.net] >>431 ideone.com/m7BnJN C++。一瞬計算が合わなくてビビったけど、空目だった。 インデックス概念がベーシックなんだな。
445 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:00:36.94 ID:EQKnHSgY.net] っていうか、この関数インデックスに0与えたら何が出力されるんだろう・・・。 早速バグってる気がする。
446 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:15:40.85 ID:EQKnHSgY.net] >>432 バグってた。のでエディトしてFIXした。 所持する数の概念勘違いしてた。
447 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:25:59.30 ID:B3p9Yl5S.net] >>422 の微妙な変更でいいよね
448 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:26:41.34 ID:B3p9Yl5S.net] 1個だけ求めるなら、もっといい方法がある?
449 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:27:22.69 ID:B3p9Yl5S.net] ていうか、いい加減Fareyはもういいでしょ 他の課題の方が
450 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:30:15.15 ID:EQKnHSgY.net] フィボナッチって素数何だっけ?
451 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:44:33.08 ID:B3p9Yl5S.net] 1, 1, 2, 3, 5, 8, ... 違うよね
452 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:47:15.18 ID:EQKnHSgY.net] だよねー。>>422 ってフィボナッチ使ってない? あんまり深く考えてないだけど。Orz
453 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:47:30.85 ID:B3p9Yl5S.net] じゃあ、任意の二個の数からはじまるフィボナッチ数列で、はじめから連続する素数の数が多い物を探す って課題で
454 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:48:36.68 ID:B3p9Yl5S.net] >>440 フィボナッチではない wikipediaにのってるレベルの知識で作った
455 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:49:05.29 ID:EQKnHSgY.net] あれ?俺とんちんかんなこと言ってるか? >>422 が数列としてあってるのかよくわからない。Orz どう考えればいいんだろう。
456 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:53:04.00 ID:EQKnHSgY.net] まぁ、俺のもあってるかどうかはしらんけど。><;
457 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:56:43.60 ID:EQKnHSgY.net] 頭悪くてゴメン。爆発しそう。。。
458 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 13:01:05.96 ID:EQKnHSgY.net] 引っ込む。すまんかった。
459 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 14:17:22.65 ID:t+CfDp82.net] >>431 Java ideone.com/9AXdRV
460 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 19:16:10.29 ID:LizATlBz.net] >>431 Ruby def farey(n, k) return [0r, 1r][k] if n == 1 farey(n - 1, 0..-1).each_cons(2).inject([0r]){|s, (a, b)| x = a.denominator + b.denominator s << 1r*(a.numerator + b.numerator)/x if x == n s << b }[k] end
461 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 07:36:01.80 ID:cLWzUq7C.net] お題:ミンコフスキーの疑問符関数の実装 ttps://en.wikipedia.org/wiki/Minkowski%27s_question_mark_function ttp://reference.wolfram.com/language/ref/MinkowskiQuestionMark.html
462 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 10:39:36.15 ID:ONmyLPuf.net] WIKIぺにコード乗ってますが。
463 名前:デフォルトの名無しさん mailto:sage [2017/08/03(木) 10:48:34.50 ID:ONmyLPuf.net] >>449 のWIKIより。 /* Minkowski's question mark function */ double minkowski(double x) { long p=x; if ((double)p>x) --p; /* p=floor(x) */ long q=1, r=p+1, s=1, m, n; double d=1, y=p; if (x<(double)p||(p<0)^(r<=0)) return x; /* out of range ?(x) =~ x */ for (;;) /* invariants: q*r-p*s==1 && (double)p/q <= x && x < (double)r/s */ { d/=2; if (y+d==y) b
464 名前:reak; /* reached max possible precision */ m=p+r; if ((m<0)^(p<0)) break; /* sum overflowed */ n=q+s; if (n<0) break; /* sum overflowed */ if (x<(double)m/n) r=m, s=n; else y+=d, p=m, q=n; } return y+d; /* final round-off */ } [] [ここ壊れてます]
465 名前:デフォルトの名無しさん mailto:sage [2017/08/05(土) 17:44:11.83 ID:40G0sflG.net] >>375 のほかの実装はでてこないねぇ‥
466 名前:デフォルトの名無しさん [2017/08/12(土) 18:46:00.57 ID:953va2dM.net] 寿司のオーダーNのやつを理解しようとしたけどまだやってない。 その仕組みと、ほんとに正解してるのかとか。いたら誰が解説して。
467 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:04:22.18 ID:Bi4KH0eW.net] >>413 です もちろん合っているつもりのコードです 作者が言っても何の説得力もありませんが
468 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:07:04.34 ID:4r/z/Qd5.net] 会社に帰ってこない巡回セールスマンだよね 寿司の乗った皿がノード、計算量はO(n!)
469 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:10:18.10 ID:Bi4KH0eW.net] それぞれの寿司を食べている期間をレーン上の線分で表します この線の重なり具合をpileで表しました 効率良く食べられた場合はレーンがpile_max周するまでの間に食べきることが出来ます 170行目の判定がそれで、trueの場合は効率良く食べられない場合です
470 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:12:06.32 ID:4r/z/Qd5.net] >>456 もしそれで最適解が得られるなら巡回セールスマンも可能じゃないかな?
471 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:17:11.73 ID:6XNTCj+p.net] 巡回セールスマン問題とけたら色々応用範囲アルヨ。 マジでどっかに売り込んでもいいくらい。 天才か。
472 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:18:34.85 ID:6XNTCj+p.net] 社会的に言うと交通統制とかもそれじゃないかな? 信号の待ち時間問題。よくしらんけど。
473 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:19:17.76 ID:Bi4KH0eW.net] 効率良く食べられない方が簡単なのでその場合から お寿司を以下のグループに分けます ---- 各グループのお寿司は、レーンの特定の位置から食べ始めた場合、pile[グループ]周以内で食べ終わることが出来る このとき、pile_max = Σ pile[グループ] となる --- このようなグループの分け方の最小の物が存在します
474 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:22:56.16 ID:Bi4KH0eW.net] 同じグループのお寿司は連続して食べます 開始時と、各グループのお寿司を食べ終わった後、最初に来るお寿司から食べはじめ、pile[グループ]以内で食べられる食べ方でそのグループを食べ終える ということを繰り返せば最小の時間で食べ終えることが出来ます
475 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:26:29.79 ID:Bi4KH0eW.net] グループ分けした時に1個のグループになった場合は、 効率良く食べられることになります つまり、pile_max周以下で食べ終えることが出来ます この時は、コード上にあるダミーのお寿司を追加してから最小時間を求め、ダミーのお寿司を食べてる時間を引けば求められます
476 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:28:18.79 ID:4r/z/Qd5.net] うーん、よくわからん セールスマンの巡回先を一次元にマッピングできれば同じことできそうな 無理か
477 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:30:27.01 ID:Bi4KH0eW.net] グループの分け方は少し難しいです レーンの各整数位置に対して、 お寿司の線の両端にあたる点同士 線の重なりがpile_max未満である区間の点(両端を含む) を同じグループの点とし、 これらを続けることで最小のグループ分けが出来ます 線の両端の点のグループが、そのお寿司のグループになります
478 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:31:42.19 ID:Bi4KH0eW.net] それぞれ、証明は出来ているつもりです
479 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:32:49.51 ID:Bi4KH0eW.net] もちろん、一般の巡回問題はこの方法では無理です
480 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:37:29.23 ID:4r/z/Qd5.net] 全ノードを巡回する最短時間の問題だから、できそうな気がするけどね
481 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 19:39:44.61 ID:2Yw2XYfL.net] 372仕様書無しさん2017/08/11(金) 10:31:43.41 フリーランスで検索すると引っかかる零細ITがやっている