Algorithm 我们能在O(n^2)中做四和运算吗?

Algorithm 我们能在O(n^2)中做四和运算吗?,algorithm,hash,time-complexity,complexity-theory,Algorithm,Hash,Time Complexity,Complexity Theory,这与以下问题有关: 不丢失一般性,只考虑偶数 k,或只是 k=4 < /代码> .< 我的问题是,在对所有数字对求和之后,是否有必要对求和列表进行排序?我知道我们可以使用左右两个指针将这两对指针夹在O(n^2)time中,但排序需要O(n^2 log(n))time 如果我们使用hashmap将和存储为键,将它们对应的索引对存储为值,那么所有操作都可以在O(n^2)时间内运行 我是不是在那篇文章中漏掉了什么东西,或者即使是k,k,sum也能在O(n^{k/2})时间内运行 谢谢 有一些微妙之处

这与以下问题有关:

不丢失一般性,只考虑偶数<代码> k<代码>,或只是<代码> k=4 < /代码> .< 我的问题是,在对所有数字对求和之后,是否有必要对求和列表进行排序?我知道我们可以使用左右两个指针将这两对指针夹在

O(n^2)
time中,但排序需要
O(n^2 log(n))
time

如果我们使用hashmap将和存储为键,将它们对应的索引对存储为值,那么所有操作都可以在
O(n^2)
时间内运行

我是不是在那篇文章中漏掉了什么东西,或者即使是
k
k
,sum也能在
O(n^{k/2})
时间内运行


谢谢

有一些微妙之处,但你是对的,决策问题的平均表现可以变得那么好。但是,它需要两个哈希映射,而不是一个

第一个hashmap位于左侧,它将存储为值
(i1,j1)
,其中
i1
j1
是可以实现该总和的最小索引

第二个hashmap位于右侧,它将存储为值
(i2,j2)
,其中
i2
i2
是可以实现该总和的最大索引

现在运行第一个hashmap的键,在另一个中查找相反的键。如果两个都在那里并且都是
j1
,那么你就有了你的四倍


然而,请注意一个微妙之处。通过排序,预期和最坏情况下的时间是
O(n^2 log(n))
。对于散列,您的预期时间是
O(n^2)
,但如果散列算法出现故障,理论上可以得到
O(n^4)
。(散列算法在实践中通常不会中断,这就是为什么我们认为它们是代码>O(1)< /代码>)< /P>是否要计算4个数的总和或打印四元组?@ Kaidul,我认为这两个应用程序的复杂性保持不变。但是假设我们想要打印所有这样的四元组。不,如果你想列出所有的四元组,复杂度会更高higher@Kaidul在hashmap中,我们可以存储所有索引对的列表,这些索引对的总和为数字。然后我们只需要从两个这样的对中列举四个,然后将它们全部打印出来。这不应该增加复杂性。@Kaa1el假设所有4个四元组都满足条件,那么就有O(n^4)个这样的四元组