Решение для сложности времени, что производят алгоритмы? - PullRequest
0 голосов
/ 14 февраля 2019

Я не понимаю, что такое сложность времени решения.Я понимаю, как определить, является ли алгоритм O(1) или O(n) и т. Д. Однако всегда ли вы вручную определяете время выполнения или алгоритм выводит время выполнения?Я не уверен, что алгоритмы O(1) делают ???

В упражнении мне нужно измерить сложность времени для разных размеров массивов.Постройте график времени выполнения в зависимости от размера ввода.

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

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

for(int i = 0; i < n; i++)
{
  //some operation
}

Так что этот цикл будет выполняться n раз.Таким образом, временная сложность будет O(n).

Теперь предположим, что ваша программа имеет два цикла for -

for(int i = 0; i < n; i++)
{
  //some operation
}
for(int i = 0; i < n; i++)
{
  //some operation
}

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

Теперь углубимся немного глубже.Предположим, у вас есть следующая программа -

for(int i = 0; i < n; i++)
{
  for(int i = 0; i < n; i++)
  {
    //some operation
  }
}

Итак, давайте посчитаем, сколько инструкций будет выполнено в конечном итоге.Это n*n или n^2.Таким образом, сложность времени будет O(n^2).Точно так же, если есть три или более вложенных цикла, мы просто посчитаем, сколько инструкций будет выполнено в конечном итоге.

Что теперь такое O(1)?- к настоящему времени вы должны понять - если общее количество инструкций равно 1 или любому другому постоянному числу, это O(1).

Что насчет O(logn) - возьмите бинарный поиск, например.В бинарном поиске мы разрезаем наш массив на две половины.Математически максимальное время, в течение которого бинарный поиск может выполняться по массиву длины, составляет logn.Таким образом, сложность нашего времени составляет O(logn)

Это некоторые основные приемы.Очевидно, что есть много вариантов.Но суть в том, сколько операций / инструкций будет выполнено в худшем случае.

0 голосов
/ 15 февраля 2019

Расчет сложности времени на самом деле ручной.Вы изучаете алгоритм и выясняете сложность того алгоритма, который вы написали во время выполнения.Алгоритм не выводит сложность времени.

Как вы уже упоминали, вы понимаете, как определить сложность алгоритма, я думаю, что для упражнения вам нужно построить график, который будет выглядеть примерно так.

enter image description here

В упражнении может потребоваться построить график, который показывает на основе размера входных данных, как будет работать ваш алгоритм (т.е. сколько времени это займет).

Сложность времени выполнения - не что иное, как измерение или прогнозирование того, как ваш алгоритм будет работать на основе заданного размера ввода.В случае O(1) ваш алгоритм всегда будет обеспечивать желаемый результат в фиксированное время, которое не имеет никакого отношения к размеру ввода.

Понимание времени работы O (1):

Например, я написал алгоритм O(1), который требует 5 секунд для получения результата для одного входа.Теперь, если алгоритм снабжен 100 точками данных в качестве входных данных (т. Е. Размер ввода равен 100), алгоритм займет ровно 5 секунд.Затем, если размер ввода 99999, для получения ожидаемого результата все равно потребуется 5 секунд.

Понимание времени работы O (n):

Теперь давайте рассмотрим пример алгоритма, который O(n) - это обеспечивает ожидаемый вывод для одного входа2 секунды.Теперь увеличение размера ввода увеличит время работы этого алгоритма.Например, если здесь размер ввода равен 10, время выполнения будет 20 секунд, для размера ввода 500 время выполнения будет 1000 секунд.

Надеюсь, вы поняли идею.Вам просто нужно нарисовать график, который показывает время, необходимое для запуска алгоритма на основе вашего размера ввода.

Надеюсь, это поможет!

0 голосов
/ 14 февраля 2019

Давайте рассмотрим сложность наихудшего случая (обозначение «O»), и со сложностью времени мы на самом деле не рассчитываем время, так как оно может очень сильно от проблемы к задаче, тогда как определить, какой алгоритм лучше?Мысленный процесс таков: время выполнения варьируется в зависимости от размера выборки, равного 'n'.Теперь возникает вопрос, насколько это зависит от n.И в худшем / лучшем / среднем случае, сколько сканирования потребуется для этого, исходя из того, что мы задаем его как

n , log(n) , nlog(n)....

Скажем, для любой проблемы пусть это будет ваша проблема с графом, а в худшем случае спросим ваш кодбудет делать, сколько итераций каждого узла. Затем вы можете получить сложность.

2n , 3n are regarded as n complexity why? , because our initial assumption is n>>

Единственный способ узнать это задать себе этот вопрос и вывести его на бумаге, а затем попытаться сопоставить, медленно высмогу понять это, увидев образец в алгоритме.

...