Почему это важно для эффективного кода (после интервью)

Нотация Big O — это инструмент для оценки сложности алгоритма, часто обращая внимание на то, как его время/пространство ведет себя при изменении входных данных.

Например, как ведет себя функция, которая принимает массив в качестве входных данных и возвращает повторяющиеся элементы, по мере увеличения длины входного массива?

  • остается ли время/пространство постоянным? — О(1)
  • время/пространство растет линейно? — О(n)
  • время/пространство растет квадратично? — O(n²)

Алгоритм — это процесс с этапами — своего рода рецепт. Например, алгоритм получения 2 из 5 может включать только вычитание 3 из 5. 1 шаг. В программной инженерии мы используем код для определения алгоритмов.

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

Примечание. n — это ввод

  1. O of 1 — O(1)
  2. O журнала n — O (log n)
  3. O of n — O(n)
  4. O из n log n — O (n log n)
  5. O of n² — O(n²)

Вот красочный график, показывающий, как это выглядит — с x в качестве входных данных и y в качестве результирующего поведения:

Ключ: Красный = постоянный, Синий = log n, Зеленый = линейный, Фиолетовый = n log n, Черный = n²

Затем, используя примеры (такие как циклы или методы массива), поймите, что они означают и почему один лучше другого. Это будет иметь значение для вычислений при использовании массива и объекта для манипулирования данными. Или это может помочь понять причудливый Адаптер сущности NgRx против O.G NgRx.

🤔 Не думаю, что я еще создал связанный список.

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

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

  1. Что такое эффективный код?
  2. Какое отношение он имеет к алгоритмам?

Алгоритмы, которые вы пишете (ваш код), можно анализировать с помощью нотации Big O.

  • сколько времени занимает алгоритм?
  • сколько места нужно алгоритму для работы?

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

Ссылки и дополнительная литература:

Алгоритмы и структуры данных Кольта Стила