なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net (914レス)
なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1448704298/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
341: デフォルトの名無しさん [sage] 2015/12/27(日) 00:54:47.63 ID:Y7IK7QLW >>325 bashを使うのであれば if [ $i -ge $j ]; then の代わりに if (( $i < $j )); then と書ける。 また(( )) の中で単体の変数は$を省略できる if (( i < j )); then 一行で書くこともできる。 (( i >= $ )) && break http://mevius.5ch.net/test/read.cgi/tech/1448704298/341
342: デフォルトの名無しさん [sage] 2015/12/27(日) 01:09:36.05 ID:Y7IK7QLW stack=("${stack[@]:0:((${#stack[@]}-2))}") これは、こう書ける。 stack=("${stack[@]::${#stack[@]}-2}") ついでに、""をつける方が正しいのではあるが、 値にスペースが無ければ、"" は省略可能。 http://mevius.5ch.net/test/read.cgi/tech/1448704298/342
343: デフォルトの名無しさん [sage] 2015/12/27(日) 01:15:06.76 ID:Y7IK7QLW p=$(( $((${array2[$i]}+${array2[$j]}))/2 )) $((・・・)) の中では普通に () が使用可能 p=$(( (${array2[$i]} + ${array2[$j]}) / 2 )) http://mevius.5ch.net/test/read.cgi/tech/1448704298/343
344: デフォルトの名無しさん [sage] 2015/12/27(日) 01:21:25.37 ID:Y7IK7QLW for i in `seq 1 1 1000`; do `` は基本的に $() と同等。新しい$()の使用が推奨されている。 for i in $(seq 1 1 1000); do また、これは以下のように書ける for i in {1..1000}; do http://mevius.5ch.net/test/read.cgi/tech/1448704298/344
345: デフォルトの名無しさん [sage] 2015/12/27(日) 01:32:25.91 ID:Y7IK7QLW lintツールとして、shellcheckコマンドがある。 qsort_rec $left $((i-1)) ^-- SC2086: Double quote to prevent globbing and word splitting. qsort_rec $((j+1)) $right ^-- SC2086: Double quote to prevent globbing and word splitting. $leftと$rightにスペースが入ってる場合に問題になるから""をつけろと警告される。 これは冒頭で left=$(($1)) right=$(($2)) のようにして数値であると保証してあげれば消える。 変数 pair が未使用 その他の警告は、上の指摘を修正すれば消えるはず http://mevius.5ch.net/test/read.cgi/tech/1448704298/345
346: デフォルトの名無しさん [sage] 2015/12/27(日) 01:46:16.35 ID:Y7IK7QLW ループ版で時間がかかってるのはこの部分な気がするな。 配列をコピーしているわけだし。 stack=(${stack[@]::${#stack[@]}-2}) http://www.drk7.jp/MT/archives/000995.html さて、ここの非再帰版を見ると、どうも配列のコピーはしてないようだ。 ループ版は高速化の余地がありそうだ。 やってみるかね? うまく実装できるかな? http://mevius.5ch.net/test/read.cgi/tech/1448704298/346
348: デフォルトの名無しさん [sage] 2015/12/27(日) 02:20:49.37 ID:Y7IK7QLW さーて、コードをほとんど読まずに、Perl版をそのまま置き換えてみたが きちんと動かんぞとw 面倒くさいな。 速度的には再帰版より速くなりそうな感じはしてるが、処理間違ってるからなw http://mevius.5ch.net/test/read.cgi/tech/1448704298/348
349: デフォルトの名無しさん [sage] 2015/12/27(日) 02:32:42.88 ID:Y7IK7QLW あ、できたっぽい? 参考にしたコードに二箇所バグが有るようだな。 > &qsort_array($array2,0,$size); > $right_stack[0] = $right; $sizeが$rightに入るが、正しくは$size-1 > if ($i - $left < $right - i) { ↓ > if ( ($i - $left) < ($right - i) ) { Perlの優先順位は、下のように解釈されるんだっけ? そんなの変えないよな。 今コードを見直してる。 http://mevius.5ch.net/test/read.cgi/tech/1448704298/349
350: デフォルトの名無しさん [sage] 2015/12/27(日) 02:34:29.15 ID:Y7IK7QLW ごめん嘘だったw 。あれぇ〜? http://mevius.5ch.net/test/read.cgi/tech/1448704298/350
351: デフォルトの名無しさん [sage] 2015/12/27(日) 02:58:09.23 ID:Y7IK7QLW Perl版実行してみたがもともとのコードからして動いてないw http://mevius.5ch.net/test/read.cgi/tech/1448704298/351
352: デフォルトの名無しさん [sage] 2015/12/27(日) 03:31:06.37 ID:Y7IK7QLW マジめんどくさかったわw 参考にしたコードが悪すぎた。 他のコードと比べてよくわからん比較条件とか処理が多かったので 結局諦めてこっちを参考にした。 http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_102 結論。やっぱりループのほうが速かったねw https://ideone.com/KmmnH7 recursive real 0m0.550s user 0m0.548s sys 0m0.000s loop real 0m0.439s user 0m0.436s sys 0m0.000s なお再帰版も>>326よりも速くなっているのは、 上で指摘した点をリファクタリングしたため。 >>326のコード > recursive > real 0m0.637s > user 0m0.636s > sys 0m0.000s > > loop > real 0m0.723s > user 0m0.720s > sys 0m0.000s http://mevius.5ch.net/test/read.cgi/tech/1448704298/352
353: デフォルトの名無しさん [sage] 2015/12/27(日) 03:35:18.72 ID:Y7IK7QLW ループの方が速かったので訂正よろw 328 名前:デフォルトの名無しさん[] 投稿日:2015/12/26(土) 21:22:21.55 ID:EXUTS9i+ [10/10] なんだやっぱり再帰の方がいいのか 329 名前:デフォルトの名無しさん[sage] 投稿日:2015/12/26(土) 21:26:26.06 ID:hFLlv/LI [1/3] ぐうの音も出ないなこれは http://mevius.5ch.net/test/read.cgi/tech/1448704298/353
356: デフォルトの名無しさん [sage] 2015/12/27(日) 07:39:49.49 ID:Y7IK7QLW >>355 いいだしっぺどうぞw http://mevius.5ch.net/test/read.cgi/tech/1448704298/356
358: デフォルトの名無しさん [sage] 2015/12/27(日) 07:55:16.56 ID:Y7IK7QLW 言い出しっぺの定義を変えるなよw 本当に往生際が悪いw http://mevius.5ch.net/test/read.cgi/tech/1448704298/358
360: デフォルトの名無しさん [sage] 2015/12/27(日) 08:06:42.55 ID:Y7IK7QLW と言われてもなぁw 俺は1万倍速いなんて言ってないし。 ループのほうが速いという証拠も出したからどうでもいいかなw http://mevius.5ch.net/test/read.cgi/tech/1448704298/360
362: デフォルトの名無しさん [sage] 2015/12/27(日) 08:18:08.68 ID:Y7IK7QLW >>361 これでいいのかい?w ループの方が速かったよwww 328 名前:デフォルトの名無しさん[] 投稿日:2015/12/26(土) 21:22:21.55 ID:EXUTS9i+ [10/10] なんだやっぱり再帰の方がいいのか 329 名前:デフォルトの名無しさん[sage] 投稿日:2015/12/26(土) 21:26:26.06 ID:hFLlv/LI [1/3] ぐうの音も出ないなこれは http://mevius.5ch.net/test/read.cgi/tech/1448704298/362
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.036s