В качестве домашнего задания я должен реализовать целочисленное умножение чисел из 1000 цифр, используя подход «разделяй и властвуй», который работает ниже O (n). Какой алгоритм я должен изучить?
Алгоритм умножения целых чисел с использованием подхода «разделяй и властвуй»?
comment
Временная сложность не может быть меньше O(n), если n — размер входных данных. Тогда вы даже не сможете прочитать весь ввод.
- person interjay   schedule 08.05.2011
comment
Я подозреваю, что O(n) имеет в виду псевдополиномиальное время, то есть он действительно хочет чего-то лучшего, чем O(2^n). Многие простые алгоритмы удовлетворяют этому требованию, но вы можете получить дополнительную оценку за реализацию одного из приведенных в ответах.
- person hammar   schedule 08.05.2011
comment
Вы уверены, что не ошиблись с O(n * n) ? Если тогда у вас есть 1) алгоритм Карацубы, который работает за O (n ^ (log3 / log2)) и 2) методы БПФ за O (n log n) (технически это O (n * log ^ * n)). Проще всего закодировать Карацубу.
- person Alexandre C.   schedule 08.05.2011
comment
Ошибка в постановке задачи. Я уже написал учителю, спасибо.
- person andandandand   schedule 08.05.2011
Ответы (2)
алгоритм Шёнхаге-Штрассена — один из самых быстрых известных алгоритмов умножения. Это занимает O(n log n log log n) времени.
алгоритм Фюрера – это самый быстрый из известных алгоритмов умножения больших чисел, который требует O (n*log n * 2O(log*n)) раз.
Я не думаю, что какой-либо алгоритм умножения может занять меньше или даже равно O (n). Это просто невозможно.
person
Prasoon Saurav
schedule
08.05.2011
здорово ! в 2003 году это был мой студенческий проект. Я реализовал Карацубу и БПФ над вещественными числами (не Шёнхаге, это O(n log^* n) ), что гораздо проще заставить работать, если вы не освоили алгебру. Рад видеть, что есть что-то новое в этой области. Кстати вы смешали две сложности. Шонхаге Штрассен — O(n log n log log n). Кроме того, Fürer не совсем O (n log n), это O (n log n 2 ^ (log ^ * n)), согласно Википедии.
- person Alexandre C.; 08.05.2011
Взгляните на алгоритм Карацубы. Он включает в себя этап рекурсии, который можно легко смоделировать с помощью принципа «разделяй и властвуй».
person
Mihai Oprea
schedule
08.05.2011