Введение в анализ алгоритмов
Цель курса - дать необходимые знания по анализу алгоритмов для программистов, которые готовятся к прохождению технического собеседования. В курсе затронуты темы: масштабируемый и качественный код, определение "О" большого, правила и примеры расчета "О" большого.
КОМУ ПОДОЙДЕТ КУРС
Опытным программистам, которые уверенно себя чувствуют с хотя бы одним языком программирования, и хотят углубить свои знания в теме алгоритмов.
Добро пожаловать в мой курс! = )
Название | Дата/Время | Длительность |
---|---|---|
Введение в анализ алгоритмов | 8 февраля 2023 г. в | Минут(ы) |
Правило 1
О Большое
O(1) Константное время - нет циклов
O(logN) Логарифмическое время - обычно в алгоритмах поиска (двоичный поиск)
O(n) Линейное время - циклы for / while по n элементам
O(n*logN) - обычно в операциях сортировки
O(n^2) Квадратичное время - вложенные циклы
O(2^n) Экспоненциальное время - рекурсивные алгоритмы, которые решают задачу размера N
O(n!) Факториал - добавляем цикл для каждого элемента
Что может влиять на временную сложность?
Операции (+, -, *, /)
Сравнения (<, >, ==)
Циклы (for, while)
Вызов внешних функций - function()
Правила
Рассматриваем худший сценарийОтбрасываем константыИспользуем разные обозначения для разных переменныхОтбрасываем младшие членыПомнить!
а. Обход половины коллекции - все равно O(n)
б. Две отдельные коллекции - O(n + m)
Что может влиять на пространственную сложность?
Переменные
Структуры данных
Вызовы функций
Выделение памяти (allocation)