![]() |
|
|
![]()
|
|
| 1152010 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.11.2010 Репутация: нет Всего: нет |
А зачем? например сумма 480 первый самый большой на 450, а потом 50 варинтов пока не попадётся 20ка. Но в принцепе я так и делал, перебирал всё по очереди, но вот только замечание от skyboy очень верно подметило слабую сторону перебора всех значений. Или я не правельно понял вами написаное? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
задача такова, что решается только перебором. другое дело, что проходя, скажем, от меньшего к большему, можно откинуть и не просматривать заведомо неподходящие варианты. |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Ну в общем вот. Код написан на VBA. В MS Access 2003 на двухголовом пне 1.8 (всё равно используя только один проц) обрабатывает 10 тыщ записей за 8-10 секунд. Тыщу записей - за время менее дискретности системного таймера (55 мс).
нет проблем - оптимизируй, введи пропуск заведомо больших значений. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| 1152010 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.11.2010 Репутация: нет Всего: нет |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
5 < 10 5+4 < 10 5+4+3 > 10, возврат 5+3 < 10 5+3+2=10, решение найдено 2,3,4,5 собери 10 2 < 10 2+3 < 10 2+3+4 < 10 2+3+4+5 > 10, возврат 2+3+5=10, решение найдено возврат означает, что мы отменяем последний добавленный элемент и пробуем следующий. если следующего нет, отменяем предпоследний ну и т.д. Добавлено через 1 минуту и 13 секунд а как именно это реализуется - см. пример Akina |
|||
|
||||
| 1152010 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 6.11.2010 Репутация: нет Всего: нет |
А по какому программно логическому ходу, ты отменил 4 а не 3? Вот иммено этот момент мне интересен, как избавится от слишком громадного перебора ненузжного? Может существуют вообще функции какие-то математические, с помощью которых это можно упростить? |
|||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
косяк. я сначала должен был 2 попробовать)))
Добавлено @ 18:53
этому и служит метод ветвей и границ Добавлено @ 18:55 его мы и применяем. а уж как производить оценки, зависит от задачи а просто перебор означал бы последовательную генерацию всех подмножеств и остановку, когда сумма станет 10 Добавлено @ 18:57
5 < 10 5+4 < 10 5+4+3 > 10, возврат 5+4+2 > 10, возврат 5+3 < 10 5+3+2=10, решение найдено Это сообщение отредактировал(а) baldina - 11.11.2010, 18:58 |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Приведённый мной код именно так и работает. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |