分而治之 - 多元阵

时间:2011-03-01 14:58:35

标签: algorithm

我想设计一种算法来确定数组A是否为复数,并返回该元素。

如果数组的一半以上与x相同,则数组中存在元素x时,数组为多个。

我想知道是否有一种更有效的分而治之算法比我现在拥有的算法运行得更好。

Assume you have the array

aaabbcac

我会递归地拆分数组,直到得到大小为2的子数组,如下所示。

aa ab bc ac

从这里开始,我将比较SUBARRAY中的每个元素,看它们是否相等: 如果是EQUAL,则返回元素, 否则,返回false。

aa ab bc ac 
a  f   f  f

所以现在我有一个元素A和3的数组。

我正在考虑将它们组合起来:

a  f  f  f
  a     f  <----- combining a and f will give a
     a    <----- returns a

但是,如果我们查看数组,我们有4个A,它不符合复数数组的标准。如果数组不是复数数组,它应该返回false。

我认为我的算法将在O(n lgn)中运行,如果它是一个正确的算法,遗憾的是它不是。

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:1)

这是计算x出现次数的问题。将数组拆分为子数组,并将x与子数组一起发送。返回计数,总和计数并检查它是否大于数组的大小。

答案 1 :(得分:1)

您还可以通过某种排序算法(例如quicksort)对数组进行排序,在该循环之后直到(N + 1)/ 2元素,检查n + 1元素是否与n相同。 当使用快速排序时,这种方法将具有复杂性O(n*log n + n/2)。所以基本上我的算法将受到排序速度的限制。

答案 2 :(得分:1)

既然这是家庭作业,这里有线索 - 你应该能够轻松地证明这些并完成这个问题。

  • 单个元素数组通常具有多个元素
  • 一个数组最多只有一个复数元素,假设它存在并称之为x。
  • 如果将数组分成两半,则x将是至少一半的复数元素。