Помогите с асимптотическим анализом - PullRequest
0 голосов
/ 28 сентября 2010

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

Вот пример того, что я имею в виду.

  • Время для 'sortArray' для сортировки отсортированного массива из 400 элементов: 4
  • Время для сортировки массива sortArray с 800 элементами: 8
  • Время для 'sortArray' для сортировки отсортированного массива с 1600 элементами: 16
  • Время для сортировки массива sortArray с 3200 элементами: 26

  • Время для 'sortArray' для сортировки случайного массива из 400 элементов: 255

  • Время для 'sortArray' для сортировки случайного массива с 800 элементами: 958
  • Время для сортировки массива sortArray с 1600 элементами: 4059
  • Время для сортировки массива 'sortArray' с 3200 элементами: 16585

Любая помощь о том, как идти о вычислении Big O нотации что-то вроде этого? Спасибо!

1 Ответ

2 голосов
/ 28 сентября 2010

По определению асимптотическая сложность алгоритма представляет собой скорость роста (во времени, пространстве или каком-либо другом ресурсе) в качестве размера увеличения входных данных.Лучше всего проанализировать сам алгоритм, чтобы определить эту скорость роста.Однако, если все, что у вас есть, это алгоритм сортировки «черного ящика», и вы знаете только размер входных данных и полученное время, лучшее, что вы можете сделать, - это проверить, не растет ли график входных данных и времени вшаблон, который будет выполнять конкретная функция.

Чтобы проверить эту идею, граф работает следующим образом:

  • f (n) = n
  • f (n) = n lnn
  • f (n) = n ^ 2

и т. д., и посмотрите, какой из них больше всего напоминает график, созданный вами для времени запуска алгоритма.Помните, что асимптотический анализ в конечном итоге исключает как постоянные факторы для каждого члена, так и любые члены более низкого порядка.Итак, если ваш алгоритм все еще работает за линейное время, даже если график выглядит как f (n) = 2n, у вас все еще есть алгоритм O (n).

...