Algorithm 从两个长度为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 (

所以我想解决的问题如下:

输入是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 (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)。谢谢你的解释:)