Подсчитать количество операций для алгоритма сортировки - PullRequest
1 голос
/ 05 сентября 2010

Это мой вопрос о задании: объясните на примере быструю сортировку, сортировку слиянием и сортировку кучи.далее посчитать количество операций каждым из этих методов сортировки.

Я не понимаю, что именно я должен ответить в контексте «подсчитать количество операций»?

Iнашли что-то в книге coremen в главе 2, они объяснили, как вставки сортируют время выполнения алгоритма, вычисляя время выполнения каждого оператора ....

Должен ли я делать аналогичным образом?

Ответы [ 3 ]

1 голос
/ 05 сентября 2010

Для подсчета количества операций также известно как analyze the algorithm complexity.Идея состоит в том, чтобы иметь общее представление о том, сколько операций в худшем случае необходимо для выполнения алгоритма на входе размера N, что дает верхнюю границу вычислительных ресурсов, необходимых для этого алгоритма.И поскольку каждая операция сама по себе (например, умножение или сравнение) является конечной операцией и требует детерминированного времени (даже если она может быть разной на разных машинах), чтобы понять, насколько хорош или плох алгоритм, особенно по сравнению сдругие алгоритмы, все, что вам нужно знать, это приблизительное количество операций.

Вот пример с пузырьковой сортировкой.Допустим, у вас есть массив из двух чисел.Для сортировки вам нужно сравнить оба числа и, возможно, обменять их.Поскольку сравнение и обмен являются отдельными операциями, точное время их выполнения минимально и само по себе не важно.Таким образом, можно сказать, что при N = 2 количество операций составляет O (N) = 1.Однако для трех чисел вам понадобятся три операции в худшем случае - сравните первую и вторую и, возможно, обменяйте их, затем сравните второе и третье и обменяйте их, затем снова сравните первую со второй,Продолжая обобщать пузырьковую сортировку, вы обнаружите, что потенциально для сортировки N чисел необходимо выполнить N операций для первого числа, N-1 для второго и так далее.Другими словами, O (N) = N + (N-1) + ... + 2 + 1 = N * (N-1) / 2, что для достаточно большого N можно упростить до O (N) = N^ 2.

Конечно, вы могли бы просто обмануть и узнать в сети число O (N) для каждого из трех алгоритмов сортировки, но я бы настоятельно призвал вас потратить время и попытаться найтисначала с этим номером.Даже если вы ошиблись, сравнение вашей оценки и того, как вы ее получили, с фактическим способом оценки их сложности поможет вам лучше понять процесс анализа сложности конкретного программного обеспечения, которое вы пишете в будущем.

0 голосов
/ 05 сентября 2010

Я думаю, что это задание, чтобы дать вам представление о том, как вычисляется сложность алгоритма. Например, алгоритм пузырьковой сортировки имеет сложность O (n ^ 2).

// Bubble sort method.
// ref: [http://www.metalshell.com/source_code/105/Bubble_Sort.html][1]
for(x = 0; x < ARRAY_SIZE; x++)
  for(y = 0; y < ARRAY_SIZE-1; y++)
  if(iarray[y] > iarray[y+1]) {
    holder = iarray[y+1];
    iarray[y+1] = iarray[y];
    iarray[y] = holder;
  } 

Как вы видите выше, для сортировки массива используются два цикла. Пусть ARRAY_SIZE будет n. Тогда количество операций равно n * (n-1). Это делает n ^ 2-n, который обозначается O (N ^ 2). Это большая нотация. Мы просто берем n, у которого самый большой показатель, самый высокий темп роста. Если бы это было 2n ^ 2 + 2n, это было бы все равно O (N ^ 2), потому что константы также не учитываются при вычислении сложности. Статья в Википедии о системе обозначений Big O очень полезна (как упомянул Лениэль в своем посте).

Это ваша домашняя работа, поэтому я не стал вдаваться в подробности упомянутых вами алгоритмов. Но вам нужно сделать математику, как это. Но я думаю, что вы спрашиваете фактическое количество операций. Так, для приведенного выше примера, если ARRAY_SIZE равно 10, ответ получает 10 * 9 = 90. Чтобы увидеть различия, вам нужно использовать один и тот же массив в ваших примерах кодов.

0 голосов
/ 05 сентября 2010

Это называется big O нотацией .

На этой странице показаны наиболее распространенные алгоритмы сортировки и их сравнение, выраженное через большие O.

Сложность вычислений (худшее, среднее и лучшее число сравнений для нескольких типичных тестовых случаев, см. Ниже).Как правило, хорошее среднее число сравнений / операций составляет O (n log n), а плохое - O (n ^ 2)

С http://www.softpanorama.org/Algorithms/sorting.shtml

...