2012-03-10 65 views
0

首先,是它的硬件 - 真的尽力了,但不知道的东西,所以生病很高兴,如果你能帮助我:)递推公式

我有这样的代码:

我需要给这个编码一个recusive公式。 我做的是 - 第一次递归调用是T(n/2)。 第二 - 这是问题!真的很混淆,加上'p'...是那个 T(n/2)呢? 三 - 对THETA运行(N) 和外面递归调用是T(N)...

你能帮我到最后的公式?

感谢

+0

它应该怎么做?问题是什么? – 2012-03-10 11:25:45

+0

我需要找到recusive公式(T(n)= ???) 不知道如何处理第二次递归调用... – Nusha 2012-03-10 11:26:28

+0

如何使用“分步示例”? 尝试不同的变量的值,并检查每个和其中一个结果是什么 – 2012-03-10 11:28:17

回答

1

如果我正确地阅读它,您希望重现运行时复杂性。

对于n > 1,你有复发参数floor(n/2)与参数n-floor(n/2),之后你输出n项目。因此你有

T(n) = T(cost of first recursive call) + T(second rec. call) + extra work 

你现在应该带入一个适用于主定理的形式。

+0

嗨丹尼尔,没错,我得到了:T(n/2)+ T(n/2)+ n ??? 只是不确定第二个记录电话! – Nusha 2012-03-10 12:03:28

+0

严格来说,你会得到'T(floor(n/2))+ T(ceiling(n/2))+ n'。如果你把它变成'2 * T(n/2)+ n',你应该准备好证明它的合理性(不要太难,先用软件,然后用这个结果作为理由)。 – 2012-03-10 12:07:16

+0

非常感谢! – Nusha 2012-03-10 12:12:06

0

这可能是一个有趣的问题或者您误解了问题。你有什么一个递归公式。你需要将这个公式从C++切换到更传统的数学符号吗?需要找到一个非递归算法?在你回答这个问题时,T是什么?术语公式在这里并不适用,因为没有任何东西被计算出来。这是一个永不修改给定数组的无效函数。发生的所有事情都是按照某种顺序将数组中的某些元素放到屏幕上的。

我会从追踪示例开始,了解发生了什么。 比方说A = {1,2,3,4}然后“FUNC(A,0,4)”是:

tracing func(A,0,4) : 
p = 2 
func(A,0,2) 
func(A,2,2) 
cout << 1 2 3 4 

tracing func(A,0,2) : 
p = 1 //start=0; n=2 
func(A,0,1) 
func(A,1,1) 
cout << 1 2 

tracing func(A,2,2) : 
p = 1 //start=2; n=2 
func(A,2,1) 
func(A,3,1) 
cout << 3 4 

tracing func(A,2,1) : 
p = 0 //start=0; n=1 
func(A,0,0) 
func(A,0,1) 
cout << 1 

tracing func(A,3,1) : 
p = 0 //start=3; n=1 
func(A,3,0) 
func(A,3,1) 
cout << 3 

tracing func(A,2,1) : 
p = 0 //start=0; n=1 
func(A,0,0) 
func(A,0,1) 
cout << 1 

在这一点上,我要停下来,因为这是你的家庭作业的问题。你可以从这里完成它。