访问带有购物清单的超市,以最快的方式获取所有商品?

时间:2015-06-11 19:06:30

标签: algorithm list matching

有一段时间,我的妻子把我送到一家真正的超市,有一个购物清单(她给我写了一张纸,或者给我留言)。

我想知道是否有一种快速填充清单的方法,而不是几十遍整个超级迭代,直到我相信我已经拥有了所有东西。

(我发现这个问题在生活中非常有用:pair-socks-from-a-pile-efficiently,希望我能在自己的情况下使用社区的帮助)

  

我不知道/记住每个项目在超市中的位置,我给出的列表从未排序(例如,蔬菜列在整个列表中,而不是一个接一个地列出)。此外,通常我会连续收到包含越来越多物品的短信,而我仍然在超级。

我的方法是计划一条路径,以确保我迭代整个超市,并在走这条路时从列表中选择项目。

我想到的两种方式:

  1. 超级(n)中的foreach项目我通过:检查我的列表中是否有这样的项目(m),会给我一个O(n*m)同谋,但不是这样高效。
  2. 将商店“划分”为行(p):站在每行的开头我可以阅读标志或查看我应该在哪里找到的项目,而不是迭代我的列表,试图记住所有项目列表我应该在那一行找到。走这一行并将这些项目添加到我的购物车,应该给我O(p*m)同谋。 但这从来没有真正发生:我记不清我列表中的四个项目中的三个以上我希望在那一行中找到,即使我这样做,我经常忘记一个项目并且有再次使用此算法(让我们说q次),来自:O(q*p*m)
  3. 我想补充一些评论:

    1. 例如,当我到达蔬菜区时,我发现自己多次经过该部分,因为我的妻子是一位出色的厨师,并在列表(v)中添加了各种蔬菜。当然我不记得所有那些蔬菜,而不是停在市场上的每种蔬菜旁边(或者我应该?),检查我是否已经把它放在我的清单中。
    2. 将我放入购物车中的每件商品(或者制作一份包含我还没有的所有商品的新列表)对我来说非常费时,所以我宁愿每次都浏览整个列表试着找出是否还有一件物品要添加到我的购物车中。
    3. 另一个案例是您在开始家庭度假之前第二次进入汽车。你记得你忘记了这一点,然而,跑回你的房子,得到一些这些物品,忘记其他人并再次回去。这是一个类似的案例吗?

1 个答案:

答案 0 :(得分:0)

查找重新排列时间here,我最初想要花点时间来映射您常用的项目将毫无用处。 (他们经常安排过道)。

对于那条路上的任何想法 - 不会起作用......