Що таке лінійний алгоритм?
Коротка відповідь
Лінійний алгоритм - це або послідовний алгоритм без розгалужень і циклів (кожен крок виконується один раз, строго згори вниз), або алгоритм із лінійною часовою складністю O(n), де час виконання зростає пропорційно розміру вхідних даних. У розмові важливо уточнити, про який сенс ідеться: про структуру виконання чи про складність.
Розгорнута відповідь
Визначення і контекст
- Лінійний за структурою: послідовність кроків без умов (if/switch) і циклів (for/while). Траєкторія виконання одна й та сама для будь-якого входу.
- Лінійний за часом (O(n)): час роботи зростає лінійно від розміру входу. Такий алгоритм може містити цикли або рекурсію, але кожен елемент входу обробляється фіксовану кількість разів.
Приклади реалізації
1) Лінійний за структурою (без розгалужень і циклів)
Простий приклад на JavaScript: обчислюємо площу і периметр прямокутника за заданими сторонами.
javascript
const a = 5; // сторона A
const b = 3; // сторона B
const area = a * b;
const perimeter = 2 * (a + b);
console.log('Площа:', area);
console.log('Периметр:', perimeter);
// Немає ні умов, ні циклів - виконання строго згори вниз.2) Лінійний за часом O(n)
Сумування елементів масиву - лінійна часова складність: кожен елемент відвідується один раз.
javascript
function sum(arr) {
let s = 0;
for (const x of arr) {
s += x; // кожен елемент обробляється рівно один раз
}
return s;
}
console.log(sum([1, 2, 3, 4])); // 10Тут присутній цикл, отже за структурою це не лінійний алгоритм, однак за часом - лінійний (O(n)).
Як відрізняти на співбесіді
- Якщо йдеться про структуру: немає розгалужень і циклів - це лінійний за структурою.
- Якщо йдеться про складність: оцінюємо залежність часу/пам'яті від n. Один прохід по даних - O(n) - лінійний за часом.
- Уточнюйте термін: "лінійний за структурою чи лінійна складність (O(n))?"
Типові помилки і питання
- Плутанина між "лінійним алгоритмом" як послідовністю кроків і "лінійною складністю" O(n).
- Вважати, що цикл завжди означає нелінійну складність. Цикл може бути і лінійним, і квадратичним - залежить від кількості вкладень і повторів.
- Ігнорувати пам'ять: є алгоритми, лінійні за часом, але не за пам'яттю (наприклад, створюють масив розміром n).
Порівняння з іншими класами (за часом)
- O(1) - стала: приклад - доступ до елемента масиву за індексом.
- O(log n) - логарифмічна: бінарний пошук по відсортованому масиву.
- O(n log n) - типово для ефективних сортувань (merge/quick у середньому).
- O(n^2) - квадратична: вкладені цикли по одному й тому самому набору даних.
Коли застосовувати
- Лінійна структура - коли алгоритм повинен бути максимально простим і передбачуваним (виконання фіксованим ланцюжком дій).
- Лінійна складність - коли потрібна масштабована обробка великих вхідних даних одним проходом (streaming/iterative processing).
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.