トップダウン マージ ソートでは、再帰関数は次のように呼び出されます。
void mergesort(Item a[], int l, int r) {
if (r <= l) return;
int m = (r+l)/2;
mergesort(a, l, m);
mergesort(a, m+1, r);
merge(a, l, m, r);
}
この戦略の空間複雑度は O(n) であると教科書に記載されています。一方、再帰をよく見ると、再帰呼び出しで配列へのポインターを渡しています。2 番目に、最下位ノードを親ノードにマージすることにより、トラバーサルの前の順序で再帰が解決されます。そのため、毎回スタック上に O(logn) 個の変数 (またはスタック上に O(log n) 個のフレーム) があります。では、インプレース マージ技術があるにも関わらず、空間の複雑さが O(n) であるのはどうしてでしょうか?