MergeSort time Сложность - O (nlgn), которая является фундаментальным знанием.Сложность пространства сортировки слиянием всегда будет O (n), в том числе с массивами.Если вы вытянете космическое дерево, то сложность пространства будет равна O (nlgn).Однако, поскольку код является кодом глубины первой, вы всегда будете расширяться только по одной ветви дерева, поэтому требуемое общее использование пространства всегда будет ограничено O (3n) = O (n).
Например, если вы рисуете космическое дерево, кажется, что оно O (nlgn)
16 | 16
/ \
/ \
/ \
/ \
8 8 | 16
/ \ / \
/ \ / \
4 4 4 4 | 16
/ \ / \ / \ / \
2 2 2 2..................... | 16
/ \ /\ ........................
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 | 16
, где высота дерева O (logn) => Пространственная сложность O (nlogn + n) = O (nlogn).Однако в реальном коде это не так, поскольку он не выполняется параллельно.Например, в случае, когда N = 16, так выполняется код для сортировки слиянием.N = 16.
16
/
8
/
4
/
2
/ \
1 1
обратите внимание, как число используемых мест равно 32 = 2n = 2 * 16 <3n </p>
Затем оно сливается вверх
16
/
8
/
4
/ \
2 2
/ \
1 1
, что34 <3н.Затем он сливается вверх </p>
16
/
8
/ \
4 4
/
2
/ \
1 1
36 <16 * 3 = 48 </p>
, затем сливается вверх
16
/ \
8 8
/ \
4 4
/ \
2 2
/\
1 1
16 + 16 + 14 = 46 <3 * n= 48 </p>
в большем случае, n = 64
64
/ \
32 32
/ \
16 16
/ \
8 8
/ \
4 4
/ \
2 2
/\
1 1
, что составляет 64 * 3 <= 3 * n = 3 * 64 </p>
.индукция для общего случая.
Следовательно, сложность пространства всегда ограничена O (3n) = O (n), даже если вы реализуете с массивами до тех пор, пока вы очищаете используемое пространство после объединения и не выполняете код впараллельно, но последовательно.
Пример моей реализации приведен ниже: