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個,然後可能正第二次與第三次。 ......所以大多數人會分享空餘的 –