в итоге было бы интересно обсудить пути решений ;-)
Вар.1. Полный перебор всех сочетаний 8 чисел из 56 с применением методом ветвей и границ (отсечение неперспективных ветвей решения) - менее 10 секунд, для получения всех возможных вариантов решения. Получение хотя-бы одного решения (первого) - менее 1 сек.
Вар.2 Берем логарифмы каждого числа (множителей и требуемого произведения), тогда задача нахождения произведения сводится к задаче "сумма подмножеств", когда нужно найти необходимую сумму, в качестве слагаемых используем логарифмы чисел. Для решения можно применять различные алгоритмы, в. т. линейное программирования (симплекс-метод) через "Поиск решения" В качестве недостатка метода - может быть достаточно большая погрешность связанная с логарифмами и последующее возведение в степень, а также "Поиск решения" работает с определенной точностью, поэтому при малых значениях множителей (как в примере), может получится достаточно большая погрешность. И не возможно перебрать все решения и выбрать наилучшее, будет найдено одно единственное решение из множества, не обязательно оптимальное. Из плюсов - легко реализовать
в итоге было бы интересно обсудить пути решений ;-)
Вар.1. Полный перебор всех сочетаний 8 чисел из 56 с применением методом ветвей и границ (отсечение неперспективных ветвей решения) - менее 10 секунд, для получения всех возможных вариантов решения. Получение хотя-бы одного решения (первого) - менее 1 сек.
Вар.2 Берем логарифмы каждого числа (множителей и требуемого произведения), тогда задача нахождения произведения сводится к задаче "сумма подмножеств", когда нужно найти необходимую сумму, в качестве слагаемых используем логарифмы чисел. Для решения можно применять различные алгоритмы, в. т. линейное программирования (симплекс-метод) через "Поиск решения" В качестве недостатка метода - может быть достаточно большая погрешность связанная с логарифмами и последующее возведение в степень, а также "Поиск решения" работает с определенной точностью, поэтому при малых значениях множителей (как в примере), может получится достаточно большая погрешность. И не возможно перебрать все решения и выбрать наилучшее, будет найдено одно единственное решение из множества, не обязательно оптимальное. Из плюсов - легко реализоватьMCH
В итоге реализовано в рамках первого подхода. Не списывал. Решал сам. Давно чесались руки восстановить писанное еще на макросах EXCEL 4.0 Постарался рассмотреть наиболее общий случай. Но поскольку задача была поставлена таким образом, не стал убирать ограничение по количеству операндов, хотя и сделал его задаваемым.
Скорострельности МСН не достиг. Может, хуже написал (хотя перфекционизм включал по полной - чую, пригодится еще), а, может, машинка послабее, на которой отлаживал...
МСН! Вам уважение! Насколько знаю - Вы один из лидеров (а, может, и абсолютный лидер) в подобных задачах. Ваши реализации мне пару раз попадались, но не нашел времени вникнуть.
В итоге реализовано в рамках первого подхода. Не списывал. Решал сам. Давно чесались руки восстановить писанное еще на макросах EXCEL 4.0 Постарался рассмотреть наиболее общий случай. Но поскольку задача была поставлена таким образом, не стал убирать ограничение по количеству операндов, хотя и сделал его задаваемым.
Скорострельности МСН не достиг. Может, хуже написал (хотя перфекционизм включал по полной - чую, пригодится еще), а, может, машинка послабее, на которой отлаживал...
МСН! Вам уважение! Насколько знаю - Вы один из лидеров (а, может, и абсолютный лидер) в подобных задачах. Ваши реализации мне пару раз попадались, но не нашел времени вникнуть.Perfect2You
мой вариант самый медленный был :-) полным перебором возможных вариантов (2^56) преобразование порядкового номера комбинации в двоичное число, определение бит в состоянии 1, если их 8 проверка произведения соответствующих значений. ну к этому еще добавил выбор количества множителей, количества заданных чисел, диапазон приближения к заданному значению за ночь моя машинка определила 150 совпадений (с приближением +- 0,01) при этом перебор еще шел в районе 40%...
с логарифмами я немного запустил изучение :-)
мой вариант самый медленный был :-) полным перебором возможных вариантов (2^56) преобразование порядкового номера комбинации в двоичное число, определение бит в состоянии 1, если их 8 проверка произведения соответствующих значений. ну к этому еще добавил выбор количества множителей, количества заданных чисел, диапазон приближения к заданному значению за ночь моя машинка определила 150 совпадений (с приближением +- 0,01) при этом перебор еще шел в районе 40%...
с логарифмами я немного запустил изучение :-)K-SerJC