【发布时间】:2019-04-07 16:03:30
【问题描述】:
我正在尝试获取特定分治算法的复杂性,因此转置给定矩阵。
根据我一直在阅读的内容,我知道递归应该如下开始:
C(1) = 1
C(n) = 4C(n/2) + O(n)
我知道如何解决递归问题,但我不确定它是否正确。每次调用该函数时,将问题除以 2(vars fIni 和 fEnd),然后再调用另外 4 个函数。此外,最后,以 O(n²) 的复杂度调用交换,所以我很确定在上述递归中我没有考虑到这一点。
代码如下:
void transposeDyC(int **m,int f,int c, int fIni, int fEnd, int cIni, int cEnd){
if(fIni < fEnd){
int fMed = (fIni+fFin)/2;
int cMed = (cIni+cFin)/2;
transposeDyC(m,f,c, fIni, fMed, cIni, cMed);
transposeDyC(m,f,c, fIni, fMed, cMed+1, cEnd);
transposeDyC(m,f,c, fMed+1, fFin, cIni, cMed);
transposeDyC(m,f,c, fMed+1, fFin, cMed+1, cEnd);
swap(m,f,c, fMed+1, cIni, fIni, cMed+1, fEnd-fMed);
}
}
void swap (int **m,int f, int c,int fIniA, int cIniA, int fIniB, int cIniB, int dimen){
for (int i=0; i<=dimen-1; i++){
for (int j=0; j<=dimen-1; j++) {
int aux = m[fIniA+i][cIniA+j];
m[fIniA+i][cIniA+j] = m[fIniB+i][cIniB+j];
m[fIniB+i][cIniB+j] = aux;
}
}
}
我真的被递归和分而治之的复杂性所困。我不知道如何继续。
【问题讨论】:
标签: c recursion complexity-theory