一段时间以来,我一直在试图了解复发的本质。我特别想知道递归函数(T(n))是如何产生的。例如在mergesort中,可以说时间复杂度可以说是T(n)= 2T(n / 2)+ cn。我看不到这与合并排序中的递归调用之间的联系。
我了解掌握理论的概念。 a应该是递归调用的数量,b应该是每个调用中输入缩小的因数,d是递归算法之外完成的工作。鉴于该算法完成的所有工作都是由其中一个递归调用以某种方式生成的,我只是不知道如何在mergesort中完成任何工作。
slice1 = Arrays.copyOfRange(u_arr, 0, half); // this takes O(n) time, better method?
slice2 = Arrays.copyOfRange(u_arr, half, u_arr.length);
arr1 = this.mergesort(slice1);
arr2 = this.mergesort(slice2);
return this.merge(arr1, arr2);
}
不包括基本情况,一些初始化和合并功能,如何在递归调用之外完成此算法完成的任何工作?而且,鉴于可以确定递归调用之外的运行时间,那么递归是否实质上只是一个模板函数来插入分治算法的特征,例如T(n / b)+ O(n ^ d)?给定适当的a,b和d。