【问题标题】:Distribution Algorithm分配算法
【发布时间】:2014-01-13 11:53:30
【问题描述】:

我有一个类项目列表:

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; }
}

容器具有属性大小的最大值。 我需要将 List 的每个对象分配给一个容器,注意以下规则:

  1. 具有相同名称的列表项对象必须放在同一个容器上。当然TotalSize > Max Container Size 不可能有多个同名的Item。

  2. 我必须创建尽可能少的容器

非常感谢任何建议。

【问题讨论】:

  • 所以如果你有更多的同名项目超过了最大容器大小,那么你应该把溢出的项目放入一个新的容器中,还是不关心溢出?
  • 你标记对了:使用背包算法
  • @AttilaBujáki 我不能有“溢出”。输入数据会阻止它。
  • 尽可能少的容器数?简单 - 创建一个容器大小为MyListItemList.Count 的容器并将所有内容放入其中。你的两个条件都满足了。我猜虽然这不是完整的问题,实际上你得到了一组具有固定大小的容器,以......
  • @Mashton 一个容器有一个 ContainerSize 属性的最大值

标签: c# algorithm list grouping knapsack-problem


【解决方案1】:

按容器 ID 拆分项目,并使用背包算法解决单独的问题实例。

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

【讨论】:

  • 我一开始没有容器。目标是创造它们。也许我误解了答案?
  • 然后为每个出现的ID创建一个容器。
猜你喜欢
  • 2021-10-15
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 2016-02-15
  • 2013-05-18
相关资源
最近更新 更多