J(J6または7ではなくJ503を使用)では、通常、配列の要素が前の要素よりも小さいかどうかを確認したい場合は、次のように使用します。
smaller =: }:<:}.
その結果、n-1個のアイテムになります。
smaller 1 2 3 4 5
1 1 1 1
smaller 1 2 4 3
1 1 0
内部的に、 2つの配列}:
を}.
作成し(1つは最後の項目を省略し、もう1つは最初の項目を省略します)、最終的に<:
比較を可能にします。合計メモリ使用量は2(n-1)
、2つの一時アレイの場合になります。
memuse =: 7!:2
i =: ,(10000#1)?10000
memuse 'smaller i'
148480
直感的にうまく機能するはずの別のアプローチは、より多くのメモリを必要とします。
smaller2 =: 13 : '2<:/\y.'
memuse 'smaller i'
214400
(J6はこれをはるかにうまく処理します。しかし、私はJ5で立ち往生しています)。
同じ操作のよりスリムな代替手段は何でしょうか?