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

Сложность простых алгоритмов и структур данных в JS

Yung L. Leung Сложность простых алгоритмов и структур данных в JSPhoto Carsten Würth на Unsplashin предыдущая статья «шаг к вычислению как науку: простые алгоритмы и структуры данных в JS», – обсудили простые алгоритмы (линейные и двоичные поиски ; пузырь, выделение и вставка) &

Автор оригинала: FreeCodeCamp Community Member.

Yung L. Leung

В предыдущей статье « шаг к вычислениям в качестве науки: простые алгоритмы и структуры данных в JS », – обсудили простые алгоритмы (линейные и двоичные поиски; пузырь, выделение и вставка) и структуры данных (массив и ключ -Поделиться сопряженные объекты). Здесь я продолжаю с концепцией сложности и его применение к этим алгоритмам и структурам данных.

Сложность

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

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

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

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

Будь вы Вынимая мусор или пылесосить комнату , вы можете сказать, что Количество операций ( o ) Ровно увеличивается с Количество элементов ( n ) Отказ Если у меня есть 1 мусорное ведро, я должен вынуть мусор один раз. Если бы у меня было 2 мешки для мусора, я должен выполнять одну и ту же задачу дважды, предполагая, что вы физически не можете поднять более одной сумки за раз. Итак, большие O из этих хлопот или (n) или O (n) Отказ Это линейная сложность (прямая линия с 1 работой: 1-элементное соответствие). Таким образом, 30 операций выполняются на 30 элементов (желтая линия на графике).

Это похоже на то, что происходит при рассмотрении алгоритмов и структур данных.

Searches

Линейный поиск

Лучший случай Для поиска элемента в упорядоченном списке один за другим является постоянным O (1) Предполагая, что это 1-й элемент в вашем списке. Итак, если элемент, который вы ищете, всегда перечислены в списке, независимо от размера списка, вы найдете свой элемент в одно мгновение. Сложность вашего поиска постоянна с размером списка. в среднем к худшему случаю такого поиска – линейная сложность или На). Другими словами, Для n элементов я должен посмотреть N раз, прежде чем найду свой предмет, отсюда линейный поиск.

Бинарный поиск

Для двоичного поиска Лучший случай это o (1), что означает, что элемент вашего поиска расположен на середине. Худший и средний случай это журнал 2 или:

Логарифм или журнал – это способ выразить экспоненту для данной базы. Итак, если бы было 16 элементов), то потребуется, в худшем случае 4 шага, чтобы найти номер 15).

Или просто: O (log n)

Сортирует

Пузырь

В форме пузыря каждый элемент сравнивается с остальной частью коллекции, чтобы определить наибольшее значение для пузыря. По этой причине на в среднем к худшему случаю , его сложность – это O (n²) Отказ Подумайте, что петля вложенный внутри другой петли.

Итак, для каждого элемента вы сравниваете его с остальной частью вашей коллекции. Это составляет 16 сравнений (или операций) для 4 элементов). Лучший случай Если ваша коллекция почти отсортирована, за исключением одного предмета. Это будет составлять один раунд сравнений. То есть четыре сравнения необходимы для пузыми члена коллекции из четырех предметов, что является сложностью O (n) Отказ

Выбор

В отличие от Сортировка пузыря вместо того, чтобы забивать наибольшее значение, Сортировка отбора Выбирает самое низкое значение, чтобы поменять его на самые ранние позиции. Но, потому что это требует сравнения каждого элемента до остальной части коллекции, он также имеет сложность O (n²) Отказ

Вставка

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

Структуры данных

Массива

Поскольку требуется один шаг для доступа к элементу массива через его индекс или добавить/удалить элемент в конце массива, сложность для Доступ к , толкать или каппинг Значение в массиве O (1) Отказ Тогда как линейно ищет Через массив через свой индекс, как видно ранее, имеет сложность O (n) Отказ

Кроме того, потому что Сдвиг или Неприносимость ценности до или с передней части массива требуется Овращение Каждый элемент, который следует за этим (то есть. Удаление элемента при индексе 0, требует разморочного элемента при индексе 1 как индекс 0 и пр.), У них сложность O (n) Отказ Перезарядка переносится с начала до конца массива.

Ключ – значение Сопряженные объекты

Доступ к , вставка или Удаление Значение, используя ключ мгновенно, и поэтому у них сложность O (1) Отказ Поиск через каждый «вкладчик» для конкретного элемента, используя каждый доступный ключ, по сути, является Линейный поиск Отказ Итак, у него сложность O (n) Отказ

Заключение

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

Справка:

https://www.udemy.com/js-algorithms-and-data-structures-masterclass/