Одно из решений из
Считает не быстро, но все варианты рассчитал
Считает не быстро, но все варианты рассчитал
Изменено: - 07.11.2025 09:15:15
|
06.11.2025 17:42:58
Есть двоичная, восьмеричная, десятичная, шестнадцатеричная системы счисления (из общеупотребительных) и набор цифр в каждой системе разный Excel может работать до 36-ричной системы счисления, в качестве цифр используются знаки 0-9A-Z А еще есть римские числа, где числа записываются буквами и множество других Из контекста понятно что вместо "цифр" имеются в виду числа. И сама задача понятна - "подбор слагаемых под нужную сумму" или "задача о сумме подмножеств" По ссылке из предыдущего поста можно найти несколько вариантов решения данной задачи, наиболее быстрый - решение динамическим программированием, практически нет ограничения по количеству слагаемых, есть ограничения по целочисленности решения и по размеру искомой суммы. Сложность по времени: O(n * 10 ^ m), где n - количество слагаемых, m - количество значащих цифр Сложность по памяти: O(10 ^ m) Поиск суммы из 30 - 100 слагаемых в пределах до нескольких миллионов занимает секунды или доли секунды. Переборы это долго, но перебор 10 слагаемых из 35 проходит относительно быстро |
|||||
|
|
|
|
06.11.2025 17:26:30
Теоретически можно их все перебрать, но времени потребуется много варианты решения отсюда:
Изменено: - 06.11.2025 17:51:00
|
|||
|
|
|
|
07.10.2025 14:00:51
с привязкой к ячейке:
или
|
|||||||||||
|
|
|
|
17.07.2025 22:47:20
Реализовал на Python спираль 999 х 999: Решетом Эратосфена находим все простые числа в массиве от 0 до 999*999 Далее закручиваем числа в спираль - создаем матрицу со значениями True/False (Простое/Составное) И рисуем картинку на VBA пока лень переносить
Изменено: - 18.07.2025 07:41:12
|
|||
|
|
|
|
04.11.2024 22:54:15
Не знаю, актуальна ли еще задача или нет?
Для решения можно использовать линейное программирование, по исходному описанию 10A + 10Б рюкзаков по 5 отделений глубиной 50/60 см и шириной 10/15/20 см - не очень большая вариативность, можно перебрать все возможные комбинации, свести задачу к построению целочисленной линейной модели с правильным указанием целевой функции и решить задачу симплекс-методом. |
|
|
|
|
|
13.11.2023 15:16:57
Все целочисленные операции: +, -, *, // (целочисленное деление), ** (степень), % (остаток от деления) - производятся с длинными числами, не ограниченными по количеству знаков, ничего подключать не нужно. Обычно длинка работает достаточно быстро, т.к. реализована на C++, сравнивал с вычислениями на dotNet (в частности PascalABC.NET), Python большие числа Фибоначчи рассчитал значительно быстрее, чем BigInteger в PascalABC |
|||
|
|
|
|
13.11.2023 13:10:05
Решение на Python в пару строчек:
Результат:
Изменено: - 13.11.2023 13:11:12
|
|||||
|
|
|
|
15.08.2023 13:19:52
|
|||||||
|
|
|
|
29.06.2023 12:12:36
В зависимости от задач можно предложить:
1. Написать собственную UDF на VBA для расчета больших чисел 2. Использовать сторонние библиотеки, которые позволяют вычислять в Excel 3. Другой язык программирования с реализованной длинной арифметикой (Python, Java, C# и др.)
Изменено: - 29.06.2023 12:18:36
|
|
|
|
|
|
22.06.2023 08:22:19
|
|||
|
|
|
|
21.06.2023 16:27:10
Будут другие условия, формулу легко поправить. Формула должна корректно вычислять любой график работы в горизонте ближайших - 98 дней (можно исправить на нужный) И да, формула медленная и постоянна пересчитывается, что дает свои ограничения, по сравнению с математическими формулами.
Изменено: - 21.06.2023 16:36:19
|
|||
|
|
|
|
16.06.2023 12:01:28
Jack Famous, алгоритм зависит от задачи
Если слагаемых мало - даже перебор подойдет Если искомая сумма небольшая - динамическое программирование Если нет жесткого требования к оптимальности результата - жадный алгоритмы с частичными переборами с оптимизациями и отсечениями неперспективных ветвей решения используя эвристики Можно линейное программирование прикрутить Код Игоря считает быстро, когда решение точно есть, я пока не разобрался в алгоритме |
|
|
|
|
|
16.06.2023 11:00:20
Вижу перебор но с отсечением (как бы используем метод ветвей и границ), как только находим результат, останавливаем решение Возможно ошибаюсь Если поменять тип переменных с Variant на Long и Double, то можно еще немного ускорить Что заметил, если точного решения нет (если нельзя ровно разделить на два равных по сумме списка) то расчет уходит в долгую Например, первое число 999, второе число 1001 и далее 198 двоек Разделить данный список на два равных по сумме невозможно, можно в одном списке 999 + 99*2, в другом 1001 + 99 *2 (или 999 + 100*2 и 1001 + 98*2), что динамикой решается очень быстро
Изменено: - 16.06.2023 11:01:02
|
|||
|
|
|
|
16.06.2023 08:26:50
Ігор Гончаренко, Время работы впечатляет, поизучаю алгоритм
|
|
|
|
|
|
15.06.2023 16:56:37
Скорость решения и выделяемая память больше зависит от величины искомой суммы, и линейно зависит от количества слагаемых Сложность алгоритма O(s * n), где s - искомая сумма, n - количество слагаемых, выделяемая память O(s)
Изменено: - 15.06.2023 17:00:35
|
|||
|
|
|
|
15.06.2023 13:58:30
Сведение задачи к решению к "Задачи сумма подмножеств"
В первый список помещаем все слагаемые которые дают сумму не более половины общей суммы, во второй список - все остальные слагаемые На базе решения динамическим программированием: Количество слагаемых может быть большим (несколько сотен - легко) Может работать с суммами с копейками Для каждого слагаемого указывается количество данных слагаемых Суммы распределяет максимально равномерно, если это возможно, но по количеству слагаемых списки могут различаться и не быть равномерными Если нужно и количество слагаемых распределить примерно поровну, то можно реализовать другой алгоритм
Изменено: - 15.06.2023 15:18:40
|
|
|
|
|
|
08.06.2023 08:12:02
Пришлите на почту из профиля или выложите здесь пример исходных данных
Озвучьте бюджет проекта. На вскидку обычный рюкзак с двумя ограничениями (по весу и по кол-ву), возможно подойдет решение задачи "сумма подмножеств" и ее вариации. Алгоритмы аналогичные как в "" (Bin packing problem) / "" (Cutting stock problem) В зависимости от исходных данных и их кол-ва можно будет решить оптимально с помощью линейного программирования.
Изменено: - 08.06.2023 09:09:24
|
|
|
|
|
|
07.06.2023 15:45:34
В рамках текущего набора данных можно распределить все товары на 6 паллет
При этом паллеты будут высотой от 1500 до 1650 мм Монопаллет (с одним товаром) будет только один Остальные можно распределить - не более трех различных товаров на паллете в двух - трех паллетах верхний ряд будет сборный На сколько является важным потратить много времени на расчет укладки и уложить товар на 6 паллет или допустимо раскидать по быстрому весь товар на 7 паллет, где будет 2 или 3 монопаллета, остальное распределено жадным алгоритмом без явной оптимизации? |
|
|
|
|