![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
3.14zDoS |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 11.11.2004 Репутация: нет Всего: нет |
Есть файл(НазваниеПредмета, Вес, Стоимость):
предмет1 1500 200 предмет2 2000 100 предмет3 1500 200 предмет4 2500 100 предмет5 1000 200 предмет6 2500 100 предмет7 1500 200 предмет8 500 100 Как наполнить StringGrid так чтобы не превышалась грузоподъемность(5000) а стоимость была максимальна. |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 13 Всего: 68 |
3.14zDoS
Это тебе в раздел алгоритмы надо. ![]() ИМХО самое простое полным перебором всех вариантов. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Нужно отсортировать по признаку цена/вес. И загружать в порядке убывания, пока не будет перегруза. А там уже напихать что помельче...
Но если предметов не так много, то действительно можно перепробовать просто все комбинации - надежней будет. |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 13 Всего: 68 |
Snowy
А вчем раздница? 3.14zDoS По любому НП полная задача, кроме как полным перебором не решается. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Если объем данных большой, то полный перебор может занять немало времени. Где-то достаточно не абсолютный вариант, а наиболее приближенный, но быстрый. Ибо перебор всех комбинаций это степень. И чем больше вариантов, тем больше времени это займет в геометрической прогрессии. А так только два прохода максимум, если не меньше. Если еще посидеть и подумать, то можно продумать еще более умный вариант. Но это нужно только если вариантов много.
|
|||
|
||||
markowww |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.2.2003 Где: В Вологде-где Репутация: нет Всего: нет |
Можно использовате перебор с возвратом. Должно выглядеть как то так (заранее извинюясь, если что напутал):
Здесь ItemSet, BestItemSet - множества, содержащие номера предметов текущей и наилучшей найденной комбинаций (set of integer); MaxWeight - максимально допустимый вес; MaxCost - цена наилучшей на данный момент комбинации. i - номер текущего предмета, nmax - количество предметов всего. CalculateWeight и CalculateCost - функции, подсчитывющие вес и цену текущей комбинации, заданной множеством ItemSet. Алгоритм таков: на некотором шаге у нас есть комбинация с допустимым весом. К этой комбинации прибавляем следующий предмет, вызывая NextItem. Если вес остался допустимым, сравниваем стоимость текущей и лучшей комбинации и циклом добавляем следующий предмет (для перебора всех возможных последовательностей), в противном случае ничего не делаем. В любом случае вычитаем добавленный предмет: ведь если вес превысил максимльный, то любая другая комбинация, содеражщая текущую недопустима, а если не превысил, то мы, вызывая NextItem в цикле, уже проверили все комбинации с текущим предметом и осталось проверить комбинации без него. Для работы запустить NextItem от номера первого элемента ( в принципе алгоритму не важно с какого номера начинается отсчет). Ну и конечно не забыть написать функции CalculateWeight и CalculateCost ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |