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

时间:2018-06-14 02:35:09

标签: performance hash apl 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

1 个答案:

答案 0 :(得分:0)

来自documentation

  

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

      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

Try it online!

      w←100000000 3⍴'123' 
      w←w,[1]'321' 

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

Try it online!