Назад к вопросам
Middle
89
questionbank
Что такое нотация «о большом»?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Нотация «о большое» (Big O notation) описывает верхнюю границу сложности алгоритма — как быстро увеличивается время выполнения или объем памяти в зависимости от размера входных данных. Используется для сравнения эффективности алгоритмов.
Основные типы сложности по нотации «о большое»:
| Нотация | Описание | Пример |
|---|---|---|
| O(1) | Постоянное время | Доступ к элементу массива по индексу |
| O(log n) | Логарифмическое время | Бинарный поиск |
| O(n) | Линейное время | Поиск элемента в несортированном списке |
| O(n log n) | Лине-логарифмическое | Быстрая сортировка (в среднем) |
| O(n²) | Квадратичное время | Сортировка пузырьком |
| O(2ⁿ) | Экспоненциальное время | Решение задачи о коммивояжере методом грубой силы |
Пример анализа сложности:
// Пример O(1)
function getFirstElement(arr) {
return arr[0]; // Доступ по индексу занимает постоянное время, независимо от размера arr
}
// Пример O(n)
function findMax(arr) {
let max = arr[0];
for (let i = 1; i < arr.length; i++) { // Цикл выполняется n раз, где n - длина массива
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
// Пример O(n^2)
function multiplyMatrices(matrixA, matrixB) {
const n = matrixA.length;
const result = [];
for (let i = 0; i < n; i++) { // Первый цикл (n итераций)
result[i] = [];
for (let j = 0; j < n; j++) { // Второй цикл (n итераций)
let sum = 0;
for (let k = 0; k < n; k++) { // Третий цикл (n итераций)
sum += matrixA[i][k] * matrixB[k][j];
}
result[i][j] = sum;
}
}
return result;
}
Нотация «о большое» позволяет абстрагироваться от конкретной машины и константных множителей, фокусируясь на росте сложности при увеличении размера данных. Это помогает выбрать наиболее подходящий алгоритм для решения задачи, особенно при работе с большими объемами данных.