【发布时间】:2018-09-12 20:21:33
【问题描述】:
这与以下问题有关:
https://cs.stackexchange.com/questions/2973/generalised-3sum-k-sum-problem
不失一般性,我们只考虑k,或者只考虑k = 4。
我的问题是,在对所有数字求和之后,是否有必要对总和列表进行排序?我知道我们可以使用左右两个指针将两对夹在O(n^2)时间,但排序需要O(n^2 log(n))时间。
如果我们使用 hashmap 将总和存储为键,并将它们对应的索引对存储为值,那么所有操作都可以在O(n^2) 时间运行。
我在那篇帖子中遗漏了什么,或者即使k、k-sum 也可以在O(n^{k/2}) 时间运行?
谢谢!
【问题讨论】:
-
您要计算 4 和的数量还是打印四倍?
-
@Kaidul 我认为这两个应用程序的复杂性保持不变。但是假设我们要打印所有这样的 4 元组。
-
不,如果要列出所有的四元组,复杂度会高很多
-
@Kaidul 在哈希图中,我们可以存储总和为数字的所有索引对的列表。然后我们只需要从两个这样的对中枚举四倍来将它们全部打印出来。这不应该增加复杂性。
-
@Kaa1el 假设所有 4 个四元组都满足条件,那么就有 O(n^4) 个这样的四元组
标签: algorithm hash time-complexity complexity-theory