有一段时间,我的妻子把我送到一家真正的超市,有一个购物清单(她给我写了一张纸,或者给我留言)。
我想知道是否有一种快速填充清单的方法,而不是几十遍整个超级迭代,直到我相信我已经拥有了所有东西。
(我发现这个问题在生活中非常有用:pair-socks-from-a-pile-efficiently,希望我能在自己的情况下使用社区的帮助)
我不知道/记住每个项目在超市中的位置,我给出的列表从未排序(例如,蔬菜列在整个列表中,而不是一个接一个地列出)。此外,通常我会连续收到包含越来越多物品的短信,而我仍然在超级。
我的方法是计划一条路径,以确保我迭代整个超市,并在走这条路时从列表中选择项目。
(n)
中的foreach项目我通过:检查我的列表中是否有这样的项目(m),会给我一个O(n*m)
同谋,但不是这样高效。(p)
:站在每行的开头我可以阅读标志或查看我应该在哪里找到的项目,而不是迭代我的列表,试图记住所有项目列表我应该在那一行找到。走这一行并将这些项目添加到我的购物车,应该给我O(p*m)
同谋。
但这从来没有真正发生:我记不清我列表中的四个项目中的三个以上我希望在那一行中找到,即使我这样做,我经常忘记一个项目并且有再次使用此算法(让我们说q
次),来自:O(q*p*m)
。我想补充一些评论:
(v)
中添加了各种蔬菜。当然我不记得所有那些蔬菜,而不是停在市场上的每种蔬菜旁边(或者我应该?),检查我是否已经把它放在我的清单中。