【发布时间】:2014-12-04 11:29:00
【问题描述】:
我有几个不同大小的列表,列表的每个索引都包含一个键和一个对象:list1.add('Key', obj)。
所有列表都已排序。
我的目标是遍历列表,并使用键将列表 2、3、4 或 n 中的 1 个或多个项目与 mainList 中的项目匹配。
目前我在做一些事情:
for i to list1 size
for j to list2 size
if list1[i] = list2[j]
do stuff
当我遍历 I'm 时,使用布尔值快速退出,使用 if current != 先前的检查,我正在从列表中删除对象。
它工作正常,但我现在有另一个需要匹配的列表,之后可能还有另一个 n 列表。列表大小不同。
我可以看到的 2 个选项是在更改内部列表的情况下多次重复上述代码段 - 我不喜欢这种方法。
另一种选择是扩展上述内容,一旦完成一个内循环,就进入下一个:
for i to list1 size
for j to list2 size
if list1[i] = list2[j]
do stuff
for k to list2 size
if list1[i] = list2[k]
do stuff
我认为我认为第二个更有效的想法是正确的,但我不确定。还有,有没有更好的办法?
感谢您的任何建议/帮助。
【问题讨论】:
-
它们的时间复杂度相同。第一个选项是
O(i*j) + O(i*k),第二个是O(i*(j+k))。 -
@Barmar :谢谢。那么复杂度是 n^2 吗?我认为在某些情况下,它可能会有所改进,但复杂性分析不是我的强项:)
-
这个问题似乎是题外话,因为 cs.stackexchange.com 是解决此类问题的更好地方。
-
@Barmar :谢谢,我没有意识到它会被视为离题。除非您想根据评论发布答案,否则我现在将其移动
标签: algorithm list loops time-complexity