Я прохожу курс Разделяй и властвуй, сортировка, поиск и рандомизированные алгоритмы от Coursera. Задача на 1-ю неделю - реализовать алгоритм умножения целых чисел с использованием метода умножения Карацубы. В результате можно умножить два 64-значных числа:
Попробуйте умножить эти два числа, и вы получите
Это правильный результат, но он сильно теряет точность, потому что наибольшее целое число, которое может отобразить JavaScript, равно 2⁵³-1 (MDN).
Чтобы решить эту проблему, мы могли бы использовать алгоритм Карацубы и BigInt prosal от комитета JavaScript T39.
В алгоритме Карацубы мы рекурсивно разбиваем каждое целое число пополам, пока оно не станет меньше 10, которое состоит из одной единственной цифры. Затем мы умножаем две однозначные цифры вместе. n - количество цифр для каждого целого числа.
Фактически, при каждом рекурсивном вызове программа будет пытаться разбить каждое число на a, b, c, d, чтобы вычислить умножение на основе имеющейся у нас формулы. Вместо того, чтобы усекать результат обычным целым числом, BigInt имеет достаточную точность, чтобы отобразить полный результат как
Надеюсь, вы найдете это полезным!