C 递归插入排序的运行时间的递归
目前,我被指派编写插入排序算法的递归版本。我做到了。事实上,这是:C 递归插入排序的运行时间的递归,c,relation,recurrence,insertion-sort,C,Relation,Recurrence,Insertion Sort,目前,我被指派编写插入排序算法的递归版本。我做到了。事实上,这是: void recursiveInsertionSort(int* inputArray, int p, int q) { while (q > p) { recursiveInsertionSort(inputArray, p, q-1); if (inputArray[q-1] > inputArray[q]) { int temp = inputArray
void recursiveInsertionSort(int* inputArray, int p, int q)
{
while (q > p)
{
recursiveInsertionSort(inputArray, p, q-1);
if (inputArray[q-1] > inputArray[q])
{
int temp = inputArray[q];
int temp2 = inputArray[q-1];
inputArray[q] = temp2;
inputArray[q-1] = temp;
q--;
}
}
}
我的问题有两方面。首先,我不确定我提出的递归关系是否正确。我想出了
T(n) = T(n-1) + T(n^2)
作为我的重复关系。是这样吗?我在那和那之间跳来跳去
T(n) = T(n^2)
第二,我应该用代数来证明这一点
f(n) = ((n+1)n / 2)
解这个递归关系。我很难做到这一点,因为a.我不确定我的重复是否正确,B.我有时在数学方面很糟糕
如果您能在任何问题上提供帮助,我们将不胜感激
谢谢
好吧,我在一位数学教授的帮助下设法弄明白了:p我将把这个放在这里,让其他人知道怎么做。有人应该抄写这个作为答案:D
所以这个的递推关系应该是T(n)=T(n-1)+n,而不是我原来的,这是主要的问题。为什么?这是做递归回程所需的时间,它是n-1,因为如果你去n,你将只有一个元素,并且已经排序好了。加上执行一次插入或一次实际排序所需的时间
之所以是n,是因为当你到达那里的时候,你在检查一个数字,与它之前的每一个数字,恰好是n次
现在你如何证明函数f(n)解T(n)
我们知道f(n)解T(n)。这意味着你可以做到:
We know that f(n) is equal to (n(n+1))/2 . So if T(n) is equal to T(n-1) + n, that means we take away 1 from every n in f(n) and then plug that into T(n).
That gives us T((n+1-)n-1)/2)) + n . That simplifies to T((n(n-1)/2) + n. Take that + n thats out there and multiply it by 2/2 to be able to have it all over a common denominator. Giving you (n^2 - n + 2n)/2 . Simplifies down to ((n^2) + n)/2 which further simplifies to, if you factor out an n, (n(n+1))/2. Which is f(n).
呜 平方从何而来?当输入已排序时,此函数是否终止?在我看来,
inputArray[q-1]
将小于inputArray[q]
,而q将在做同样事情的另一个循环中保持不变。在我的大脑中是这样的。Q>P检查应该在函数全部排序后终止该函数,因为每次调用Q时Q都会递减。我想不管怎样,如果我错了,请告诉我。我一直在试图找出这个递归关系和函数,我可能忽略了一些东西。@neojb1989我看到代码的问题是q没有递减的情况。无论是排序的大小写,还是相反的大小写,都会使q保持不变(因为q--
在if
块中),所以循环会无限期地重复相同的q值。问题是,保持这种状态意味着问题仍然存在。您最终应该使用下面的“回答”按钮回答您自己的问题,这样它就会关闭,删除该问题,这样人们就不会一直在这里结束,或者希望其他人标记它已关闭,以便为您清理。平方从何而来?当输入已排序时,此函数是否会终止?在我看来,inputArray[q-1]
将小于inputArray[q]
,而q将在做同样事情的另一个循环中保持不变。在我的大脑中是这样的。Q>P检查应该在函数全部排序后终止该函数,因为每次调用Q时Q都会递减。我想不管怎样,如果我错了,请告诉我。我一直在试图找出这个递归关系和函数,我可能忽略了一些东西。@neojb1989我看到代码的问题是q没有递减的情况。无论是排序的大小写,还是相反的大小写,都会使q保持不变(因为q--
在if
块中),所以循环会无限期地重复相同的q值。问题是,保持这种状态意味着问题仍然存在。你最终应该使用下面的回答按钮来回答你自己的问题,这样它就会关闭,删除问题,这样人们就不会一直在这里结束,或者希望其他人标记它关闭,以便为你清理。