|
2 / 2 / 1
Регистрация: 13.09.2019
Сообщений: 134
|
|||||||||||
Как ускорить работу скрипта по перебору, комбинации сумм14.05.2021, 10:55. Показов 4514. Ответов 33
Ребята, добрый день!
Есть такая проблема не могу решить. Дано, файл Excel c 10 000 тыс.(может быть и больше) записей, эти данные я загружаю в словарь Python, далее из этих данных хочу получить желаемую сумму. Но скрипт работает очень долго, т.к. много вариантов перебора, может работать годами , как переписать код чтобы получить только одну запись и выйти из цикла, плюс значение комбинации записать в файл. Пример: '13098194': 5413033.09, '14024911': 4799851.78, 12794945': 3606633.61 что в итоге дает желаемую сумму: 138195,18 Пример словаря:
0
|
|||||||||||
| 14.05.2021, 10:55 | |
|
Ответы с готовыми решениями:
33
Как ускорить работу скрипта в таблицах Google? ускорить работу скрипта Как можно связать работу скрипта из балуна с работой скрипта на странице? |
|
Автоматизируй это!
|
||
| 14.05.2021, 10:59 | ||
|
если в ячейках уже есть значение с нужным числом то оно то же является решением? или всегда должна быть сумма 3? если сумма 2 будет искомым - сойдет?
0
|
||
|
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
|
|
| 14.05.2021, 11:02 | |
|
Exle, кури: Subset Sum Problem | DP-25.
0
|
|
|
2 / 2 / 1
Регистрация: 13.09.2019
Сообщений: 134
|
|
| 14.05.2021, 11:29 [ТС] | |
|
С суммами накосячил, пример:
Желаемая сумма скажем 10000: '121212': 5000, '1211232': 4000, '12367': 1000
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
||
| 14.05.2021, 12:02 | ||
|
Exle,
0
|
||
|
2 / 2 / 1
Регистрация: 13.09.2019
Сообщений: 134
|
|
| 14.05.2021, 12:23 [ТС] | |
|
if (sum == 0):
RecursionError: maximum recursion depth exceeded in comparison Добавлено через 10 минут если в ячейках уже есть значение с нужным числом то оно то же является решением? или всегда должна быть сумма 3? если сумма 2 будет искомым - сойдет? По идеи если число есть в словаре то его можно считать за решение, вариант решений: Желаемая сумма: 3 Результат: '434434': 2, '78787': 1 Желаемая сумма: 4 Результат: '123456': 4, Желаемая сумма: 7 Результат: '343435': 6, '78787': 1, (вывести только первый встретившийся) Хотя может быть еще: '434434': 2, '78187': 5, Если есть хоть один результат, перерывать перебор. Получаем: т.е. '123456': 4, '343435': 6, '434434': 2, '78787': 1, '78187': 5,
0
|
|
|
2 / 2 / 1
Регистрация: 13.09.2019
Сообщений: 134
|
|
| 14.05.2021, 12:45 [ТС] | |
|
да все варианты, (не ограниченно) и если первое совпадение есть цикл обрывался, чтобы время не тратить
главное чтобы сумма добиралась из значений ячейки, у меня это работает только долго(бесконечно с таким количеством записей ) и не смог реализовать первый попавшийся вариант
0
|
|
|
2 / 2 / 1
Регистрация: 13.09.2019
Сообщений: 134
|
|
| 14.05.2021, 13:38 [ТС] | |
|
а как понять что в переменной есть значение, проверить это?
0
|
|
|
2 / 2 / 1
Регистрация: 13.09.2019
Сообщений: 134
|
|
| 14.05.2021, 13:45 [ТС] | |
|
Добавил.
0
|
|
|
2 / 2 / 1
Регистрация: 13.09.2019
Сообщений: 134
|
|
| 14.05.2021, 13:51 [ТС] | |
|
Эту переменную все равно долго ждать по времени, даже если брейк сделать.
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
||||||
| 14.05.2021, 15:26 | ||||||
|
Exle, посмотри на numpy. Если оперативки хватит, то относительно быстро находит. В коде поиск среди всех сумм по три элемента. Можно увеличить, но там нужно "мудрить" с индексами, иначе "выбросит по памяти"
0
|
||||||
|
2 / 2 / 1
Регистрация: 13.09.2019
Сообщений: 134
|
|
| 14.05.2021, 16:03 [ТС] | |
|
Я слышал, что элементы "numpy" должны быть одного типа, а у меня значения int, float
Добавлено через 10 минут с 3-я эл. если задать значение кол-во символов 10000, падает по памяти. numpy.core._exceptions.MemoryError: Unable to allocate 7.28 TiB for an array with shape (10000, 10000, 10000) and data type float64
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 14.05.2021, 16:22 | |
|
Exle, об этом и писал - для 10000 элементов все комбинации сумм по три элемента равно ~ 1 трл / 2
1. Можно убрать элементы больше требуемой суммы 2. Потом в сумме по двум убрать все суммы больше искомой, запоминая индексы оставшихся сумм в другом массиве (получится список списков) 3. Разворачивание массива сумм в линейный массив 4. Создание нового массива сумм 5. Повтор 1. 6. Повтор 2. Но тут при запоминании индекса убираем подсписки с одинаковыми индексами (число из исходного массива должно один раз суммироваться) И тд Но все равно без существенных доп ограничений при 10000 элементах задача очень затратная по памяти
0
|
|
|
Автоматизируй это!
|
||||||
| 14.05.2021, 17:59 | ||||||
|
Добавлено через 5 минут
Exle, вот так навскидку, решение плохое, если искать большую сумму (но меньше суммы всех ячеек) которой точно нет, то занимает минуту, плюс все храню в памяти, проверяю не более суммы 3 ячеек и флоаты округляю до 2 знаков для сравнения. Но может тебе хватит
0
|
||||||
|
2 / 2 / 1
Регистрация: 13.09.2019
Сообщений: 134
|
|
| 17.05.2021, 09:09 [ТС] | |
|
Суть в том чтобы находить все возможные комбинации сумм, которая в итоге дает желаемое число.
Как писал, ранее их может быть одна, две, а может и десять. Но выводить одну первое совпадение, чтобы время не тратить. Добавлено через 29 минут Попробуйте для теста число, 116 267 835.30 Это комбинация ячеек СУММ(B1:B44) Итог: (пусто) [] Time elapsed: 79.10106086730957
0
|
|
|
Автоматизируй это!
|
|
| 17.05.2021, 18:14 | |
|
0
|
|
| 17.05.2021, 18:14 | |
|
Помогаю со студенческими работами здесь
20
Как ускорить быстродействие скрипта [многопоточность] Как ускорить работу IJ? Как ускорить работу? Как ускорить работу Как ускорить работу программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|