Время тестирования Dyalog Idiom на большом массиве
Для этого первого ряда найдена идиома (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 ответ
Из документации:
Обратите внимание, что сохранение хеш-таблицы окупается только при втором или последующем применении производной функции. Это обычно происходит одним из двух способов: либо производная функция названа для последующего (и повторного) использования, как в первом примере ниже, или она применяется повторно как операнд примитивного или определенного оператора, как во втором примере.
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