【发布时间】:2015-07-10 03:47:10
【问题描述】:
我是一名正在学习编程课程数据结构和算法的学生,我需要帮助解决我似乎无法掌握的考试问题。
问题来了:
考虑以下算法 func 在给定数组 A = {a1, a2, ..., an} 上:
如果 n = 1,则返回。
如果a1 > an,则交换a1和an。
在 {a1, a2, ... ,a2n/3} 上运行 func。
在 {an/3, a(n/3)+1, ... ,an} 上运行 func。
在 {a1, a2, ... ,a2n/3} 上运行 func。
给出该算法的最坏情况运行时间的递归。
如果我的解释不清楚,这里是作业图片的链接:http://i.imgur.com/VftEgDX.png
我知道这是一个分而治之的问题,但我很难弄清楚如何解决它。
谢谢你:)
【问题讨论】:
-
因此,作为长度函数的操作数可以用递归
T(n) = 3 T(2n/3) + 1表示,基本情况为T(1) = 1。这足以让你继续前进吗? -
嗯...有点!但我真的不明白 {an/3, a(n/3)+1, ... ,an} 是如何变成 T(2n/3)..
标签: algorithm data-structures divide-and-conquer