|
Супер-модератор
3983 / 2154 / 833
Регистрация: 13.03.2010
Сообщений: 7,057
|
|||||||
Задача на подумать: подсчёт заданной суммы из элементов массива10.11.2023, 17:49. Показов 2640. Ответов 39
Метки нет (Все метки)
Всем добрый вечер.
В спорах с товарищем пришли к такой задаче: Задан массив int и float чисел, одинаковые числа могут повторяться сколько угодно раз. Есть сумма, которую нужно получить из чисел этого массива. Заранее известно, что сумму можно получить как минимум одной комбинацией чисел неизвестной длины. Нужно вывести комбинацию индексов чисел, из которых можно получить данную сумму. Например: Есть массив [100, 3, 20, 60, 50] и нужно получить число 123 из его элементов. Значит, правильным ответом будет любая комбинация из ключей [0, 1, 2]. Если же нужно получить число 133, то ответ будет, например, [3, 2, 1, 4].Какое на ваш взгляд здесь самое оптимальное решение? Интересуют больше логические рассуждения, а не сам код (но и код обсудить будет интересно). Я реализовал через 2 while и перебор сумм по разным ключам. Да, оно работает, но это явно не лучший и однозначно не самый оптимальный вариант. Плюс кушает достаточно много памяти на дальних дистанциях.Всем заранее спасибо за отклик и уделённое время. ![]()
0
|
|||||||
| 10.11.2023, 17:49 | |
|
Ответы с готовыми решениями:
39
Подсчет суммы элементов в главной и побочной диагоналях в произвольно заданной квадратной Подсчет суммы элементов массива Функция: подсчет числа отрицательных элементов массива, и суммы положительных элементов матрицы |
|
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
|
|
| 15.11.2023, 17:47 | |
|
Не читал выше посты. Не силен в алгоритмах, сильно не бейте) Первое что пришло в голову отсортировать массив в порядке убывания, и начинать от наибольших значений, заполняя сумму. Если сумма превышена, то вместо последнего числа пытаемся найти подходящее учитывая, что массив отсортирован и т.д.
0
|
|
|
Заблокирован
|
||
| 15.11.2023, 17:59 | ||
|
0
|
||
|
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
|
||
| 15.11.2023, 18:16 | ||
|
Решение в лоб, делать полный перебор, а алгоритм должен быть направлен на сокращение количества выборок. Смысл в том и есть, что суммируем числа до переполнения необходимой суммы и потом вместо числа переполнившего сумму попытаться найти другое число, и зная что массив отсортирован, можно искать к примеру делением пополам. Если такого нет, то тогда отметается предыдущее число и т.д. А так как массив отсортирован в порядке убывания, то мы получается начинаем с больших чисел. Это как вам нужно набрать 6750 рублей, вы мысленно начнете набирать с наибольших купюр (5000, 1000, 500, 100, 100, 50)
0
|
||
|
Супер-модератор
3983 / 2154 / 833
Регистрация: 13.03.2010
Сообщений: 7,057
|
|
| 15.11.2023, 18:30 [ТС] | |
|
sad67man, исходный массив нельзя трогать. А если и трогать, то с сохранением индексов, т.к. по задаче нужно вернуть именно индексы из исходного массива.
И, да, в массиве одинаковые числа могут быть, а вот в решении одинаковых индексов быть не может. Т.е. 1 элемент массива может быть использован только 1 раз. В этом и основная проблема. ![]() Решения выше, как я понимаю, повторно могут использовать один и тот же элемент массива. Но всё равно интересно и на такие решения посмотреть, вызывают дискуссию.
0
|
|
|
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
|
||
| 15.11.2023, 18:32 | ||
|
0
|
||
|
Заблокирован
|
||
| 15.11.2023, 18:41 | ||
|
0
|
||
|
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
|
|
| 15.11.2023, 18:43 | |
|
0
|
|
|
Супер-модератор
3983 / 2154 / 833
Регистрация: 13.03.2010
Сообщений: 7,057
|
||
| 15.11.2023, 18:56 [ТС] | ||
|
Чем больше элементов у нас в массиве - тем сложнее обсчитать все возможные варианты и найти хотя бы одну подходящую комбинацию. Я лично так и не смог найти нормальное решение на php, кроме тупого бесконечного подбора. Товарищ на python и go нашел (далеко не оптимальные, хоть и в многопотоке), но там чем больше "глубина" поиска решения, тем дольше его искать. И каждый дополнительный элемент в массиве увеличивает это время в геометрической прогрессии.
0
|
||
|
Заблокирован
|
||||||
| 15.11.2023, 19:44 | ||||||
|
Переделал. Но решает невсегда. Пришлось делать защиту от зависаний) Может завтра переделаю.
0
|
||||||
|
75 / 58 / 20
Регистрация: 01.10.2009
Сообщений: 208
|
||
| 15.11.2023, 21:09 | ||
|
интересно
на сколько большим будет входящий массив? смотреть массив (переменная=знаю что мы прошли ранее) в итерации массива порнуха?
0
|
||
|
Супер-модератор
3983 / 2154 / 833
Регистрация: 13.03.2010
Сообщений: 7,057
|
|
| 15.11.2023, 21:12 [ТС] | |
|
Дух системы, изначально задан, конечно же. Количество элементов не ограничено (тестировали на 247 элементах изначально, но это ту мач, дай б-г с 10 посчитать быстро).
Про "смотреть массив" не понял, но ничего не запрещено, по сути.
0
|
|
|
75 / 58 / 20
Регистрация: 01.10.2009
Сообщений: 208
|
|||||||
| 15.11.2023, 21:36 | |||||||
0
|
|||||||
|
Супер-модератор
3983 / 2154 / 833
Регистрация: 13.03.2010
Сообщений: 7,057
|
|
| 15.11.2023, 21:39 [ТС] | |
|
Дух системы, кмк это не противоречит задаче, если поможет её решить.
0
|
|
|
Заблокирован
|
||||||
| 15.11.2023, 21:41 | ||||||
|
Сделал методом научного тыка) Уже не подвисает. Проверял различные варианты и различные массивы. Вроде работает
1
|
||||||
|
75 / 58 / 20
Регистрация: 01.10.2009
Сообщений: 208
|
|
| 15.11.2023, 23:01 | |
|
0
|
|
|
Заблокирован
|
||
| 16.11.2023, 06:45 | ||
|
0
|
||
|
Супер-модератор
3983 / 2154 / 833
Регистрация: 13.03.2010
Сообщений: 7,057
|
|
| 16.11.2023, 11:34 [ТС] | |
|
0
|
|
|
Молодой техлид)
|
|||||||||||
| 19.11.2023, 02:52 | |||||||||||
|
Не для соревнования примерно в двоее снизил время работы:
- убрал функцию swapparts теперь нет смены частей массива и копирования, вместо нее сделал валидацию устаревших занчений, смотри параметр sc - swapCount, - убрал функцию memo, теперь объекты не пересоздаются для хранения предыдущих значений, вместо этого меняются значения в существующих объектах, которые не пересоздаются - вместо array.slice выполняется цикл for (let k = 0; k < coins.length; k++) dp[imax].a[k] = prev.a[k]; - это изменение дало самый большой прирост, массивы тоже не пересоздаются, а копируются значения в существующие Асимптотическая сложность по памяти O(максимальный элемент * 2 * количество монет) Новый вариант
0
|
|||||||||||
|
Заблокирован
|
||||
| 19.11.2023, 05:45 | ||||
|
0
|
||||
|
Молодой техлид)
|
|||||||
| 19.11.2023, 11:16 | |||||||
|
Добавлено через 1 час 13 минут и еще я забыл переделать проверку на не правильные значения, она осталась от старой версии
1
|
|||||||
| 19.11.2023, 11:16 | |
|
Подсчет суммы двухбайтовых элементов массива
Подсчет суммы нечетных элементов массива Подсчет суммы отрицательных элементов массива А(10)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|