Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлом 
:(
    Опции темы
3.14zDoS
Дата 1.12.2004, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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) а стоимость была максимальна.
PM MAIL   Вверх
~FoX~
Дата 2.12.2004, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



3.14zDoS
Это тебе в раздел алгоритмы надо. smile
ИМХО самое простое полным перебором всех вариантов.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Snowy
Дата 2.12.2004, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Нужно отсортировать по признаку цена/вес. И загружать в порядке убывания, пока не будет перегруза. А там уже напихать что помельче...
Но если предметов не так много, то действительно можно перепробовать просто все комбинации - надежней будет.
PM MAIL   Вверх
~FoX~
Дата 2.12.2004, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Snowy
А вчем раздница?

3.14zDoS
По любому НП полная задача, кроме как полным перебором не решается.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Snowy
Дата 6.12.2004, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Если объем данных большой, то полный перебор может занять немало времени. Где-то достаточно не абсолютный вариант, а наиболее приближенный, но быстрый. Ибо перебор всех комбинаций это степень. И чем больше вариантов, тем больше времени это займет в геометрической прогрессии. А так только два прохода максимум, если не меньше. Если еще посидеть и подумать, то можно продумать еще более умный вариант. Но это нужно только если вариантов много.
PM MAIL   Вверх
markowww
Дата 7.12.2004, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.2.2003
Где: В Вологде-где

Репутация: нет
Всего: нет



Можно использовате перебор с возвратом. Должно выглядеть как то так (заранее извинюясь, если что напутал):
Код

procedure NextItem(i: integer);
var Weight, Cost, j: integer;
begin
  ItemSet:= ItemSet + [i];
  Weight:= CalculateWeight;
  if Weight <= MaxWeight then begin
     Cost:= CalculateCost;
     if Cost > MaxCost then begin
        MaxCost:= Cost;
        BestItemSet:= ItemSet;
     end;
     for j:= i + 1 to nmax do
        NextItem(j);
  end;
  ItemSet:= ItemSet - [i];
end;


Здесь ItemSet, BestItemSet - множества, содержащие номера предметов текущей и наилучшей найденной комбинаций (set of integer); MaxWeight - максимально допустимый вес; MaxCost - цена наилучшей на данный момент комбинации. i - номер текущего предмета, nmax - количество предметов всего. CalculateWeight и CalculateCost - функции, подсчитывющие вес и цену текущей комбинации, заданной множеством ItemSet.

Алгоритм таков: на некотором шаге у нас есть комбинация с допустимым весом. К этой комбинации прибавляем следующий предмет, вызывая NextItem. Если вес остался допустимым, сравниваем стоимость текущей и лучшей комбинации и циклом добавляем следующий предмет (для перебора всех возможных последовательностей), в противном случае ничего не делаем. В любом случае вычитаем добавленный предмет: ведь если вес превысил максимльный, то любая другая комбинация, содеражщая текущую недопустима, а если не превысил, то мы, вызывая NextItem в цикле, уже проверили все комбинации с текущим предметом и осталось проверить комбинации без него.

Для работы запустить NextItem от номера первого элемента ( в принципе алгоритму не важно с какого номера начинается отсчет). Ну и конечно не забыть написать функции CalculateWeight и CalculateCost smile

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0744 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.