Чтобы понять, что означает O (log (n)), вы можете прочитать Big O notaion . В итоге это означает, что если ваш набор данных увеличится в 1024 раза, время выполнения будет только в 10 раз больше (или меньше) (для базы 2).
MergeSort работает в O (n * log (n)), что означает, что это займет 10 240 раз дольше. Bubble sort выполняется в O (n ^ 2), что означает, что это займет 1024 ^ 2 = 1 048 576 раз дольше. Так что на самом деле есть время, чтобы безопасно:)
Чтобы понять вашу сумму, вы должны посмотреть на алгоритм слияния в виде дерева:
sort(3,1,2,4)
/ \
sort(3,1) sort(2,4)
/ \ / \
sort(3) sort(1) sort(2) sort(4)
Сумма повторяется по каждому уровню дерева. k = 0 - вершина, k = log (n) - нижняя часть. Дерево всегда будет иметь высоту log2 (n) (так как это сбалансированное двоичное дерево ).
Чтобы немного подсчитать:
Σ 2^k * 2(n/2^k) =
2 * Σ 2^k * (n/2^k) =
2 * Σ n*2^k/2^k =
2 * Σ n =
2 * n * (1+log(n)) //As there are log(n)+1 steps from 0 to log(n) inclusive
Это, конечно, много работы, особенно если у вас есть более сложные алгоритмы. В таких ситуациях вы по-настоящему счастливы за Основную теорему , но на данный момент она может просто запутать вас. Это очень теоретически, так что не волнуйтесь, если не поймете это сразу.