O(1) — Константная сложность
Определение
Константная сложность означает, что время выполнения алгоритма остается постоянным и не зависит от размера входных данных.
Формула
Характеристики
- Самая эффективная сложность
- Время выполнения всегда одинаковое
- Не зависит от размера данных
- Предсказуемая производительность
Сравнение производительности
| Размер данных | Операций | Время |
|---|---|---|
| 10 | 1 | 1 мс |
| 100 | 1 | 1 мс |
| 1000 | 1 | 1 мс |
| 1000000 | 1 | 1 мс |
График сложности
Время
3 | ●──────────────────────────────────── O(1)
|
2 |
|
1 |
|
0 +---------------------------------------->
0 10 100 1K 10K 100K n
Визуализация доступа к массиву
Массив: [10, 20, 30, 40, 50]
Индекс: 0 1 2 3 4
arr[2] → 30 (моментально, не зависит от размера)
arr[0] = 1 операция
arr[999] = 1 операция
arr[1000000] = 1 операция
Практическое применение
- Доступ к элементам массива/объекта
- Операции со стеком (push/pop)
- Хеш-таблицы (get/set)
- Математические вычисления
- Проверка условий
Важно помнить
✅ Константная сложность — идеальная ситуация ✅ Не всегда достижима для сложных операций ✅ Отлично масштабируется ❌ Не означает “быстро”, означает “постоянное время”
Примеры кода
1. Доступ к элементу массива по индексу
function getElement(arr, index) {
return arr[index]; // O(1)
}
const numbers = [10, 20, 30, 40, 50];
console.log(getElement(numbers, 2)); // 302. Получение первого/последнего элемента
function getFirst(arr) {
return arr[0]; // O(1)
}
function getLast(arr) {
return arr[arr.length - 1]; // O(1)
}3. Арифметические операции
function add(a, b) {
return a + b; // O(1)
}
function multiply(a, b) {
return a * b; // O(1)
}4. Операции с объектом/хеш-таблицей
const user = { name: 'Ivan', age: 25 };
// O(1) - доступ по ключу
function getUserName(user) {
return user.name;
}
// O(1) - присвоение значения
function setUserAge(user, age) {
user.age = age;
}5. Вставка/удаление в начало связного списка
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
// O(1) - вставка в начало
prepend(value) {
const newNode = new Node(value);
newNode.next = this.head;
this.head = newNode;
}
}