У меня есть следующая проблема.
Мне нужно построить очень большое количество определений (*), таких как
f[{1,0,0,0}] = 1
f[{0,1,0,0}] = 2
f[{0,0,1,0}] = 3
f[{0,0,0,1}] = 2
...
f[{2,3,1,2}] = 4
...
f[{n1,n2,n3,n4}] = some integer
...
Это просто пример. Длина списка аргументов не обязательно должна быть 4, но может быть любой. Я понял, что поиск каждого значения замедляется с экспоненциальной сложностью при увеличении длины списка аргументов. Возможно, это не так странно, так как ясно, что в принципе существует комбинаторный взрыв того, сколько определений Mathematica нужно хранить.
Хотя, я ожидал, что Mathematica будет умным, а извлечение ценности должно быть постоянной временной сложностью. По-видимому, это не так.
Есть ли способ ускорить время поиска? Это, вероятно, связано с тем, как Mathematica внутренне обрабатывает поиск определений символов. Указывает ли это список, пока не найдет совпадение? Кажется, что он делает это.
Все предложения высоко оценены. С наилучшими пожеланиями Зоран
(*) Я работаю над стохастическим программным обеспечением для моделирования, которое генерирует все конфигурации системы и должно хранить сколько раз каждую конфигурацию. В этом смысле список {n1, n2,..., nT} описывает конкретную конфигурацию системы, в которой говорится, что существуют n1 частицы частиц типа 1, n2 частиц типа 2,..., nT типа T. может быть экспоненциально многими такими конфигурациями.