Lapa Knowledge Base
Алгоритмы и структуры данных

Алгоритмы (Algorithms)

Основы алгоритмов и структур данных

Алгоритмы — это пошаговые инструкции для решения задач. Они определяют, как обрабатывать данные для получения желаемого результата.

Что такое алгоритмы?

Алгоритм — это конечная последовательность четко определенных инструкций для решения задачи. Хороший алгоритм должен быть:

  • Корректным — давать правильный результат
  • Эффективным — использовать минимальные ресурсы
  • Понятным — легко читаться и пониматься

Категории алгоритмов

Сортировка

Алгоритмы для упорядочивания данных по определенному критерию.

Основные алгоритмы сортировки:

  • Сортировка — алгоритмы упорядочивания данных

Поиск

Алгоритмы для поиска элементов в структурах данных.

Основные алгоритмы поиска:

  • Поиск — алгоритмы поиска элементов

Обход графов

Алгоритмы для исследования и обхода графовых структур.

Основные алгоритмы обхода:

  • Обход графов — DFS, BFS и другие методы

Динамическое программирование

Решение задач через разбиение на подзадачи с запоминанием результатов.

Классические задачи:

  • Динамическое программирование — решение задач через подзадачи

Жадные алгоритмы

Алгоритмы, которые делают локально оптимальный выбор на каждом шаге.

Основные жадные алгоритмы:

  • Жадные алгоритмы — локально оптимальные решения

Разделяй и властвуй

Алгоритмы, которые разбивают задачу на подзадачи, решают их рекурсивно и объединяют результаты.

Основные алгоритмы:

  • Разделяй и властвуй — разбиение задач на подзадачи

Анализ сложности

Временная сложность

  • O(1) — константное время (доступ к элементу массива)
  • O(log n) — логарифмическое время (бинарный поиск)
  • O(n) — линейное время (линейный поиск)
  • O(n log n) — квазилинейное время (эффективные сортировки)
  • O(n²) — квадратичное время (простые сортировки)
  • O(2ⁿ) — экспоненциальное время (перебор)

Пространственная сложность

  • O(1) — константная память (in-place алгоритмы)
  • O(n) — линейная память (массивы, стеки)
  • O(log n) — логарифмическая память (рекурсия)

Примеры реализации

Быстрая сортировка

function quickSort(arr) {
    if (arr.length <= 1) return arr;
    
    const pivot = arr[Math.floor(arr.length / 2)];
    const left = arr.filter(x => x < pivot);
    const middle = arr.filter(x => x === pivot);
    const right = arr.filter(x => x > pivot);
    
    return [...quickSort(left), ...middle, ...quickSort(right)];
}

Бинарный поиск

function binarySearch(arr, target) {
    let left = 0;
    let right = arr.length - 1;
    
    while (left <= right) {
        const mid = Math.floor((left + right) / 2);
        if (arr[mid] === target) return mid;
        if (arr[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    return -1;
}

DFS (рекурсивный)

function dfs(graph, start, visited = new Set()) {
    visited.add(start);
    console.log(start);
    
    for (const neighbor of graph[start]) {
        if (!visited.has(neighbor)) {
            dfs(graph, neighbor, visited);
        }
    }
}

Когда использовать какой алгоритм?

Сортировка

  • Небольшие массивы (< 50 элементов): сортировка вставками
  • Стабильность важна: сортировка слиянием
  • Общий случай: быстрая сортировка
  • Гарантированная производительность: сортировка кучей

Поиск

  • Неотсортированные данные: линейный поиск
  • Отсортированные данные: бинарный поиск
  • Графы: DFS для исследования, BFS для кратчайшего пути

Оптимизация

  • Перекрывающиеся подзадачи: динамическое программирование
  • Жадный выбор работает: жадные алгоритмы
  • Большие задачи: разделяй и властвуй

Преимущества изучения алгоритмов

  • Развивает логическое мышление — учит разбивать сложные задачи
  • Повышает эффективность кода — помогает выбирать оптимальные решения
  • Готовит к собеседованиям — основа технических интервью
  • Расширяет кругозор — знакомит с различными подходами к решению задач

Недостатки

  • Требует практики — нужно много решать задач
  • Абстрактные концепции — некоторые алгоритмы сложны для понимания
  • Много деталей — нужно помнить особенности каждого алгоритма

Алгоритмы — это искусство решения задач эффективно!

Copyright © 2026