Нужен совет по оптимизации данного алгоритма.
На вход алгоритм получает

чисел

,

пар

и

пар

.
Далее вычисления выполняются так:
- Случайно, с равномерным законом распределения, выбираем индекс
![$m\in\left[1,N\right]$ $m\in\left[1,N\right]$](https://dxdy-04.korotkov.co.uk/f/f/5/4/f54459da2760c1a1083995986f6ffd4e82.png)
- Вычисляем
по формуле
где
- Вычисляем новое значение
по формуле
- Если еще не все
обработаны, переходим на п.1; - Вывод
В моей задаче

порядка нескольких тысяч,

, а уложиться надо в несколько миллисекунд на 12-ядерном ксеоне.
Я делаю так: новое значение каждого

вычисляется по формуле

. Видно , что суммы

и

, а также значения

и

можно вычислять заранее, параллельно для всех возможных комбинаций индексов. А после вычисления каждого нового значения

заменять соответствующий ему элемент суммы.
Можно ли еще как-то преобразовать алгоритм, чтобы уменьшить количество вычислений тригонометрических функций ?