1

我一直在解决这个问题(https://github.com/alexpchung/File-Distribution-Planning/blob/master/README.pdf),我需要找到一个最佳的解决方案,将文件放置在节点。最佳的解决方案,以适应多个容量袋

这里是我的算法,我都用至今

  • 说节点的数量是N.

    通过 为每个节点可迭代文件大小的
  • 跟踪每一个文件,它有ñ选择去(假设文件等适合)

  • 递归评估每

我想过的另一个解决方案是遍历每个节点并做一个背包0/1。不幸的是,我感到震惊,因为节点大小不固定,这将是一个不正确的解决方案。

如果你有任何的指针会很棒。

谢谢。

回答

0

也许你可以基准是:

  • 排序两个列表(容量,大小,所有增加)

  • 从最大的文件开始。

  • 也从最大节点开始。
  • 检查它是否符合
    • 真:把它放在
    • 错误:因为没有更大的节点存在把它“不合格”名单。
  • 如果选择(最大)结满了,下一次迭代小节点
  • 迭代到下一个更小的文件。
  • 回去检查步骤,直到分配
    • 所有文件真实条件之一,空节点存在
    • 所有节点充分,存在未放置的文件
  • (*)排序仅在节点上的空的空间(空节点存在=真或两者真)
    • 重复节点列表以相反的顺序
        0123如果
      • 检查“最新添加的文件”对最“空的空间” d能适应最大的“空的空间” d节点,如果过渡收益率等于/平衡空白处都
        • 真:发送文件到该节点
        • 错误:迭代下一个“至少空的空间”节点上,因为该文件不适合别人neighter
      • 迭代两个列表(并从列表中删除精对)
  • 如果至少1个文件能被提炼,去(*)
+0

能否请您解释一下这一步。 _(*)排序仅在他们的空余空间节点(空节点存在= true或两者真) _复制与相反的顺序 -check节点列表,如果“最新添加的文件”对最“空的空间” d能适应最大“空的空间” d节点,如果转换率上都 真正的平等伙伴/平衡空白处:将文件发送到该节点 假:反覆下一个“至少空的空间”节点,因为该文件不适合别人neighter _既重复列表(从列表中删除精对) _如果至少1个文件能被提炼,去(*) – knightcoder1108

+0

结合第一点与最后一个,那么很可能第n-1与第2个,然后可能正第二次与第三次。 ......所以大多数人会分享空余的 –