Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 确定一个集合中的两个数字是否等于nlgn中的x_Algorithm - Fatal编程技术网

Algorithm 确定一个集合中的两个数字是否等于nlgn中的x

Algorithm 确定一个集合中的两个数字是否等于nlgn中的x,algorithm,Algorithm,如果我自己的答案不正确,我不想要一个解决方案,因为我真的想自己解决这个问题。我想要的是一个是,这是正确的,或者一个不是,这是不正确的,然后是提示或建议,可能导致一个答案,而不会破坏它的一切 问题是: 描述一个θ(nlgn)-时间算法,给定一组n个整数和另一个整数x,该算法确定S中是否存在两个元素,其和正好是x。(算法简介,2.3-7) 尝试: 首先,问题不说明集合是否已排序。我假设它不是,并使用合并排序对它进行排序,因为在最坏的情况下它是θ(nlgn) 然后我说,好的,唯一的方法仍然是θ(nlg

如果我自己的答案不正确,我不想要一个解决方案,因为我真的想自己解决这个问题。我想要的是一个是,这是正确的,或者一个不是,这是不正确的,然后是提示或建议,可能导致一个答案,而不会破坏它的一切

问题是:

描述一个θ(nlgn)-时间算法,给定一组n个整数和另一个整数x,该算法确定S中是否存在两个元素,其和正好是x。(算法简介,2.3-7)

尝试:

首先,问题不说明集合是否已排序。我假设它不是,并使用合并排序对它进行排序,因为在最坏的情况下它是θ(nlgn)

然后我说,好的,唯一的方法仍然是θ(nlgn),如果我递归地将问题分成两部分。我的方法是从数组的索引i=0开始,看看x=i+k需要多少值k,然后使用二进制搜索将问题一分为二,直到找到k为止。如果我没有找到一个k,使得x=i+k,那么我将继续对索引i=2到n-1执行相同的过程。这将导致θ(nlgn)


如果删除常数,排序数组和查找k的总时间复杂度将加起来等于θ(nlgn)+θ(nlgn)=θ(2nlg2n)=θ(nlgn)。

是的,您的解决方案是正确的。当找到的元素
k
具有相同的索引
i

时,不要忘记处理该情况!谢谢你的提示!