2016-11-06 5 views
1

Я сделал mergesort Python и работает нормально. И мне нужно подсчитать сравнения, когда эта сортировка слияния запущена. Я объявляю глобальную переменную merge_compare_count, потому что это рекурсивная функция. И я использую случайные числа для элементов списка A.подсчеты сравнения в mergesort

Но проблема в том, что всякий раз, когда я запускаю этот код, у меня всегда был такой же merge_compare_count. Я не знаю, почему ....

Например, когда А получил 5000 случайным образом различные элементы, но merge_compare_count всегда возвращают то же самое с 123616.

Любая помощь будет признателен !!

+0

Почему, на ваш взгляд, это проблема? –

+0

Потому что listA получил случайным образом разные числа элементов, но всегда один и тот же результат странный ... Думаю .... –

+0

Не странно. Кроме того, пожалуйста, отступом правильно и исправить ваши «500» до «5000». –

ответ

2

Это не проблема. Как это написано, ваш код просто имеет детерминированное количество этих шагов, в зависимости от размера, а не значений. Вы можете даже вычислить их следующим образом:

>>> def f(n): 
     return 0 if n < 2 else f(n/2) + f(n-n/2) + 2*n 

>>> f(5000) 
123616 
+0

или * just * over 2 xnx log2 (n), что вполне ожидаемо для алгоритма O (NlogN). –

+0

спасибо !! Я понял!! –

+0

@MartijnPieters Да, особенно для Θ (n log n). На самом деле это почти точно 2n⋅log2 (n), что неудивительно. Для полномочий 2 это точно так. –