2014-01-13 4 views
-1

У меня есть список класса Предмет:Распределение Алгоритм

public class Item 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int ItemSize { get; set; } 
    public int? ContainerId { get; set; } 
} 

, а также класс Container

public class Container 
{ 
    public int Id { get; set; } 
    public int ContainerSize { get; set; } 
} 

Контейнер имеют максимальное значение для свойства Size. мне нужно назначить каждый объект списка в контейнер, заботясь об этих правилах:

  1. Объект элемента списка, который один и то же имя должны быть размещен на тот же контейнер. Конечно, невозможно иметь несколько предметов с тем же именем с TotalSize> Max Container Size.

  2. Я должен создать меньше possibile количество контейнеров

Любой совет высоко ценится.

+1

Так что если у вас есть несколько элементов с таким же именем, чем максимальный размером контейнера, то вы должны поместить переполненные элементы в новый контейнер или просто не заботитесь о переполнении? –

+2

вы отметили его правильно: используйте алгоритм ранца –

+0

@ AttilaBujáki У меня не может быть «переполнение». Входные данные будут предотвращать это. –

ответ

1

Разделите элементы по идентификатору контейнера и используйте алгоритм ранца для решения отдельных экземпляров проблемы.

http://en.wikipedia.org/wiki/Knapsack_problem

+0

У меня нет контейнера при запуске. Цель состоит в их создании. Может, я неправильно понял ответ? –

+0

Затем для каждого идентификатора создайте контейнер. –

Смежные вопросы