在大型阵列上测试Dyalog习语的时间



对于第一行找到的习语(w∘{(↓⍺)⍳↓⍵})搜索时间似乎没有减少,即使第一次搜索会散列数组,使以后的搜索更快?

w← 100000000 3⍴'123'
w←w,[1]'321'
z← ⎕AI[3] ⋄ w∘{(↓⍺)⍳↓⍵}'321' ⋄ (⎕AI[3])-z
100000001
2892
z← ⎕AI[3] ⋄ w∘{(↓⍺)⍳↓⍵}'321' ⋄ (⎕AI[3])-z
100000001
2883

从文档中:

请注意,保留哈希表仅在派生函数的第二次或后续应用时获得回报。这通常以以下两种方式之一发生:要么命名派生函数以供以后(和重复(使用,如下面的第一个示例所示,要么作为基元或定义运算符的操作数重复应用,如第二个示例所示。

w←100000000 3⍴'123'
w←w,[1]'321'
f←w∘{(↓⍺)⍳↓⍵}
z←⎕AI[3] ⋄ f'321' ⋄ (⎕AI[3])-z
100000001
2782
z←⎕AI[3] ⋄ f'321' ⋄ (⎕AI[3])-z
100000001
16

在线试用!

w←100000000 3⍴'123' 
w←w,[1]'321' 
w∘{(↓⍺)⍳↓⍵}{z←⎕AI[3] ⋄ ⎕←⍺⍺ ⍵ ⋄ ⎕←(⎕AI[3])-z}¨'321' '321'
100000001
2375
100000001
0

在线试用!

最新更新