Проходя лекцию MIT в MITOpencourseware (6.006 лекция 12), я наткнулся на упоминание о 4 алгоритмах умножения (для умножения двух n-значных чисел) -
- Обычный наивный подход со сложностью O(n^2)
- Алгоритм Карацубы - O (n ^ 1,584)
- Тум-Кук(Toom3) - O(n^1,465)
- Шёнхаге-Штрассена - O(nlog(n)log(log(n)))
Теперь нужно было выяснить, в каких пороговых точках (т. е. при значениях n) один метод превосходит другой как лучший алгоритм. Было упомянуто, что все вышеперечисленное находится в пакете gmpy.
Чтобы попробовать это, я обратился к документации пакета gmpy2 по следующей ссылке - https://gmpy2.readthedocs.io/en/latest/intro.html
Однако при беглом просмотре частей этой документации показалось, что gmpy2 больше подходит для работы с большими числами. В частности, я не нашел отдельных функций, реализующих каждый из этих 4 вышеперечисленных алгоритмов. Итак, существуют ли какие-либо части gmpy2, в которых реализованы эти алгоритмы, чтобы я мог построить график времени работы этих алгоритмов в зависимости от n (количества цифр)?