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

Время сложности структур данных Python

Каждая структура данных выполняет различные операции при реализации алгоритма. Некоторые из ключевых и … помечены Python, компьютерные науки, структуры данных, сложность времени.

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

Космическая сложность

Космическая сложность обычно используется для обозначения меры того, сколько пространства принимает алгоритм. Он включает в себя как вспомогательное пространство, так и пространство, используемое вводом. Вспомогательное пространство – это дополнительное пространство или временное пространство, используемое алгоритмом. Космическая сложность алгоритма – это общее пространство, предпринятое алгоритмом относительно размера ввода.

Сложность времени

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

Типы сложности выполнения (типы нотаций Big-O)
  1. Постоянное время O (1) Говорят, что алгоритм имеет постоянное время, когда это время выполнения не зависит от входных данных (n). Независимо от того, насколько большая ваша коллекция, время, необходимое для выполнения операции, является постоянным. Это означает, что алгоритм/операция всегда будет принимать столько же времени, независимо от количества элементов, с которыми мы работаем. Например, доступ к первому элементу списка всегда O (1) независимо от того, насколько большой список.

  2. Логарифмическое время o (log n) Алгоритмы с логарифмическим временем сложность уменьшают размер входных данных на каждом этапе работы. Обычно двоичные деревья и двоичные поисковые операции имеют o (log n) как их временная сложность.

  3. Линейное время o (n) Говорят, что алгоритм имеет линейную сложность времени, когда время выполнения напрямую и линейно пропорционально размеру входных данных. Это наилучшая сложность времени, когда алгоритм должен изучить все элементы в входных данных. Например:

for value in data:
    print(value)

Пример таких операций будет линейным поиском, следовательно, итерация в списке является O (n).

  1. Quasilinear Time (n log n) Где каждая операция в входных данных имеет временную сложность логарифма. Обычно видно в оптимизированных алгоритмах сортировки, таких как Mergeort, Timsort, Heapsort. В Mergeort данные входные данные разбиты в несколько подписок до каждого подходящего согласования одного элемента, а затем сублисты объединяются в отсортированный список. Это дает нам временную сложность O (NLOGN)

  2. Квадратное время O (N ^ 2): Говорят, что алгоритм имеет квадратичную сложность времени, когда время, необходимое для выполнения операции, пропорционально квадрату предметов в сборе. Это происходит, когда алгоритм необходимо выполнить линейную операцию времени для каждого элемента в входных данных. Bubble Sort имеет O (n ^ 2) .for Пример, петля внутри цикла:

for x in data:
     for y in data:
          print(x, y)
  1. Экспонесное время O (2 ^ n) Говорят, что алгоритм имеет экспоненциальную сложность времени, когда рост удваивается с каждым дополнением к набору входных данных. Такая сложность времени обычно наблюдается в алгоритмах грубой силы. Например, рекурсивный алгоритм Fibonacci имеет o (2 ^ n) сложность времени.

  2. Факториальное время (n!) Говорят, что алгоритм имеет факториальную сложность времени, когда каждая единственная перестановка коллекции вычисляется в операции и, следовательно, время, необходимое для выполнения операции, является факториалом размера элементов в коллекции. Проблема путешествий продавца и алгоритм кучи (генерируя все возможные перестановки n объектов N (N!) Сложность времени. Недостаток: Это очень медленно.

Сводный график нотации Big-O
Лучшие, средние и худшие случаи
  1. Лучший случай сценария В лучшем случае мы рассчитываем нижнюю границу при запуске алгоритма. Лучший сценарий возникает, когда структуры данных и элементы в коллекции вместе с параметрами находятся в их оптимальном состоянии. Это вызывает выполнение минимального количества операций. Например, в процессе линейной поисковой поисков, лучший случай возникает, когда X (элемент, который мы ищем) присутствует в начале списка. Количество операций в лучшем случае постоянна (не зависит от n). Так сложность времени в лучшем случае будет о (1)

  2. Средний сценарий корпуса Возникает, когда мы определяем сложность на основе равномерного распределения значений ввода. В среднем анализа регистрации мы принимаем все возможные входы и рассчитываем вычисление времени для всех входов. Суммируйте все расчетные значения и разделите сумму на общее количество входов. Мы должны знать (или прогнозировать) распределение случаев. Для проблемы линейных поисков, давайте предположим, что все случаи равномерно распределены (включая случай X, не присутствующих в массиве). Итак, мы суммируем все случаи и разделите сумму (N + 1).

  3. Худший случай сценария Худший сценарий может быть операцией, которая требует поиска элемента, который расположен в качестве последнего элемента в крупногабарированной коллекции, такой как список, и алгоритм, итерации по поводу сбора с самого первого пункта. Например, худший случай линейного поиска происходит, когда X нет в списке, поэтому итерация сравнивает х со всеми элементами. Это даст нам время выполнения O (n)

Время сложности структур данных Python
  1. Список Вставить: O (n) Получить товар: O (1) Удалить элемент: O (n) Итерация: O (n) Получить длину: o (1)

  2. Словарь Получить элемент: O (1) Установите элемент: O (1) Удалить элемент: O (1) ИТЕРТЬ ЗАЯВИТЕЛЬСТВО СЛОВАРЬ: O (N

  3. Установить Проверьте на предмет набора: O (1) Разница набора от B: O (длина а) Пересечение множества A и B: O (минимум длины a или b) Союз набора A и B: O (n) относительно длины (а) + длина (b)

  4. Кортежи Кортежи поддерживают все операции, которые не мутируют структуру данных (и они имеют одинаковые классы сложности).

Оригинал: “https://dev.to/global_codess/time-complexities-of-python-data-structures-3bja”