在 J(使用 J503,而不是 J6 或 7)中,通常当我想查看数组的元素是否小于其前任时,我使用以下命令:
smaller =: }:<:}.
这导致 n-1 项:
smaller 1 2 3 4 5
1 1 1 1
smaller 1 2 4 3
1 1 0
在内部,}:
创建}.
两个数组(一个省略最后一项,另一个省略第一项),最后允许<:
比较。总内存使用量将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)。
对于相同的操作,什么是更精简的选择?