Примеры алгоритмов, который работает за O(1) до o(n журнал N) и o(зарегистрируйте N) сложности



Каковы некоторые алгоритмы, которые мы используем ежедневно, которые имеют O(1), O(n log n) и o (log n) сложности?

736   9  

9 ответов:

Если вы хотите примеры алгоритмов / группы операторов с временной сложностью, как указано в вопросе, вот небольшой список -

O (1) Время
1. Доступ к индексу массива (int a = ARR[5];)
2. Вставка узла в связанный список
3. Толкая и Попинг на стек
4. Вставка и удаление из очереди
5. Обнаружение родительского или левого/правого дочернего узла в дереве, хранящемся в массиве
6. Переход к следующему / предыдущему элементу в дважды связанном Список
и вы можете найти еще миллион таких примеров...

о(n) времени
1. Обход массива
2. Прохождение связанного списка
3. Линейный Поиск
4. Удаление определенного элемента в связанном списке (не отсортировано)
5. Сравнение двух строк
6. Проверка на палиндром
7. Подсчет / Сортировка Ведра
и здесь тоже можно найти еще миллион таких примеров....
В двух словах, все алгоритмы грубой силы, или Нуб те, которые требуют линейности, основаны на O (n) временной сложности

o (log n) time
1. Бинарный Поиск
2. Поиск наибольшего / наименьшего числа в двоичном дереве поиска
3. Определенные алгоритмы разделения и завоевания, основанные на линейной функциональности
4. Вычисление Чисел Фибоначчи-Лучший Метод
Основная предпосылка здесь заключается не в использовании полных данных, а в уменьшении размера проблемы с каждой итерацией

O (nlogn) время
1. Объединить Сортировка
2. Сортировка Кучи
3. Быстрая Сортировка
4. Некоторые алгоритмы разделения и завоевания, основанные на оптимизации o (n^2) алгоритмов
Фактор 'log n' вводится путем приведения в рассмотрение Divide and Conquer. Некоторые из этих алгоритмов являются оптимальным и часто используемым.

о(N^2) времени
1. Пузырь Сортировка
2. Вставка Сортировка
3. Выбор Сортировка
4. Прохождение простого 2D массива
Они должны быть менее эффективные алгоритмы, если их o(nlogn) аналоги присутствуют. Общее применение здесь может быть грубой силой.

Я надеюсь, это отвечает на ваш вопрос. Если у пользователей есть больше примеров, я буду более чем счастлив :)

простой пример O(1) может быть return 23; -- независимо от входных данных, это вернется в фиксированное, конечное время.

типичный пример O(N log N) будет сортировка входного массива с хорошим алгоритмом (например, mergesort).

типичный пример, если O(log N) будет искать значение в отсортированном входном массиве по делению пополам.

O(1) - большинство процедур приготовления пищи O(1), то есть это занимает постоянное количество времени, даже если есть больше людей, чтобы приготовить Для (в какой-то степени, потому что вы можете запустить из пространства в кастрюле/кастрюли и нужно разделить приготовление пищи)

O (logn) - найти что-то в вашей телефонной книге. Подумайте двоичный поиск.

O (n) - чтение книги, где n-количество страниц. Это минимальное количество времени, которое требуется для чтения книги.

O(nlogn) - не могу немедленно подумайте о чем-то, что можно было бы делать каждый день, что является nlogn...если вы не сортируете карты, выполняя слияние или быструю сортировку!

Я могу предложить вам несколько общих алгоритмов...

  • O( 1): доступ к элементу в массиве (т. е. int i = a[9])
  • O (N log n): быстрый или mergesort (в среднем)
  • O (log n): двоичный поиск

Это были бы ответы кишечника, поскольку это звучит как домашнее задание / интервью. Если вы ищете что-то более конкретное, это немного сложнее, поскольку общественность в целом не будет иметь представления о базовой реализации (Щадя открытый исходный код, конечно) популярного приложения, и концепция в целом не применяется к "приложению"

O (1) - удаление элемента из двусвязного списка. например,

typedef struct _node {
    struct _node *next;
    struct _node *prev;
    int data;
} node;


void delete(node **head, node *to_delete)
{
    .
    .
    .
}

сложность программного приложения не измеряется и не записывается в нотации big-O. Полезно только измерить сложность алгоритма и сравнить алгоритмы в одной и той же области. Скорее всего, когда мы говорим O(n), мы имеем в виду, что это "O (n) сравнения "или"O(n) арифметические операции". Это означает, что вы не можете сравнить любую пару алгоритмов или приложений.

O (1): Найти лучший следующий ход в шахматах (или пойти на это дело). Поскольку число состояний игры конечно, это только O (1): -)

вы можете добавить в свой список следующие алгоритмы:

O(1) - определение четного или нечетного числа; работа с HashMap

O(logN) - вычисление x^N,

O(N Log N) - самая длинная возрастающая подпоследовательность

O (N log n) - это, как известно, верхняя граница того, как быстро вы можете сортировать произвольное множество (предполагая стандартную и не очень параллельную вычислительную модель).

Comments

    Ничего не найдено.