プログラミングのお題スレです。
【出題と回答例】
1 名前:デフォルトの名無しさん
お題:お題本文
2 名前:デフォルトの名無しさん
>>1 使用言語
回答本文
結果がある場合はそれも
【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/
宿題は宿題スレがあるのでそちらへ。
※前スレ
プログラミングのお題スレ Part15
http://mevius.5ch.net/test/read.cgi/tech/1564310397/
探検
プログラミングのお題スレ Part16
■ このスレッドは過去ログ倉庫に格納されています
2019/11/17(日) 09:00:22.10ID:xqEdXdr6
449デフォルトの名無しさん
2019/12/27(金) 22:14:31.51ID:novkoLBo >>426 類似問題
素数を20個使って、総合計で2020を作る。
(同じ素数を複数使ってよい)
何種類できるか(組合せで)。 -->?
(同じ数字は区別しない -> ソートして数列が異なるもので1種類)
ちなみに、辞書順最小が[ 2(* 18), 5, 1979] 、最大が[ 101(* 20)]になる。
※ 2020で20個なら、まだint64_tでおさまる
素数を20個使って、総合計で2020を作る。
(同じ素数を複数使ってよい)
何種類できるか(組合せで)。 -->?
(同じ数字は区別しない -> ソートして数列が異なるもので1種類)
ちなみに、辞書順最小が[ 2(* 18), 5, 1979] 、最大が[ 101(* 20)]になる。
※ 2020で20個なら、まだint64_tでおさまる
450デフォルトの名無しさん
2019/12/27(金) 22:54:15.08ID:IA42SgXa ↑
>>429の+1を消すだけ
>>429の+1を消すだけ
451デフォルトの名無しさん
2019/12/27(金) 22:58:27.12ID:Wx5tgQ31 お題: 「Happy New Year!!」と出力するプログラムを2020年元日に投稿せよ
452デフォルトの名無しさん
2019/12/27(金) 23:32:30.61ID:novkoLBo >>450
やっぱり(既にできていて)、その程度なのだろう。
自分の方も、ユニーク時は更新が伝播しないように
逆順で処理していたのを、伝播するよう正順に戻すだけ。
>>449
https://ideone.com/nQJWLb
やっぱり(既にできていて)、その程度なのだろう。
自分の方も、ユニーク時は更新が伝播しないように
逆順で処理していたのを、伝播するよう正順に戻すだけ。
>>449
https://ideone.com/nQJWLb
453デフォルトの名無しさん
2019/12/27(金) 23:43:22.25ID:IA42SgXa454デフォルトの名無しさん
2019/12/28(土) 01:41:03.72ID:HU/ZZyYG455デフォルトの名無しさん
2019/12/28(土) 03:25:23.74ID:HeaGj5a1 >>423
m≧n≧1 のとき
ピン2に大円盤が1枚以下のときは、ピン0⇔ピン1間、ピン1⇔ピン3間で
n枚組の円盤を移動できますね。 (3ピン手順)
A: 1,2,・・・・,x のx個組 ただし x=f(m-1,n)
B: x+1,...,x+n のn個組
C: x+n+1,・・・・,x+2n+1 のn個組
D: x+2n+1
とする。
m≧n≧1 のとき
ピン2に大円盤が1枚以下のときは、ピン0⇔ピン1間、ピン1⇔ピン3間で
n枚組の円盤を移動できますね。 (3ピン手順)
A: 1,2,・・・・,x のx個組 ただし x=f(m-1,n)
B: x+1,...,x+n のn個組
C: x+n+1,・・・・,x+2n+1 のn個組
D: x+2n+1
とする。
456デフォルトの名無しさん
2019/12/28(土) 03:28:09.64ID:HeaGj5a1 ABCD, -, -, -
BCD, -, -, A
手順2
BC(2..n)D, -, C(1), A
ABC(2..n)D, -, C(1), -
ABC(2..n)D, -, -, C(1)
BC(2..n)D, -, -, AC(1)
手順2
BC(3..n)D, -, C(2), AC(1)
ABC(3..n)D, -, C(2), C(1)
手順3
ABC(3..n)D, -, -, C(1..2)
・・・・
同様にしてC(k)とDを移動する。(k=1..n)
・・・・
ABD, -, -, C
BD, -, -, AC
手順2
B, -, D, AC
AB, -, D, C
手順3
AB, -, -, CD
B, -, -, ACD
B(2..n), -, B(1), ACD
AB(2..n), -, B(1), CD
AB(2..n), -, -, B(1)CD
B(2..n), -, -, AB(1)CD
B(3..n), -, B(2), AB(1)CD
AB(3..n), -, B(2), B(1)CD
手順3
AB(3..n), -, -, B(1..2)CD
BCD, -, -, A
手順2
BC(2..n)D, -, C(1), A
ABC(2..n)D, -, C(1), -
ABC(2..n)D, -, -, C(1)
BC(2..n)D, -, -, AC(1)
手順2
BC(3..n)D, -, C(2), AC(1)
ABC(3..n)D, -, C(2), C(1)
手順3
ABC(3..n)D, -, -, C(1..2)
・・・・
同様にしてC(k)とDを移動する。(k=1..n)
・・・・
ABD, -, -, C
BD, -, -, AC
手順2
B, -, D, AC
AB, -, D, C
手順3
AB, -, -, CD
B, -, -, ACD
B(2..n), -, B(1), ACD
AB(2..n), -, B(1), CD
AB(2..n), -, -, B(1)CD
B(2..n), -, -, AB(1)CD
B(3..n), -, B(2), AB(1)CD
AB(3..n), -, B(2), B(1)CD
手順3
AB(3..n), -, -, B(1..2)CD
457デフォルトの名無しさん
2019/12/28(土) 03:34:05.21ID:HeaGj5a1 B(3..n), -, -, AB(1..2)CD
・・・・・
同様にしてB(k) を移動する。(k=1..n)
・・・・・・
B(n), -, -, AB(1..n-1)CD
-, -, B(n), AB(1..n-1)CD
A, -, B(n), B(1..n-1)CD
手順3’
A, -, -, BCD
-, -, -, ABCD
∴ f(m,n) ≧ f(m-1,n) + 2n + 1,
・手順2
BC(k..n)D, -, -, *
C(k..n)D, B, -, *
C(k+1..n)D, B, C(k), *
BC(k+1..n)D, -, C(k), *
・手順3
*, -, C(k), C(1..k-1)
*, C(1..k-1), C(k), -
*, C(1..k-1), -, C(k)
*, -, -, C(1..k)
・手順3’
*, -, B(k), B(1..k-1)CD
*, B(1..k-1), B(k), CD
*, B(1..k-1), -, B(k)CD
*, -, -, B(1..k)CD
・・・・・
同様にしてB(k) を移動する。(k=1..n)
・・・・・・
B(n), -, -, AB(1..n-1)CD
-, -, B(n), AB(1..n-1)CD
A, -, B(n), B(1..n-1)CD
手順3’
A, -, -, BCD
-, -, -, ABCD
∴ f(m,n) ≧ f(m-1,n) + 2n + 1,
・手順2
BC(k..n)D, -, -, *
C(k..n)D, B, -, *
C(k+1..n)D, B, C(k), *
BC(k+1..n)D, -, C(k), *
・手順3
*, -, C(k), C(1..k-1)
*, C(1..k-1), C(k), -
*, C(1..k-1), -, C(k)
*, -, -, C(1..k)
・手順3’
*, -, B(k), B(1..k-1)CD
*, B(1..k-1), B(k), CD
*, B(1..k-1), -, B(k)CD
*, -, -, B(1..k)CD
458デフォルトの名無しさん
2019/12/28(土) 12:49:55.64ID:eBmyBfXD いつまでハノイのメモ帳続けるんだよw
459デフォルトの名無しさん
2019/12/28(土) 16:57:29.50ID:hZH7LPev >>453
本気でやるには、"もらう"へ作り変える必要もあり、辛い
4つ程度なら、4倍回して出しちゃうだろう。
(四重ループで汚すぎるのでソースは非公開)
4と6の結果のみ載せておこう、あっているかも微妙。
合計: 2020 使用個数: 20 複数制限: 4-->
15100329420197868
[2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 11, 11, 17, 1913]
[89, 89, 89, 97, 97, 97, 101, 101, 101, 101, 103, 103, 103, 103, 107, 107, 107, 107, 109, 109]
********************************************* 0.43922sec ********************
合計: 2020 使用個数: 20 複数制限: 6-->
16509239212753751
[2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 7, 7, 1951]
[97, 97, 97, 97, 97, 97, 101, 101, 101, 101, 101, 101, 103, 103, 103, 103, 103, 103, 107, 107]
********************************************* 0.30568sec ********************
本気でやるには、"もらう"へ作り変える必要もあり、辛い
4つ程度なら、4倍回して出しちゃうだろう。
(四重ループで汚すぎるのでソースは非公開)
4と6の結果のみ載せておこう、あっているかも微妙。
合計: 2020 使用個数: 20 複数制限: 4-->
15100329420197868
[2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 11, 11, 17, 1913]
[89, 89, 89, 97, 97, 97, 101, 101, 101, 101, 103, 103, 103, 103, 107, 107, 107, 107, 109, 109]
********************************************* 0.43922sec ********************
合計: 2020 使用個数: 20 複数制限: 6-->
16509239212753751
[2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 7, 7, 1951]
[97, 97, 97, 97, 97, 97, 101, 101, 101, 101, 101, 101, 103, 103, 103, 103, 103, 103, 107, 107]
********************************************* 0.30568sec ********************
460デフォルトの名無しさん
2019/12/28(土) 19:46:33.82ID:mH66EenF >>426の1)はRで短く書ける(先頭・末尾行は正味の実行時間計測用)。
https://ideone.com/7eV3Kh
Rでは整数は32ビットまでなので、浮動小数点型(double型)で計算しているが、
double型の有効桁数は15桁なので、小数部を非表示にすれば、答である13桁の
整数は正しく表示される。
64ビット整数を扱うbit64というパッケージも一応あるが、それを使うと
正味の実行時間が4.3倍もかかってしまう。
https://ideone.com/hzr0rq
https://ideone.com/7eV3Kh
Rでは整数は32ビットまでなので、浮動小数点型(double型)で計算しているが、
double型の有効桁数は15桁なので、小数部を非表示にすれば、答である13桁の
整数は正しく表示される。
64ビット整数を扱うbit64というパッケージも一応あるが、それを使うと
正味の実行時間が4.3倍もかかってしまう。
https://ideone.com/hzr0rq
461デフォルトの名無しさん
2019/12/28(土) 21:25:10.79ID:4BOt7DVD462デフォルトの名無しさん
2019/12/28(土) 22:48:40.84ID:AtehPr/g お題
最小値のあるインデックスから離れるほど数字が大きくなる数列があります
増加量はランダムです
その数列の中から効率よく最小値を探してください
入力: 115, 109, 107, 101, 92, 85, 76, 66, 65, 62, 53, 49, 40, 38, 35, 25, 23, 17, 9, 2, 0, 5, 8, 10, 11, 20, 30, 37, 42, 47
出力: 0
入力: 110, 104, 96, 93, 84, 83, 87, 93, 98, 103, 113, 120, 121, 128, 133, 134, 142, 152, 159, 169, 171, 174, 183, 186, 196, 203, 210, 212, 221, 224
出力: 83
入力: 138, 135, 127, 124, 122, 112, 103, 98, 92, 87, 77, 73, 71, 63, 59, 51, 41, 36, 45, 54, 63, 71, 81, 88, 90, 98, 105, 112, 114, 119
出力: 36
最小値のあるインデックスから離れるほど数字が大きくなる数列があります
増加量はランダムです
その数列の中から効率よく最小値を探してください
入力: 115, 109, 107, 101, 92, 85, 76, 66, 65, 62, 53, 49, 40, 38, 35, 25, 23, 17, 9, 2, 0, 5, 8, 10, 11, 20, 30, 37, 42, 47
出力: 0
入力: 110, 104, 96, 93, 84, 83, 87, 93, 98, 103, 113, 120, 121, 128, 133, 134, 142, 152, 159, 169, 171, 174, 183, 186, 196, 203, 210, 212, 221, 224
出力: 83
入力: 138, 135, 127, 124, 122, 112, 103, 98, 92, 87, 77, 73, 71, 63, 59, 51, 41, 36, 45, 54, 63, 71, 81, 88, 90, 98, 105, 112, 114, 119
出力: 36
463デフォルトの名無しさん
2019/12/28(土) 23:28:52.09ID:mH66EenF464デフォルトの名無しさん
2019/12/28(土) 23:34:06.76ID:AtehPr/g >>463
私が用意してた答えは二分探索ではありませんでしたが二分探索でできるんですねすごいです
私が用意してた答えは二分探索ではありませんでしたが二分探索でできるんですねすごいです
465デフォルトの名無しさん
2019/12/28(土) 23:38:08.54ID:mH66EenF466デフォルトの名無しさん
2019/12/28(土) 23:42:14.62ID:mH66EenF 再度訂正。1行目が消えていた。
https://ideone.com/mgNo9a
https://ideone.com/mgNo9a
467デフォルトの名無しさん
2019/12/28(土) 23:45:03.69ID:4BOt7DVD 最初に思いつくのが二分探索だからそれより速い方法があるんだろうなと思った
468デフォルトの名無しさん
2019/12/29(日) 00:04:58.67ID:Jtzyjysr469デフォルトの名無しさん
2019/12/29(日) 00:15:11.87ID:Jtzyjysr470デフォルトの名無しさん
2019/12/29(日) 00:41:31.56ID:wJ/DeyFk471デフォルトの名無しさん
2019/12/29(日) 02:13:42.53ID:2ZGuf6bc >>462
Java 三分探索で2/3に範囲を狭めてく
https://paiza.io/projects/NjNBWH-afFYHO5H9w8EJeQ
1/2に減らせる二分探索には敵わない
傾きを二分探索するって発想はなかったわー
Java 三分探索で2/3に範囲を狭めてく
https://paiza.io/projects/NjNBWH-afFYHO5H9w8EJeQ
1/2に減らせる二分探索には敵わない
傾きを二分探索するって発想はなかったわー
472デフォルトの名無しさん
2019/12/29(日) 02:17:13.97ID:2ZGuf6bc >>468
実装の効率はパないすね、効率はそういう意味でもありましたホントです
実装の効率はパないすね、効率はそういう意味でもありましたホントです
473デフォルトの名無しさん
2019/12/29(日) 09:24:17.66ID:Y3W4ZjXN いやいや
ただのリニア検索より遅いのはあり得ん
ただのリニア検索より遅いのはあり得ん
474デフォルトの名無しさん
2019/12/29(日) 19:39:43.67ID:Jtzyjysr でも出てる中で一番速いけど。
475デフォルトの名無しさん
2019/12/29(日) 21:33:41.90ID:wJ/DeyFk >>474
そりゃ、例の数列では要素数が少なくてアルゴリズムの差が出にくいからだろ。
「効率よく」とわざわざ書いてある問題なんだから、もっと大きなデータを与えた
場合も想定して答えるのが普通。
例えば、100万から1までの連番の後に2から50万までの連番が続く数列を与えれば
アルゴリズム間の違いは歴然。
Rで二分探索、min関数、sort関数で求めたときの1回あたり平均実行時間を計測すると、
0.132, 2.08, 55.2ミリ秒で桁が違う (PCでは二分探索はもう少し速かった)。
計算量オーダーがO(log n), O(n), O(n log n)だから当たり前だが。
https://ideone.com/kuqONz
C++の>>468に同じデータを与えると108ミリ秒かかり、何とRのsort関数より遅い。
Rの関数はCで書かれているものが多いから、この差はつまりはCとC++のSTLの
性能差によるものだろう。
https://ideone.com/jMCCfP
そりゃ、例の数列では要素数が少なくてアルゴリズムの差が出にくいからだろ。
「効率よく」とわざわざ書いてある問題なんだから、もっと大きなデータを与えた
場合も想定して答えるのが普通。
例えば、100万から1までの連番の後に2から50万までの連番が続く数列を与えれば
アルゴリズム間の違いは歴然。
Rで二分探索、min関数、sort関数で求めたときの1回あたり平均実行時間を計測すると、
0.132, 2.08, 55.2ミリ秒で桁が違う (PCでは二分探索はもう少し速かった)。
計算量オーダーがO(log n), O(n), O(n log n)だから当たり前だが。
https://ideone.com/kuqONz
C++の>>468に同じデータを与えると108ミリ秒かかり、何とRのsort関数より遅い。
Rの関数はCで書かれているものが多いから、この差はつまりはCとC++のSTLの
性能差によるものだろう。
https://ideone.com/jMCCfP
477デフォルトの名無しさん
2019/12/29(日) 21:41:48.80ID:2ZGuf6bc なんかすまんなみんな、ワイのせいで・・・ワイのせいで・・・ワイは悪くない
478デフォルトの名無しさん
2019/12/29(日) 22:06:29.15ID:Y3W4ZjXN >>462くらい乱数に法則があれば2分検索より速いアルゴリズムを作れる
例としてはイマイチ
例としてはイマイチ
479デフォルトの名無しさん
2019/12/29(日) 22:38:51.59ID:Byl7yBSZ このスレだけマジで何言ってんのか理解できない
やっぱまずいよなあ、数学勉強し直さなきゃなあ
やっぱまずいよなあ、数学勉強し直さなきゃなあ
480デフォルトの名無しさん
2019/12/29(日) 22:43:46.32ID:KptD7+e9 >>426
1)数百万規模でありそう。
1)数百万規模でありそう。
481デフォルトの名無しさん
2019/12/30(月) 08:49:27.55ID:1DW7Hzfm >>475
最適化されたCとC++のSTLならCのほうが分があるということ?
最適化されたCとC++のSTLならCのほうが分があるということ?
482デフォルトの名無しさん
2019/12/30(月) 09:13:40.00ID:W9rqQHA3 突き詰めた機械語にコンバートされるCと
汎用性のSTL
どちらに分があるのか
汎用性のSTL
どちらに分があるのか
483デフォルトの名無しさん
2019/12/30(月) 11:48:55.51ID:1DW7Hzfm 戦争になりそうだが、俺は膝にassertを受けちまってな
皆の力にはなれない、すまない
皆の力にはなれない、すまない
484デフォルトの名無しさん
2019/12/30(月) 13:23:07.59ID:I3iMR+1Y Rのsortは基数ソート使ってるらしいからその差かもしれない
c++のもこのデータの場合stable_sortに変えると3倍くらい速くなった
c++のもこのデータの場合stable_sortに変えると3倍くらい速くなった
485デフォルトの名無しさん
2019/12/30(月) 15:32:52.11ID:fFRqMrLq いいっすねー、新しいお題用意してるからちょっとまってて
486デフォルトの名無しさん
2019/12/30(月) 15:44:13.04ID:fFRqMrLq お題
四角形の縦の長さの数列と
四角形の横の長さの数列と
四角形の面積が与えられます
縦の長さと横の長さを組み合わせて
与えられた面積と一致する四角形をいくつ
作ることができるか求めてください
入力: 41, 9, 25, 92, 48, 15, 69, 61, 85, 22, 82, 79, 7, 34, 86, 29, 36, 77, 16, 79, 57, 8, 9, 58, 86, 0, 24, 83, 63, 46
入力: 12, 79, 11, 65, 9, 33, 44, 54, 30, 43, 76, 23, 24, 86, 15, 35, 21, 97, 57, 96, 6, 3, 59, 51, 29, 58, 93, 94, 49, 8
入力: 195?
四角形の縦の長さの数列と
四角形の横の長さの数列と
四角形の面積が与えられます
縦の長さと横の長さを組み合わせて
与えられた面積と一致する四角形をいくつ
作ることができるか求めてください
入力: 41, 9, 25, 92, 48, 15, 69, 61, 85, 22, 82, 79, 7, 34, 86, 29, 36, 77, 16, 79, 57, 8, 9, 58, 86, 0, 24, 83, 63, 46
入力: 12, 79, 11, 65, 9, 33, 44, 54, 30, 43, 76, 23, 24, 86, 15, 35, 21, 97, 57, 96, 6, 3, 59, 51, 29, 58, 93, 94, 49, 8
入力: 195?
487デフォルトの名無しさん
2019/12/30(月) 15:45:24.75ID:fFRqMrLq 195の後ろの文字化けは無視してください
195と書きたかったのです
195と書きたかったのです
488デフォルトの名無しさん
2019/12/30(月) 15:47:28.48ID:fFRqMrLq 入力の数列の長さが数万になってもちょっぱやで計算できるとなお良いです
489デフォルトの名無しさん
2019/12/30(月) 16:18:52.49ID:pgNmBWor 四角形の縦の長さの定義は?
まさか四角形=長方形じゃないでしょ
まさか四角形=長方形じゃないでしょ
490デフォルトの名無しさん
2019/12/30(月) 16:21:26.52ID:fFRqMrLq491デフォルトの名無しさん
2019/12/30(月) 16:26:20.78ID:fFRqMrLq 問題を書いたときは長方形以外の四角形がこの世に存在するとは思いもよらなかったので四角形と書いたのです
492デフォルトの名無しさん
2019/12/30(月) 18:39:14.57ID:JZjS6BbQ オーダーは n log n
問題には
数列に同じ値が複数あった場合に1個とするのか別カウントするのかという曖昧性がある
問題には
数列に同じ値が複数あった場合に1個とするのか別カウントするのかという曖昧性がある
493デフォルトの名無しさん
2019/12/30(月) 18:41:24.69ID:fFRqMrLq >>492
同じ値は別カウントで良いです
同じ値は別カウントで良いです
494デフォルトの名無しさん
2019/12/30(月) 18:54:14.71ID:JZjS6BbQ 数列が整数限定
数列の数が大きい
面積が小さい
なら
素因数分解っていうアプローチもあるのかな?
数列の数が大きい
面積が小さい
なら
素因数分解っていうアプローチもあるのかな?
495デフォルトの名無しさん
2019/12/30(月) 19:25:46.59ID:fFRqMrLq496デフォルトの名無しさん
2019/12/30(月) 19:25:50.71ID:2F+fuXCx497デフォルトの名無しさん
2019/12/30(月) 19:28:13.92ID:fFRqMrLq >>496
マジですか・・・すごいです
マジですか・・・すごいです
498デフォルトの名無しさん
2019/12/30(月) 19:31:03.47ID:fFRqMrLq >>462
そういえばこの問題って.NETのLINQとかJavaのStreamとか
使ってソートすればたぶんヒープが使われて逐次処理が行われるんで
全部の値をソートせずに答えが求められるんじゃないかと思った
ほぼ線形探索
そういえばこの問題って.NETのLINQとかJavaのStreamとか
使ってソートすればたぶんヒープが使われて逐次処理が行われるんで
全部の値をソートせずに答えが求められるんじゃないかと思った
ほぼ線形探索
499デフォルトの名無しさん
2019/12/30(月) 19:34:34.59ID:2F+fuXCx500デフォルトの名無しさん
2019/12/30(月) 19:38:11.16ID:JZjS6BbQ501デフォルトの名無しさん
2019/12/30(月) 19:39:21.71ID:fFRqMrLq >>500
マジですか・・・
マジですか・・・
502デフォルトの名無しさん
2019/12/30(月) 20:14:35.59ID:2F+fuXCx >>484
Rのマニュアルを調べたら確かにそういう仕様だね。sort関数のmethod引数で
ソート方式を指定できるが、省略時は2^31要素未満の数値ベクトルに対しては
基数ソート、それ以外に対してはシェルソートが選択されると書かれている。
ということで、method引数を明示的に指定して実行時間を比較してみると、
基数、クイック、シェルソートがそれぞれ50.8, 45.2, 38.2ミリ秒で、基数ソートが
何故か一番遅いな。PCで実行したら基数<クイック<シェルの順だったのに。
RのクイックソートでもC++ STLのsortよりはまだ速い。https://ideone.com/g2JEPF
二分探索をCで書けば爆速で、実行時間は0.042マイクロ秒。Rの二分探索と3桁違う。
(キャッシュの影響があるのかも知れないが)。https://ideone.com/Dm65Sp
Rの関数はCかFortranで書かれているものが多いが、binsearch関数はRで書かれているし、
戻り値のフラグ判定が文字列照合という非効率な処理だから、二分探索としては
あまり速くない。
Rのマニュアルを調べたら確かにそういう仕様だね。sort関数のmethod引数で
ソート方式を指定できるが、省略時は2^31要素未満の数値ベクトルに対しては
基数ソート、それ以外に対してはシェルソートが選択されると書かれている。
ということで、method引数を明示的に指定して実行時間を比較してみると、
基数、クイック、シェルソートがそれぞれ50.8, 45.2, 38.2ミリ秒で、基数ソートが
何故か一番遅いな。PCで実行したら基数<クイック<シェルの順だったのに。
RのクイックソートでもC++ STLのsortよりはまだ速い。https://ideone.com/g2JEPF
二分探索をCで書けば爆速で、実行時間は0.042マイクロ秒。Rの二分探索と3桁違う。
(キャッシュの影響があるのかも知れないが)。https://ideone.com/Dm65Sp
Rの関数はCかFortranで書かれているものが多いが、binsearch関数はRで書かれているし、
戻り値のフラグ判定が文字列照合という非効率な処理だから、二分探索としては
あまり速くない。
503デフォルトの名無しさん
2019/12/30(月) 20:30:55.63ID:0ybHI6rZ504デフォルトの名無しさん
2019/12/30(月) 20:46:19.63ID:JZjS6BbQ ハッシュテーブルの検索はオーダー1じゃないと思うんだ
505デフォルトの名無しさん
2019/12/30(月) 21:43:46.47ID:0ybHI6rZ >>504
実装とかによるけど大抵の実装だとほぼO(1)だよ
実装とかによるけど大抵の実装だとほぼO(1)だよ
506デフォルトの名無しさん
2019/12/30(月) 22:39:47.32ID:JZjS6BbQ ほぼ1ってなんだよwww
オーダー1の実装だと
値の範囲という別のオーダーが生まれる
オーダー1の実装だと
値の範囲という別のオーダーが生まれる
507デフォルトの名無しさん
2019/12/30(月) 22:44:20.79ID:fFRqMrLq >>506
平均のことかと
平均のことかと
508デフォルトの名無しさん
2019/12/30(月) 22:53:03.82ID:JZjS6BbQ ああ平均か
最悪値は非常に悪いよね
最悪値は非常に悪いよね
509デフォルトの名無しさん
2019/12/30(月) 22:55:25.07ID:JZjS6BbQ てっきり超巨大ハッシュテーブルを作るのかと思った
510デフォルトの名無しさん
2019/12/30(月) 22:58:46.54ID:fFRqMrLq たしかにハッシュテーブルの最悪の計算量はO(n)だけれども
そうなることってマレだよ
むかしVBで使われてたScripting.Dictionaryはテーブルサイズが1万固定のようで
それ以上になると計算コストがバク上がりしてた
最近のライブラリだとテーブルサイズが可変になってるので問題ない
あとはWebサービスに対する攻撃としてキーが衝突するデータを大量に送りつけるってのが
数年前に話題になったかな
ハッシュ関数を予測してデータを作為的に作らない限り最悪の計算コストになることはないかと
ハッシュテーブル使うときはO(1)で考えて良いと思う
そうなることってマレだよ
むかしVBで使われてたScripting.Dictionaryはテーブルサイズが1万固定のようで
それ以上になると計算コストがバク上がりしてた
最近のライブラリだとテーブルサイズが可変になってるので問題ない
あとはWebサービスに対する攻撃としてキーが衝突するデータを大量に送りつけるってのが
数年前に話題になったかな
ハッシュ関数を予測してデータを作為的に作らない限り最悪の計算コストになることはないかと
ハッシュテーブル使うときはO(1)で考えて良いと思う
511デフォルトの名無しさん
2019/12/30(月) 23:12:19.04ID:p3QJuMJ/ Ruby のハッシュでは、データ数と共に、バケット数を増やしていく。
バケット数は、2 の累乗の次に現れる素数。
2^n + a, 2 <= n <= 30
8 + 3 = 11
16 + 3 = 19
32 + 5 = 37
64 + 3 = 67
128 + 3 = 131
256 + 27 = 283
512 + 9 = 521
データ数が、バケット数の5倍を超えると、ハッシュが再構成される。
再構成時には、極端に遅くなる
11 * 5 = 55 だから、データ数が56 個になると、バケット数が19 になる。
19 * 5 = 95 だから、データ数が96 個になると、バケット数が37 になる
バケット数は、2 の累乗の次に現れる素数。
2^n + a, 2 <= n <= 30
8 + 3 = 11
16 + 3 = 19
32 + 5 = 37
64 + 3 = 67
128 + 3 = 131
256 + 27 = 283
512 + 9 = 521
データ数が、バケット数の5倍を超えると、ハッシュが再構成される。
再構成時には、極端に遅くなる
11 * 5 = 55 だから、データ数が56 個になると、バケット数が19 になる。
19 * 5 = 95 だから、データ数が96 個になると、バケット数が37 になる
512デフォルトの名無しさん
2019/12/30(月) 23:30:39.44ID:JZjS6BbQ 最近は結構インテリジェントに作られてるんだね
unordered_set/map もたまには使ってみようかな
unordered_set/map もたまには使ってみようかな
513デフォルトの名無しさん
2019/12/31(火) 07:26:10.17ID:kRQlhKMg 制約論理型言語だと変数の上限下限を自動的に切ってくれる。
514デフォルトの名無しさん
2019/12/31(火) 09:03:13.10ID:hkax3Wzu お題
フィボナッチ数列のn番目をF(n)とした時
F(F(80))の下位8桁を求めよ
フィボナッチ数列は以下で定義される数列である
F(1)=1
F(2)=1
F(n)=F(n-2)+F(n-1)
フィボナッチ数列のn番目をF(n)とした時
F(F(80))の下位8桁を求めよ
フィボナッチ数列は以下で定義される数列である
F(1)=1
F(2)=1
F(n)=F(n-2)+F(n-1)
515デフォルトの名無しさん
2019/12/31(火) 10:24:38.95ID:NKLtpqnc516デフォルトの名無しさん
2019/12/31(火) 12:24:58.82ID:5aZymNkm >>515
Rは整数が32ビットまでで桁あふれするから、Juliaで書く。
F = Int64[1 1; 1 0]
n = (F ^ 80)[1, 2]
P = Int64[1 0; 0 1]
R = F
while n > 0
global r = n % 2
global n = div(n, 2)
if r > 0
global P = P * R .% 100000000
end
global R = R * R .% 100000000
end
println(P[1, 2])
-- 実行結果 --
21055810
Rは整数が32ビットまでで桁あふれするから、Juliaで書く。
F = Int64[1 1; 1 0]
n = (F ^ 80)[1, 2]
P = Int64[1 0; 0 1]
R = F
while n > 0
global r = n % 2
global n = div(n, 2)
if r > 0
global P = P * R .% 100000000
end
global R = R * R .% 100000000
end
println(P[1, 2])
-- 実行結果 --
21055810
518デフォルトの名無しさん
2019/12/31(火) 13:18:28.06ID:5aZymNkm519デフォルトの名無しさん
2019/12/31(火) 17:23:41.22ID:NKLtpqnc520513
2019/12/31(火) 18:46:25.67ID:H+c+1UtF521デフォルトの名無しさん
2019/12/31(火) 18:47:43.73ID:H+c+1UtF >>514でした
すみません
すみません
522デフォルトの名無しさん
2019/12/31(火) 19:45:18.11ID:5fWgt8Ro523デフォルトの名無しさん
2019/12/31(火) 20:25:50.73ID:W8YPZd1D >>522
100億人に2020になる素数をプレゼント出来そうだ。
100億人に2020になる素数をプレゼント出来そうだ。
524デフォルトの名無しさん
2019/12/31(火) 20:58:55.61ID:5fWgt8Ro525デフォルトの名無しさん
2020/01/01(水) 07:48:09.89ID:W9Zu1XGU >>523
素数2個の2020は41人しかあげられない。
素数2個の2020は41人しかあげられない。
527デフォルトの名無しさん
2020/01/01(水) 12:56:41.11ID:WIYGoppO お題
a^n + b^n + c^n = 2020
の整数解のうちnが最大の物を求めよ
a^n + b^n + c^n = 2020
の整数解のうちnが最大の物を求めよ
529デフォルトの名無しさん
2020/01/01(水) 15:29:53.46ID:qVK/11PV A HAPPY NEW YEAR !!!
というコード。
というコード。
530デフォルトの名無しさん
2020/01/02(木) 04:45:53.28ID:cCzcmPOa531デフォルトの名無しさん
2020/01/02(木) 14:00:53.09ID:2eGsq/cP (´;ω;`)
532デフォルトの名無しさん
2020/01/03(金) 03:43:04.42ID:ct9N0pK8 お題
a^3 + b^3 + c^3 = 2020 * 2
の整数解を求めよ。
a^3 + b^3 + c^3 = 2020 * 2
の整数解を求めよ。
533デフォルトの名無しさん
2020/01/03(金) 03:49:51.76ID:ct9N0pK8 追加
a^3 + b^3 + c^3 = 2020 / 2・2
の整数解を求めよ。
a^3 + b^3 + c^3 = 2020 / 2・2
の整数解を求めよ。
534デフォルトの名無しさん
2020/01/03(金) 03:54:35.20ID:pVliia9g >>486
Kotlin
https://paiza.io/projects/5OHDudzLFUjSV6DAdxFcfw
こんなので良いの?単に掛け算して一致するか比較しているだけなんだけど。
オマケとして重複しないようにはしているが。
Kotlin
https://paiza.io/projects/5OHDudzLFUjSV6DAdxFcfw
こんなので良いの?単に掛け算して一致するか比較しているだけなんだけど。
オマケとして重複しないようにはしているが。
535デフォルトの名無しさん
2020/01/03(金) 04:17:21.42ID:pVliia9g536デフォルトの名無しさん
2020/01/03(金) 04:18:44.02ID:pVliia9g >>533
最後の 2・2 の部分って何? 2.2? こっちで文字化けしてちゃんと表示されてないだけ?
最後の 2・2 の部分って何? 2.2? こっちで文字化けしてちゃんと表示されてないだけ?
537デフォルトの名無しさん
2020/01/03(金) 09:45:42.54ID:+RiBlMC+ >>536
2020 / 2・2 = 2020 / 2 * 2 = 2020
2020 / 2・2 = 2020 / 2 * 2 = 2020
538デフォルトの名無しさん
2020/01/03(金) 12:48:37.25ID:3k7MKqlh539デフォルトの名無しさん
2020/01/03(金) 12:51:02.88ID:3k7MKqlh >>527
n乗して64bitの範囲だとn=2しか発見出来なかった
n乗して64bitの範囲だとn=2しか発見出来なかった
540デフォルトの名無しさん
2020/01/03(金) 20:05:33.33ID:3k7MKqlh >>532
C
https://ideone.com/ctjDC0
38個見つけるのに1時間くらいかかりました
38個目 (1661082, 440694, -1671358)
こういうのはC/C++が得意でしょう
他の言語で出来ます? (挑戦)
C
https://ideone.com/ctjDC0
38個見つけるのに1時間くらいかかりました
38個目 (1661082, 440694, -1671358)
こういうのはC/C++が得意でしょう
他の言語で出来ます? (挑戦)
541デフォルトの名無しさん
2020/01/04(土) 17:22:50.50ID:HJ66bOYq542デフォルトの名無しさん
2020/01/04(土) 17:47:47.60ID:6lKY6ugm over flow周りはあってるんだかわからん
https://i.imgur.com/PndnV6t.png
https://i.imgur.com/PndnV6t.png
543デフォルトの名無しさん
2020/01/04(土) 19:01:02.66ID:hAlxX0tq Mathematica ?
544デフォルトの名無しさん
2020/01/04(土) 20:28:18.17ID:rMjoeVI8 お題: 文字列を逆順にしてコピーするreverse関数を定義せよ(既存のライブラリを使ってはならない)
545デフォルトの名無しさん
2020/01/04(土) 20:40:17.01ID:YRTK1M0u546デフォルトの名無しさん
2020/01/04(土) 20:46:16.21ID:HJ66bOYq >>544 PowerShell
function reverse($s) {-join $s[-1..-$s.length]}
reverse 文字列を逆順にしてコピーするreverse関数を定義せよ
-- 実行結果 --
よせ義定を数関esreverるすーピコてしに順逆を列字文
function reverse($s) {-join $s[-1..-$s.length]}
reverse 文字列を逆順にしてコピーするreverse関数を定義せよ
-- 実行結果 --
よせ義定を数関esreverるすーピコてしに順逆を列字文
547デフォルトの名無しさん
2020/01/04(土) 21:12:58.70ID:AqMdau2S >>544 Ruby
def reverse( s ); s.chars.inject(:prepend); end
def reverse( s ); s.chars.inject(:prepend); end
548デフォルトの名無しさん
2020/01/04(土) 21:13:39.03ID:rMjoeVI8■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 今年の漢字 [ぐれ★]
- 【おこめ券】物価高対策の“おこめ券”全米販は1枚477円で販売へ 鈴木農水大臣「国民の皆様に活用いただきやすいよう工夫いただいた」★2 [ぐれ★]
- 【麻雀】プロ雀士の岡田紗佳さんが勝訴、点数計算めぐる発言は「違法とは言えず」 大宮簡裁 [征夷大将軍★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★5 [蚤の市★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ★3 [冬月記者★]
- ハリウッド実写版『ストリートファイター』初映像解禁 リュウ&春麗らのビジュアルも公開 [muffin★]
- 虫歯の味ってわかるよね
- メトロイドはゼルダやピカチュウにはなれないのだよ
- 参政党議員「クジラの肉を食べないのは流通や販路に問題があるからだよね?」 [592058334]
- VTuber叩きが大流行してる理由、1枚の画像で解説される…!! [858219337]
- __トランプ、G7に代わる「Core 5」構想、米 中 露 印 日をまとめる巨大枠組み、世界秩序の再編につながる可能性 [827565401]
- 【超速報】自転車がパンクした・・・・・・・・・・・・ [793051416]
