选择最小篮数的算法策略

时间:2018-12-06 09:54:06

标签: algorithm dynamic-programming graph-algorithm greedy

示例: 您有4个名为P,Q,R,S的购物篮。 您在这些购物篮中有4个商品,分别为A,B,C,D。

篮子的组成如下 PIC

- A B C D

P 6 4 0 7

Q 6 4 1 1

R 4 6 3 6

S 4 6 2 3

篮子P具有6A,4B,无C和7D。

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

处理请求的最小购物篮数量为2(P,R)。

如何通过算法实现这一目标。我应该使用什么算法,应该采取什么策略?

2 个答案:

答案 0 :(得分:2)

使有向图(网络)像这样:

enter image description here

源具有成本= 1,容量= P,Q,R,S节点的最大价值的边缘

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流量。

答案 1 :(得分:0)

有一种算法可以将皇后放在棋盘上的正确位置,并且规则是他们不得互相威胁。您的问题对我来说就像那样。您可以创建如下的递归结构:

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

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

因此,想法是在每一列中找到符合要求的篮子,然后转到第二列。如果找到符合要求的行,则继续执行3。如果在第三步中找不到行,则返回第二步;如果在第二步中选择的行的组合均不符合要求,则再次返回。首先并再次进行迭代。

我不能正确地给你一个伪代码,但是我认为主要思想很明确,并且很难实现。