なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net (914レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
341: 2015/12/27(日)00:54 ID:Y7IK7QLW(1/16) AAS
>>325
bashを使うのであれば

if [ $i -ge $j ]; then
の代わりに
if (( $i < $j )); then と書ける。

また(( )) の中で単体の変数は$を省略できる
if (( i < j )); then

一行で書くこともできる。
(( i >= $ )) && break
342: 2015/12/27(日)01:09 ID:Y7IK7QLW(2/16) AAS
stack=("${stack[@]:0:((${#stack[@]}-2))}")

これは、こう書ける。

stack=("${stack[@]::${#stack[@]}-2}")

ついでに、""をつける方が正しいのではあるが、
値にスペースが無ければ、"" は省略可能。
343: 2015/12/27(日)01:15 ID:Y7IK7QLW(3/16) AAS
p=$(( $((${array2[$i]}+${array2[$j]}))/2 ))

$((・・・)) の中では普通に () が使用可能

p=$(( (${array2[$i]} + ${array2[$j]}) / 2 ))
344: 2015/12/27(日)01:21 ID:Y7IK7QLW(4/16) AAS
for i in `seq 1 1 1000`; do

`` は基本的に $() と同等。新しい$()の使用が推奨されている。

for i in $(seq 1 1 1000); do

また、これは以下のように書ける

for i in {1..1000}; do
345: 2015/12/27(日)01:32 ID:Y7IK7QLW(5/16) AAS
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))
省4
346: 2015/12/27(日)01:46 ID:Y7IK7QLW(6/16) AAS
ループ版で時間がかかってるのはこの部分な気がするな。
配列をコピーしているわけだし。

stack=(${stack[@]::${#stack[@]}-2})

外部リンク[html]:www.drk7.jp
さて、ここの非再帰版を見ると、どうも配列のコピーはしてないようだ。
ループ版は高速化の余地がありそうだ。

やってみるかね? うまく実装できるかな?
348: 2015/12/27(日)02:20 ID:Y7IK7QLW(7/16) AAS
さーて、コードをほとんど読まずに、Perl版をそのまま置き換えてみたが
きちんと動かんぞとw 面倒くさいな。
速度的には再帰版より速くなりそうな感じはしてるが、処理間違ってるからなw
349: 2015/12/27(日)02:32 ID:Y7IK7QLW(8/16) AAS
あ、できたっぽい? 参考にしたコードに二箇所バグが有るようだな。

> &qsort_array($array2,0,$size);
> $right_stack[0] = $right;

$sizeが$rightに入るが、正しくは$size-1

> if ($i - $left < $right - i) {

> if ( ($i - $left) < ($right - i) ) {

Perlの優先順位は、下のように解釈されるんだっけ?
そんなの変えないよな。
省1
350: 2015/12/27(日)02:34 ID:Y7IK7QLW(9/16) AAS
ごめん嘘だったw 。あれぇ〜?
351: 2015/12/27(日)02:58 ID:Y7IK7QLW(10/16) AAS
Perl版実行してみたがもともとのコードからして動いてないw
352
(1): 2015/12/27(日)03:31 ID:Y7IK7QLW(11/16) AAS
マジめんどくさかったわw 参考にしたコードが悪すぎた。

他のコードと比べてよくわからん比較条件とか処理が多かったので
結局諦めてこっちを参考にした。
外部リンク:gauc.no-ip.org

結論。やっぱりループのほうが速かったねw
外部リンク:ideone.com
recursive
real 0m0.550s
user 0m0.548s
sys 0m0.000s
省16
353
(3): 2015/12/27(日)03:35 ID:Y7IK7QLW(12/16) AAS
ループの方が速かったので訂正よろ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]
ぐうの音も出ないなこれは
356
(1): 2015/12/27(日)07:39 ID:Y7IK7QLW(13/16) AAS
>>355
いいだしっぺどうぞw
358: 2015/12/27(日)07:55 ID:Y7IK7QLW(14/16) AAS
言い出しっぺの定義を変えるなよw
本当に往生際が悪いw
360: 2015/12/27(日)08:06 ID:Y7IK7QLW(15/16) AAS
と言われてもなぁw

俺は1万倍速いなんて言ってないし。
ループのほうが速いという証拠も出したからどうでもいいかなw
362: 2015/12/27(日)08:18 ID:Y7IK7QLW(16/16) AAS
>>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]
ぐうの音も出ないなこれは
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.053s