Algorithm 从两个长度为n的数字序列中找出所有可能的和,并在O(n)时间内将它们插入哈希表?
所以我想解决的问题如下: 输入是n个数字的序列{x1,x2,…,xn},另一个 n个数{y1,y2,…,yn}和一个数z的序列。你的 算法应确定是否为z∈ {xi+yj|1≤ i、 j≤ n} 。您应该使用通用哈希族和您的算法 应在预期时间O(n)内运行 提供证明您的算法正确且运行在 所需时间。非常清楚哪些定理来自类和/或 您正在使用的文本,以及如何使用 到目前为止,我已经提出了这个算法来查找所有可能的和,将它们插入哈希表,然后搜索Algorithm 从两个长度为n的数字序列中找出所有可能的和,并在O(n)时间内将它们插入哈希表?,algorithm,hashtable,time-complexity,pseudocode,Algorithm,Hashtable,Time Complexity,Pseudocode,所以我想解决的问题如下: 输入是n个数字的序列{x1,x2,…,xn},另一个 n个数{y1,y2,…,yn}和一个数z的序列。你的 算法应确定是否为z∈ {xi+yj|1≤ i、 j≤ n} 。您应该使用通用哈希族和您的算法 应在预期时间O(n)内运行 提供证明您的算法正确且运行在 所需时间。非常清楚哪些定理来自类和/或 您正在使用的文本,以及如何使用 到目前为止,我已经提出了这个算法来查找所有可能的和,将它们插入哈希表,然后搜索z: for (i in x; i++) { for (
z
:
for (i in x; i++) {
for (j in y; j++) {
sum = xi + yj;
insert_into_hash_table(T, sum);
}
}
search_hash_table(T, z);
唯一的问题是这里最坏的情况是O(n^2)
如何在
O(n)
中执行此操作=S只需将所有Yi
放在地图上
现在,一旦有了Z
:
for all values from Xi
find if Z - Xi os present in map
您可以将x的所有数字插入哈希表T,并确定(Z-y)是否在T中。 这需要X扫描和Y扫描各一次
T = set()
for x in X:
T.add(x)
for y in Y:
if (Z-y) in T:
return TRUE
这看起来像家庭作业,所以只是一个提示。也许你可以从席席和(Z—XI)的角度考虑。标题是误导的,因为这个问题不需要在Xi i和yui和哈希之间形成所有的总和。从问题陈述中可以看出是这样的。但是这不是仍然需要O(n^2)时间吗?由于最坏的情况,我们必须遍历x和y中的所有数字?@aditi-no,它需要O(N)。创建一个映射是O(n),遍历席也是O(n)。O(N)+O(N)~O(N)。希望你能理解。@aditi不。想想看。如果这没有帮助,那么手动运行一个简单的示例。x={5,10,15}y={2,4,6}z=8,z=12哦,糟糕的是!出于某种原因,我一直在考虑这个问题。这对于加法是有意义的——最高阶仍然是o(n)。谢谢你的解释:)