【问题标题】:Algorithmic Strategy for selection of minimum number of baskets选择最小数量篮子的算法策略
【发布时间】:2019-05-07 23:42:18
【问题描述】:

示例: 您有 4 个名为 P、Q、R、S 的篮子。 您在名为 A、B、C、D 的篮子中有 4 件商品。

篮子的组成如下 PIC

--A B C D

P 6 4 0 7

6 4 1 1

R 4 6 3 6

S 4 6 2 3

篮子 P 有 6A、4B、No C 和 7D。

假设您收到以下请求: 你必须给出 10A、10B、3C 和 8D。

处理请求所需的最小篮子数量为 2 (P,R)。

我怎样才能通过算法达到这个目标。我应该使用什么算法,策略应该是什么?

【问题讨论】:

  • 如果您只有 4 个篮子,您可以测试所有组合。从 1 个篮子的所有组开始,如果没有解决方案,则所有 2 个篮子的组,依此类推。
  • @Vince 这只是举例,我想知道大量的篮子和物品。

标签: algorithm dynamic-programming graph-algorithm greedy


【解决方案1】:

像这样制作有向图(网络):

源具有到 P、Q、R、S 节点的成本 = 1 和容量 = 大值的边

P 的边的成本为 0,容量为 6、4、7 到 A、B、D,其他篮子相同。

A,B,C,D 具有成本=0 和容量=10,10,3,8 的边要下沉

现在解决 Minimum-cost flow problem 的 10+10+3+8 流。

【讨论】:

  • 这很好,但您应该限制 A、B、C、D => 接收器容量,因为 1 个额外的 A 无法替换 1 个缺少的 B。在此之上,一个简单的图形会很好:) .
  • 是的。我错过了需要的值。
【解决方案2】:

有一种算法可以将皇后放在棋盘的正确位置上,规则是它们不能互相威胁。你的问题看起来像我的问题。您可以创建如下递归结构:

找到满足要求的第一行:在您的示例 P 和 Q 中(因为 6+6 > 10) 因此,您处理了第一列,然后转到第二列并检查篮子 P 和 Q 的容量是否满足要求:它们在您的情况下不满足(因为 4+4

在这里回到第一步(通过增加之前显示B的指针来为第一列调用相同的递归函数)并找到满足要求的第二行。以 P 和 R 为例。 (6+4 = 10) 然后对P和R进行第二步。

所以想法是为每一列找到满足要求的篮子,然后转到第二列。如果您能找到满足要求的行,则选择 3。如果您在第 3 步中找不到行,则返回第 2 步,如果您选择的第 2 步的行组合均不符合要求,则返回首先并再次迭代。

我无法正确地给你一个伪代码,但我认为主要思想很清楚,实施起来并不难。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多