使用Divide and conquer

时间:2018-05-06 04:23:03

标签: algorithm divide-and-conquer

你有一个包含n个JPEG图像的阵列A,其中一些是相同的。

您可以检查两个对象是否相等,但您无法以任何其他方式对它们进行比较 - 即。你可以检查A [i] == A [j]和A [i]!= A [j],但比较如A [i]< A [j]没有意义。

如果严格超过一半的元素彼此相等,则数组A被认为具有多数元素。

使用分而治之来提出一个O(n logn)算法来确定A是否具有多数元素。

............................................... .................................

我的解决方案: 我通过将图像数组分成两半来解决这个问题,直到有大小为1或2的数组。

如果数组的大小为1,那么我们返回该数组中存在的元素,如果它的大小为2,那么我们将比较数组的元素。如果它们相同,那么我们返回该元素,否则它不会返回。

当我们递归地向上移动树时,我们对返回的元素执行相同的操作,直到只返回一个元素为止。

我会更容易用一个例子来解释

假设数组是ABABAABA

第1步我们分成两半

[ABAB] [AABA] - > [AB] [AB] [AA] [BA]

现在,[AB]什么都不返回(因为A与B不同)

 [AB] returns nothing

 [AA] returns A

 [BA] returns nothing

因此,唯一返回的元素是A,它是多数元素。 现在,我的问题是你会发现上面的算法不适用于AAAAABBB之类的许多阵列,但我认为这不起作用只是因为A的排序和B的阵列改组会使问题消失。请告诉我,我是对的吗?

如果我的算法完全错了,那么请给出一个解决方案。

0 个答案:

没有答案