Естественно: ведь я беру новую матрицу с переставленными тройкой и единицей, хотя
не должно меняться.
Пример приведите, пожалуйста.
-- 24 ноя 2014, 16:57 --But I claim that the algorithm of whitefox is not O(1) but O(Log(N))=O(Log(N^2)) as I wrote before.
In fact, Whitefox' algorithm is O(1) for computing the score of swapping a pair.
But the swapping requires to update at most 29+23 products, for example when swapping 720 and 672 on a 27x27 grid.
So the algorithm is indeed O(1+log(n))
Можно
не хранить, а вычислять в процессе вычисления
При этом хранить
и обновлять их при фактическом выполнении обмена
В этом случае сложность вычисления
и сложность пересчёта
будет пропорциональна числу делителей
и
то есть в среднем
Да можно и так. Но как вы правильно заметили обмен происходит редко и поэтому ваш оригинальный О(1) метод для
быстрее.