本学期我参加了算法课程,我正在尝试解决CLRS中的问题
2.3-7 描述一个theta(n lg n)时间算法,给定一组n个整数和另一个整数 整数x,确定S中是否存在两个和的元素 完全是x。
我不知道如何解决这个问题。 我试图使用合并排序算法解决它,因为它在nlogn时间内完成,但我不知道它是否是正确的方法。
任何人都可以告诉我在指定运行时间时解决算法的一般方法是什么?
感谢。
答案 0 :(得分:5)
我怀疑对于这些问题有任何一般方法,例如任何“建议算法”任务。但是,所需的运行时可以暗示要使用的“构建块”(如log
的存在通常表示需要树或排序数组)。例如,您可以查看tag wiki for 'big-o'以获取每个所需运行时的算法示例。
针对您的问题的算法思路:
首先,对数组进行排序(O(n lg n)
);然后对于数组的每个元素y
,检查元素x-y
是否存在(也是O(n lg n)
,因为数组已排序)。