分配与分配问题

问题描述

| 给定一个集合M,请查找是否存在一对均属于M且a + b = x的数字(a,b),其中x是先前指定的参数。该问题应使用O(n * log n)中的Divide et Impera解决。可能应将问题分成两个半个子问题,然后将结果重新组合为O(n)。 我想要给定问题的伪代码解决它的技巧。     

解决方法

        不知道这是否符合您的要求,但是: 合并集合(使用分而治之)。 从集合的第一个和最后一个元素开始,并将它们的总和与x进行比较。如果总和相等,则完成。如果总和较大,则向下移动到第二个元素;如果总和较小,则向上移动到第二个元素。 重复第二步,从排序集的两端到中心,直到找到总和为x的元素,或者不再有其他元素。 分而治之排序为O(n lg n),逐步通过排序后的集合为O(n),因此总复杂度为O(n lg n)。 Ed:x的总和,而不是M。     ,        如果对M进行排序(使用D&I在O(n log n)中进行排序),则可以在线性时间中检查是否存在一对正确的对。 (提示:两个指针)。 如果您不认为这将成为D&I解决方案,则可以将检查步骤折叠到合并的合并步骤中,如果找到匹配项,则尽早退出。 加法:如果在合并过程中进行检查,最终将执行O(n log n)的加和比较步骤,而不是O(n),但是当然,这不会使渐近运行时间恶化常数因子。