Алгоритм Карацубы

31.08.20

Разработка - Математика и алгоритмы

Реализация метода Карацубы - функции быстрого умножения, которая позволяет перемножать два n-значных числа с битовой вычислительной сложностью (реализация на платформе 1С:Предприятие 8.3 (8.3.9.2233))

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Karatsuba algorithm:
.epf 6,98Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

При прохождении курса специализации Algorithms by Stanford university на платформе Coursera столкнулась с практическим заданием: получить произведение двух  64-значных цифр:

3141592653589793238462643383279502884197169399375105820974944592

2718281828459045235360287471352662497757247093699959574966967627

Для реализации был выбран метод быстрого умножения Карацубы.
Если вкратце, то это метод быстрого умножения, который позволяет перемножать два n-значных числа с битовой вычислительной сложностью. С теорией алгоритма можно ознакомиться на https://algorithmica.org/ru/karatsuba

Особенность алгоритма - использование рекурсии.

Первая попытка была реализована на Python, так как IDLE (интегрированная среда для разработки ) доступна всем. Но там существует предел глубины возможной рекурсии.
Когда предел достигнут, возникает исключение RuntimeError, так как по умолчанию рекурсивный стек Python не превышает 1000 кадров. Это ограничение можно изменить, установив лимит системным методом sys.setrecursionlimit(Лимит). Однако этот лимит также нужно бы предварительно рассчитать, ведь метод с лимитом другого порядка
потребляет больше памяти. 

Поэтому вторую попытку я реализовала на платформе 1С, используя возможность организации рекурсивного вызова функции. Во встроенном языке не установлено конкретного ограничения количества уровней рекурсивного вызова.
Ограничение носит технологический характер.

Прикрепленная обработка содержит рекурсивную функцию, где обеспечен своевременный выход из рекурсии по определенному условию. Что касается быстродействия самого метода Карацубы, то на практике алгоритм становится эффективнее обычного умножения при умножении чисел длиной порядка сотен двоичных (десятков десятичных) разрядов, на числах меньшей длины алгоритм не даёт существенного преимущества из-за большего, чем в наивном алгоритме, числа требуемых сложений, вычитаний и сдвигов.

Внешняя обработка рассчитана на ввод и отображение на форме 32-значных цифр. Однако выполнить операцию с 64-значных цифрами вполне возможно, указывая исходные данные непосредственно в коде и получая промежуточный результат без хранения в базе данных и отображения на форме. Что вполне достаточно для получения результата моей первоначальной задачи.

Практика программирования теория алгоритмов асимптотический анализ метод Карацубы рекурсия ограничение значности цифр

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    3159    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    7548    user1959478    51    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3104    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    10901    7    SpaceOfMyHead    18    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4355    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

В статье анализируются средства платформы для решения системы линейных уравнений в 1С. Приводятся доводы в пользу некорректной работы встроенных алгоритмов, а значит потенциально некорректного расчета себестоимости в типовых конфигурациях.

23.11.2022    3522    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9041    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. wowik 890 31.08.20 15:00 Сейчас в теме
+1. Надо внедрить в РАУЗ (УПП 1.3), чтобы быстрее все считалось)
2. Cyberhawk 135 03.09.20 21:33 Сейчас в теме
Во встроенном языке не установлено конкретного ограничения количества уровней рекурсивного вызова.
Ограничение носит технологический характер
В 32б платформе стек вызовов ограничен ~40-80 уровнями вложенности.
А какие ограничения у 64б и что подразумевается под "технологическим характером"?
3. Tatsiana 4 09.09.20 12:14 Сейчас в теме
Максимальная глубина рекурсивной функции связана с размером стека.
Настройка размера стека носит технологический характер, т.е. это одна из комплексных настроек/свойств технического устройства, на котором будет исполняться код.
Оставьте свое сообщение