Мне нужно разделить числа, представленные в виде цифр в массивах байтов, с нестандартным количеством байтов. Это может быть 5 байт или 1 ГБ или больше. Деление должно выполняться с числами, представленными в виде байтовых массивов, без каких-либо преобразований в числа.
Какой самый быстрый алгоритм деления сумасшедших больших целых чисел?
Ответы (2)
Деление по принципу «разделяй и властвуй» оказывается намного быстрее, чем метод школьных учебников для действительно больших целых чисел.
GMP — это современная библиотека больших чисел. Почти для всего у него есть несколько реализаций различных алгоритмов, каждая из которых настроена на определенные размеры операндов.
Здесь представлена документация GMP по "алгоритмам деления". Описания алгоритмов немного кратки, но они, по крайней мере, дают вам что-то для поиска в Google, когда вы хотите узнать больше.
Брент и Циммерманн "Современная компьютерная арифметика" — хорошая книга по теория и реализация арифметики больших чисел. Вероятно, стоит прочитать, если вы хотите знать, что известно.
Стандартный алгоритм деления в длину, аналогичный алгоритму деления в длину в начальной школе, представляет собой алгоритм D, описанный в Кнуте 4.3.1. Кнут подробно обсуждает деление в этом разделе своей книги. В результате есть более быстрые методы, чем алгоритм D, но они ненамного быстрее и намного сложнее, чем алгоритм D.
Если вы решили получить максимально быстрый алгоритм, вы можете прибегнуть к тому, что известно как алгоритм SRT.
Все это и многое другое описано в Алгоритме деления в Википедии.
BigInteger
- довольно плохая вещь, если вы хотите, чтобы ваши операции были быстрыми. Умножение и деление выполнены по школьной программе в канонической реализации. - person tmyklebu   schedule 26.06.2013