O(1) — Константная сложность

Определение

Константная сложность означает, что время выполнения алгоритма остается постоянным и не зависит от размера входных данных.

Формула

Характеристики

  • Самая эффективная сложность
  • Время выполнения всегда одинаковое
  • Не зависит от размера данных
  • Предсказуемая производительность

Сравнение производительности

Размер данныхОперацийВремя
1011 мс
10011 мс
100011 мс
100000011 мс

График сложности

Время
  
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)); // 30

2. Получение первого/последнего элемента

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;
  }
}