Які алгоритми, які ми використовуємо щодня, мають складності O (1), O (n log n) та O (log n)?
Які алгоритми, які ми використовуємо щодня, мають складності O (1), O (n log n) та O (log n)?
Відповіді:
Якщо ви хочете приклади алгоритмів / Групи висловлювань зі складністю часу, наведених у питанні, ось невеликий список -
O(1)
часO(n)
часУ двох словах, всі алгоритми грубої сили або Noob, які потребують лінійності, ґрунтуються на часовій складності O (n)
O(log n)
часO(n log n)
часКоефіцієнт 'log n' вводиться шляхом врахування «Поділитись і перемогти». Деякі з цих алгоритмів є оптимізованими та часто використовуються.
O(n^2)
часВони повинні бути менш ефективними алгоритмами, якщо їхні O (nlogn) аналоги є. Загальна заявка тут може бути Brute Force.
O(log n)
списку, щоб O(n)
список був у порядку від найкращого до гіршого. ха-ха :)
Простий приклад O(1)
може бути return 23;
- незалежно від вкладених даних, це повернеться за фіксований, обмежений час.
Типовим прикладом O(N log N)
може бути сортування вхідного масиву з хорошим алгоритмом (наприклад, об'єднання).
Типовий приклад, якби O(log N)
шукати значення в відсортованому вхідному масиві шляхом бісекції.
O (1) - більшість процедур приготування є O (1), тобто потрібен постійний проміжок часу, навіть якщо для приготування їжі більше людей (до певної міри, тому що у вашій посуді / каструлі може не вистачити місця і потрібно розділити приготування)
O (вхід) - пошук чогось у телефонній книзі. Подумайте про двійковий пошук.
O (n) - читання книги, де n - кількість сторінок. Це мінімальна кількість часу, яке потрібно для читання книги.
O (nlogn) - не можу відразу придумати щось, що можна зробити щодня, що є nlogn ... якщо тільки ви не сортуєте карти, зробивши злиття чи швидке сортування!
Я можу запропонувати вам декілька загальних алгоритмів ...
Це були б відповіді кишечника, оскільки це звучить як питання домашнього завдання / інтерв'ю. Якщо ви шукаєте щось більш конкретне, це трохи складніше, оскільки громадськість взагалі не матиме уявлення про базову реалізацію популярного додатку (Збереження відкритого коду, звичайно), а також концепція взагалі не застосовується до "програми"
O (1): пошук найкращого наступного кроку в Шахах (або Перейти до цього питання). Оскільки кількість ігрових станів кінцеве, це лише O (1) :-)
O(1)
наносекундами, і ви точно знаєте, що O(1)
відбудеться першим ...
Складність застосування програмного забезпечення не вимірюється і не записується в нотації big-O. Корисно лише виміряти складність алгоритму та порівняти алгоритми в одній області. Швидше за все, коли ми говоримо O (n), ми маємо на увазі, що це "O (n) порівняння " або "O (n) арифметичні операції". Це означає, що ви не можете порівнювати жодну пару алгоритмів чи програм.
O (1) - Видалення елемента із подвійно пов'язаного списку. напр
typedef struct _node {
struct _node *next;
struct _node *prev;
int data;
} node;
void delete(node **head, node *to_delete)
{
.
.
.
}
0 (logn) -Двійковий пошук, піковий елемент у масиві (може бути більше одного піку) 0 (1) -в python, обчислюючи довжину списку або рядка. Функція len () займає 0 (1) час. Доступ до елемента в масиві займає 0 (1) час. Операція натискання в стеку займає 0 (1) час. 0 (nlogn) -Між сортуванням. сортування в python займає nlogn час. тому, коли ви використовуєте listname.sort (), це займає nlogn час.
Примітка: Пошук в хеш-таблиці іноді займає більше, ніж постійний час, через зіткнення.
O (2 N )
O (2 N ) позначає алгоритм, зростання якого подвоюється з кожним доповненням до набору вхідних даних. Крива зростання функції O (2 N ) є експоненціальною - починаючи дуже дрібно, потім метеорично піднімаючись. Прикладом функції O (2 N ) є рекурсивний розрахунок чисел Фібоначчі:
int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
Tower of Hanoi
був би кращим прикладом.