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

Управление большими o обозначениями

В этом блоге я рассказываю о некоторых понятиях Большой О запибения, через которые я прорвался после какого -то понедельника … Tagged с алгоритмами JavaScript.

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

Временная сложность

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

Сложность пространства

Он отслеживает память, полученную при назначении переменных (ОЗУ) и типов данных, таких как целые числа, строки, массивы и т. Д. Целые числа принимают постоянное количество памяти O (1) , но струны и массивы приобретают больше памяти, поскольку они увеличивают размер (n) O (n) Анкет Тем не менее, сложность пространства не является приоритетом в улучшении обозначений Big O в алгоритмах, поскольку ресурсы оперативной памяти выходят реже.

Вложенные петли

Работа с вложенными петлями является чем -то вроде противоречия, потому что большинство алгоритмов имеют «грубую силу» или «интуитивное решение», которое использует вложенные петли. Однако каждый раз, когда мы гнездясь по циклу, временная сложность увеличивается в геометрической прогрессии.

Например:

Код в песочнице

const countDuplicatesSlow = (numbers) => { // O(n^2) big o complexity

    let result = []

    for(let i = 0; i

Источник: Аарон Мартин (Ajmanntech)

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

const duplicateNumbers = [1,2,3,2,1,2]
countDuplicatesSlow(duplicateNumbers)
// returns => [Found a total of: (2) number 1s,
//             Found a total of: (3) number 2s,
//             Found a total of: (1) number 3s]

Это отличный пример возможности улучшить Big O с помощью объекта Memoization. С этой техникой мы можем пойти от O (n^2) к O (n) что является большим улучшением. Я сосредоточусь на этом в предстоящем блоге.

Рекурсия

При рекурсии алгоритмы становятся очень медленными, когда мы должны выполнять бинарные поиски деревьев. Обычно, если мы ищем двоичное дерево На всех узлах сложность времени будет O (2^n) где n – глубина дерева.

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

Код в песочнице

const recursionTreeSlow = (maxLevel) => {
    return recursion_Tree_Slow(0, maxLevel)
}

const recursion_Tree_Slow = (currentLevel, maxLevel) => {
    if(currentLevel > maxLevel){
        return 0
    }
    if(currentLevel === maxLevel){
        return 1
    }
    return recursion_Tree_Slow(currentLevel+1, maxLevel) + recursion_Tree_Slow(currentLevel+2, maxLevel)
}

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

Метод «заметки» также может быть использована в бинарной рекурсии деревьев, но понимание реализации может потребоваться немного больше визуализации, потому что двоичные деревья могут быть немного более абстрактными, чем массивы и объекты. Я также попробую объяснить это в предстоящем блоге.

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

LinkedIn Твиттер

Ресурсы:

Big O Cheatsheet Большие o Советы Учитесь.co на временной комплексации Ajmanntech Kodingkevin на космос

Оригинал: “https://dev.to/santispavajeau/managing-big-o-notation-3162”