【问题标题】:Algorithm for jugs? [closed]水壶的算法? [关闭]
【发布时间】:2014-03-12 18:10:56
【问题描述】:

我正在尝试提出一种适用于以下情况的算法:

  1. 无限的水壶列表
  2. 每个水壶都有最大容量。
  3. 目标是让一定数量的 (x) 成为其中之一。

这是一个例子:

Jug 1 = 10 capacity
Jug 2 = 4 Capacity
Jug 3 = 2 capacity

目标是在任何一个罐子里放 8 个

我需要确定它是否可能,如果可能,我需要提供我使用的移动顺序。请记住,我有无限的水壶,“目标”由用户确定。

【问题讨论】:

  • 这是来自编程竞赛的问题吗?我只是想问一下,所以我可以这样标记它。我还将删除语言标签,因为您的问题本质上与语言无关
  • 另外,您没有提出问题。如果问题中没有问号,总是很可疑
  • 实际上这听起来更像是一个算法类的作业。你能告诉我们你尝试了什么吗?
  • 您好,它是针对编程问题的,而不是专门针对竞赛的。我在问解决问题的算法是什么。
  • 看,这就是我要这个的原因。我假设您的意思是:我可以将任何水罐装满液体。除了给我的水壶之外,我没有其他方法可以测量液体。由于我不能在不装满水罐的情况下测量液体,所以问题是如何使用提供的水罐在水罐中获取 8 升液体。例如,给定容量为 10 升、4 升和 2 升的水罐,我首先将 10 水罐装满,然后将 10 水罐中的液体注入 2 水罐,在 10 水罐中留下 8 水。 但是你没有指定这个。你假设人们理解你的意思

标签: algorithm language-agnostic


【解决方案1】:

可能有更有效的方法,但我会选择某种breadth-first search (BFS)

开始时所有水壶都是空的。

在每个步骤中,尝试将每个(未满的)水罐装满,并尝试将其中一个非空水罐中的所有水转移到另一个水罐中(直到该水罐已满或我们用完了water) - 这些动作中的每一个都可以被认为是当前状态(或节点)与另一个状态(或节点)之间的边缘 - 如果您熟悉 BFS,这应该是有意义的。

继续直到我们在其中一个罐子中获得目标数量。

示例:

我们有尺寸为 10、4 和 2 的水壶,所需数量为 8。

所以我们从一个包含一个元素的队列开始(这在 BFS 中很典型),所有的水壶都是空的:

{(0/10, 0/4, 0/2)}

然后我们尝试填满每个罐子,在队列中创建 3 个元素:

    fill up 10         fill up 4         fill up 2
{(10/10, 0/4, 0/2), (0/10, 4/4, 0/2), (0/10, 0/4, 2/2)}

然后我们取(10/10, 0/4, 0/2),尝试将 4 和 2 填满,并尝试将水从 10 转移到其他水壶中,创建以下元素:

    fill up 4          fill up 2      transfer 10 to 4  transfer 10 to 2
(10/10, 4/4, 0/2), (10/10, 0/4, 2/2), (6/10, 4/4, 0/2), (8/10, 0/4, 2/2)

然后将其添加到队列中:

{(0/10, 4/4, 0/2), (0/10, 0/4, 2/2), (10/10, 4/4, 0/2), (10/10, 0/4, 2/2), (6/10, 4/4, 0/2), (8/10, 0/4, 2/2)}

以此类推,直到我们在其中一个罐子中获得所需的数量(实际上我们已经用 (8/10, 0/4, 2/2) 获得了)。

【讨论】:

  • 看起来这会随着水壶的数量而爆炸,但是,OP没有指定任何输入限制
  • 如果第一个罐子(它们可以按任何顺序)装满怎么办?这会大大改变算法吗?
  • @user3220348 开始状态只会改变你在队列中开始的元素 - 所以你将以(10/10, 0/4, 0/2)而不是(0/10, 0/4, 0/2)开始。如果你从罐子里的所有液体开始,而不是有一些无限的液体来源,你将跳过“尝试填满每个(非满的)罐子”步骤,因为这是假设采取的来自那个来源的水,然后它应该可以完美地工作。
  • @user3220348:请以易于理解的形式重申您的问题,并包含所有信息,特别是开始状态是什么,您可以拥有多少个水壶以及允许您执行哪些动作。否则你只是在浪费大家的时间
猜你喜欢
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2012-12-31
相关资源
最近更新 更多