Рубрики
Без рубрики

Асимптотические обозначения ботинок) : Big-O, Big-Omega, Big-Theta

Определение эффективности алгоритма. Теги с алгоритмами, Bigo, асимптотическими, Python.

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

  1. Big-O (большой O) [ Аттракционная или верхняя граница]
  2. Big-Ω (Big-Omega) [По крайней мере или нижнему границе]
  3. Big-θ (большая тета) [Диапазон или жесткая граница]

1. Big-O (большой O)

Эта запись используется для определения верхней границы алгоритма или определить худший случай алгоритма.

Математическое обозначение: (g (n)). Где положительные константы C и N0 такие, что 0 ≤ f (n) ≤ c * g (n) для всех n ≥ n0

Графическое представление:

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

У Big-O есть несколько обозначений. Давайте посмотрим один за другим.

  • Констанция – O (1)

Это означает, что независимо от того, какой размер ввода будет, время выполнения всегда будет одинаковым.

Пример:

        item = items[0]

Графическое представление:

  • Линейный – O (n)

Это означает, что время выполнения находится в непосредственной близости от I.E. Если размер ввода увеличивается или уменьшается, поэтому время выполнения увеличивается или уменьшается.

Пример:

        element_found = [x for i,x in enumerate([2,3,5]) if x==5]

В приведенном выше примере в поисках элемента в линейном поиске поиска.

Графическое представление

  • Квадратичный – O (n 2 )

Это означает, что время выполнения алгоритма является прямому пропорциональному квадрату размера ввода.

Пример:

        for i in [2,3,4,5]:
            for z in [5,4,3,2]:
                print(f"Match {z}") if i == z else ''

Выше примера Наложенную петлю, которая делает его квадратичной операцией.

Графическое представление

  • Экспоненциальный – O (2 n )

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

Пример:

    def fibonacci(n):
        if n <= 1:
            return n
        else:
            return((fibonacci(n-1) + fibonacci(n-2)))

Графическое представление

  • Логарифмический – O (log (n) )

Если алгоритм решает проблему, разделив ее на половину каждый раз, то его o (log n). Отличному примеру это двоичный алгоритм поиска Отказ

Графическое представление

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

  • Факториал – O (! N)

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

Пример:

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

        def factorial(n):
            for i in range(n):
                factorial(n-1)

Внешняя петля O (N), внутренняя функция вызывается рекурсивно с (N-1), которую вы получаете N * (N-1) *! Таким образом, функция O (N!).

2. Big-Ω (Big-Omega)

Эта запись используется для определения нижней границы алгоритма. Таким образом, мы можем сказать, что данный алгоритм займет по меньшей мере определенное количество времени.

Математическое обозначение: (g (n)). Где положительные константы c и n0 такое, что 0 ≤ c * g (n) ≤ f (n) для всех n ≥ n0

Графическое представление:

Пример:

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

3. Big-θ (Big-Theta)

Эта обозначение определяет плотному границе времени выполнения алгоритма. Таким образом, есть верхняя граница, а нижняя граница и время выполнения алгоритма попадет в диапазон.

Математическое обозначение: (g (n)). Где положительные константы n 0 , С 1 , С 2 такие, что справа от n 0 значение f (n) всегда лежит между c 1 g (n) и c 2 G (N) I.E. 0 ≤ C 1 g (n) ≤ f (n) ≤ C 2 g (n) для всех n ≥ n0

Графическое представление:

Пример:

        def search_index(num):
            for i, x in enumerate(list):
                if num == x:
                    return i

В приведенном выше примере нижняя граница (лучшая корпус) будет o (1), где элемент найден на уровне 0. И верхняя граница (худший случай) будет o (n), где элемент найден в последнем индексе.

Чтения и ссылки:

https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/asymptotic-notation

http://web.mit.edu/16.070/www/lecture/big_o.pdf

https://guide.freecodecamp.org/computer-science/notation/big-o-notation/

https://stackabuse.com/big-o-notation-and-algorithm-analysis-with-python-examples/

https://www.daveperrett.com/articles/2010/12/07/comp-sci-101-big-o-notation/

https://www.101computing.net/big-o-notation/

Оригинал: “https://dev.to/sherryummen/asymptotic-notations-b-oot-big-o-big-omega-big-theta-49e7”