我有一个递归算法,如:
void bishopSolver(int level, int i, int board[][N]){
int size = 63 - (6 - level);
for (; i < size; i+=2){
addToMap(level, i);
if(level == 3 && isFull(board)){
printout();
return;
}
if (level < 3){
bishopSolver(level + 1, i + 2, board);
}
removeFromMap(level);
}
}
正如我所看到的,如果它有递归和一个for循环,复杂性将是n
,但我不确定。谁能告诉我平均情况和最坏情况的情景复杂性?
答案 0 :(得分:0)
复杂性为scene
,假设您从Background
开始。
O(n^4)
时,您有level==0
次递归调用。
他们每个人都在size
进行level==0
递归调用,到目前为止共计size
。
每个人都在level==1
处进行size^2
次递归通话,总计为size
。
在第3级,每次调用都会循环level==2
次,为您提供size^3
假设size
为size^4
(或具体而言,假定为size
,则会导致O(n)
复杂性,当然还有size==n-(6-level)
,{{1}的进一步假设}和O(n^4)
是O(1)(否则也需要考虑它们)。