分而治之 - 比较

时间:2010-12-08 21:03:31

标签: algorithm divide-and-conquer

如果使用分而治之算法,我是否能够找到数组中至少一半的对象是否返回true(在某些函数上)?对象没有可枚举的值,因此对象A绝不比对象B大。

澄清一下,使用该函数将所有对象相互比较。所以funct(Obj a,Obj b)根据某些标准返回true或false。它们可以聚集在一起,我们只想知道至少有一半的比较对象是否返回true。

2 个答案:

答案 0 :(得分:1)

你为什么要用分而治之?当使用普通算法'迭代和计数'时,回答你的问题看起来是O(n)......并且你不可能知道一半的对象将使用任何检查少于O(n / 2)个对象的算法返回true,与O(n)相同。

编辑:好的,编辑显示它不是您正在申请的谓词。所以我的答案不适用。我仍然不明白你如何真正定义'对象的一半返回true'。他们回归真实相比什么?我们所拥有的是n**2对(可能更少,不清楚一个对象是否可以与自身进行比较)。你的意思是当应用比较函数时,n**2对中有一半返回true吗?

如果是这样,与上一个非常类似的推理将得出结论,你注定要失败并且不能比O(n**2)

做得更好

答案 1 :(得分:0)

取决于很多事情:

有多少个物品? 他们订购了吗? 你用的是什么语言? 这是什么机器运行?

我会说,如果你有很多项目,随机排序,在一台机器上,那些进程将从线程中受益,创建一些线程并为每个线程分配一大块数据。一旦获得通过次数或失败次数超过对象数量的一半,就可以得到答案。