给定集合M,找出是否存在一对数字(a,b),两者都属于M,并且a + b = x,其中x是先前指定的参数。问题应该使用Divide et Impera in O(n * log n)来解决。可能问题应该分成两个半尺寸的子问题,然后将结果重新组合为O(n)。
我想要一个针对给定问题的伪代码或解决它的提示。
答案 0 :(得分:3)
不确定这是否符合您的要求,但是:
分而治之的排序是O(n lg n),通过排序集的步进是O(n),因此总复杂度为O(n lg n)。
Ed:总和到x,而不是M.
答案 1 :(得分:2)
如果你排序M(在O(n log n)中,使用D& I),你可以检查线性时间是否有一对正确的和。 (提示:两个指针)。
如果您认为这不会算作D& I解决方案,您可以将检查步骤折叠到排序的合并步骤,如果找到匹配则提前退出。
增加:如果你在组合期间进行检查,你最终会做O(n log n)加法和比较步骤而不是O(n) - 但是当然这不会使渐近运行时间恶化,除了对于常数因素。