Алгоритм Бурникеля — Циглера

Материал из testwiki
Версия от 12:56, 4 декабря 2022; imported>Turbanoff
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Алгоритм Бурникеля — Циглера (Шаблон:Lang-de) — алгоритм деления больших целых чисел, описанный Кристофом Бурникелем и Йоахимом Циглером в 1998 году[1], позволяющий эффективно вычислить и частное, и остаток от деления.

Ядром метода являются алгоритмы D2n/1n и D3n/2n, которые делят числа длинами 2n, 1n, 3n, 2n. Алгоритмы вызывают друг друга рекурсивно, с каждым шагом сокращая длину числителя на 1/4 и 1/3 соответственно[1]. Алгоритм D3n/2n в числе прочего производит умножение, поэтому его быстродействие можно увеличить использованием Шаблон:Iw.

Если при расчётах используется алгоритм, вычислительная сложность которого составляет O(nc), например, алгоритм Карацубы или Тоома — Кука, то сложность алгоритма Бурникеля — Циглера будет также составлять O(nc). Если в вычислениях используется метод умножения Шёнхаге — Штрассена с O(nlognloglogn), то сложность деления составит O(nlog2nloglogn)[1]Шаблон:Rp

На практике алгоритм быстрее деления столбиком и алгоритма Барретта для чисел, количество десятичных разрядов в которых лежит между приблизительно 250 и 1,5 млн[1]Шаблон:Rp.

Используются во многих стандартных программных библиотеках, например, в Java версии 8[2] и GMP[3].

Примечания

Шаблон:Примечания

Шаблон:Теоретико-числовые алгоритмы