Полиномиальное умножение | Алгоритмы - PullRequest
1 голос
/ 15 марта 2012

Я тренирую свой C ++ и пытаюсь написать библиотеку, которая сможет представлять следующее число, используя связанные списки XOR:

999999999 * ([i = 0]Σ [999999999] 1000000000 ^ i)

Например, если мой номер был 711381450277869054011 , он будет представлен следующим образом:

711 * 1000000000 ^ 2 + 381450277 * 1000000000 ^ 1 + 869054011 * 1000000000 ^ 0

Или просто:

711 * X ^ 2 + 381450277 * X ^ 1 + 869054011 * X ^ 0

enter image description here

Я перегрузил оператор * для своего класса, но я думаю, что алгоритм, который я использовал,неуклюжий.

Я собирался пойти на алгоритм Карацубы , но так как он рекурсивный, это приведет к переполнению стека.

Затем я проверил Toom-3 алгоритм .Мне понравилось, но я не смог применить его, потому что я еще не запрограммировал отрицательные числа.

Мой вопрос: какой алгоритм вы предлагаете, будет лучше для умножения полиномов?Есть ли какие-нибудь хорошие алгоритмы, которые мне нужно увидеть?

1 Ответ

3 голосов
/ 16 марта 2012

Вы можете использовать Быстрое преобразование Фурье для его выполнения.Существует также нерекурсивная реализация этого.

...