分治算法的最坏情况运行时间

时间:2015-04-30 12:27:23

标签: algorithm data-structures divide-and-conquer

我是一名正在学习编程课程数据结构和算法的学生,我需要帮助解决一个我无法解决问题的考试问题。

问题在于:

在给定数组上考虑以下算法 func A = {a1,a2,...,an}:

  • 如果n = 1,则返回。

  • 如果a1> an,然后交换a1和a。

  • 在{a1,a2,...,a2n / 3}上运行 func

  • 在{an / 3,a(n / 3)+1,...,an}上运行 func

  • 在{a1,a2,...,a2n / 3}上运行 func

对此算法的最坏情况运行时间进行重复。

如果我的解释不清楚,可以使用指向图片的链接:http://i.imgur.com/VftEgDX.png

我知道这是一个分而治之的问题,但我很难弄清楚如何解决它。

谢谢:)

1 个答案:

答案 0 :(得分:1)

If a1 > an, then exchange a1 and an. 

这是一个常数操作 - 所以O(1)

Run func on {a1, a2, ... ,a2n/3}.

你在2n / 3上递归调用数组,所以T(2n / 3)

Run func on {an/3, a(n/3)+1, ... ,an}.
Run func on {a1, a2, ... ,a2n/3}.

与上述类似,每一个都是T(2n / 3)

这总计为T(n) = 3T(2n/3) + O(1)T(1) = O(1)

现在,我们可以使用master theorem case 1

获得一个很大的符号
log_{3/2}(3) ~= 2.7

O(1)位于O(n^2.7),因此我们可以使用该案例,并获取T(n)位于

Theta(n^log_{3/2}(3)) ~= Theta(n^2.7)