Вступительный семинар (11 сентября 2013)
- Упражение на O-шки
- f = O(Θ(O(g))
- f = O(Θ(Ω(g))
- f = Θ(Ω(Θ(g))
- Соцопрос
- Алгоритмы (bfs, Дейкстра, Эдмондс, нахождение вещественных корней многочлена)
- Математика (простые числа, комплексные числа, ортоганализация Грамма-Шмидта, Тоерема Рисса, интегральчик)
- Языки программирования (C++, Java, Python, Haskell, ASM, Pascal)
- Даны N натуральных чисел, найти кол-во различных
- За O(NlogN) с использованием сортировки
- За O(N), если исходные числа от 1 до N (
used[a[i]] = 1
)
- За O(N), если исходные числа произвольные (хеш-таблица)
- Самая простая реализация хеш-таблицы (
List L[M]; a[i] → L[a[i]%M]
)
- Решить в натуральных числах уравнение N = x2 + y2
- За O(N)
- За O(√ N )
- За O(√ N ) и без извлечения корня
- Как еще оптимизировать: убрать все умножения (-20%), минимизировать количество сложений/вычитаний/сравнений (еще -10%)
- Дано N, найти натуральные x, y, z: N = xyz, и величина 2(xy + yz + zx) минимальна
- За O(N3)
- За O(N2)
- За O(N1/3N1/2) − x ≤ y ≤ z поэтому x ≤ N1/3, y ≤ N1/2
- За O(N1/2 + Neps) − нашли все делители числа N, перебираем x, y, z, как делители числа
- Количество делителей: 109 → 103; 1018 → 105
- Даны N различных чисел от 1 до N, найти количество треугольников, длины сторон которых выбираются из данных N чисел
- За O(N3)
- За O(N2) − метод двух указателей
- Доказательство, что метод двух указателей работает за O(N)
- Теория чисел
- Проверка числа на простоту за O(√ N )
- Разложение числа на простые за O(√ N )
- Нахождение всех делителей числа за O(√ N )
- Проверка k чисел на простоту за O(√ N (1 + k / logn))
- Сложение матриц
- Два варианта написать циклы for: (for i, for j) и (for j, for i)
- Кеши и оперативная память: 4K, 4M, 4G. Кешируется ровно один из вариантов.
- Подсчет асимптотики
- Умеем считать циклы for
- Простой пример на амортизационный анализ анализ: Add(x) добавить x, Del(k) удалить последние k элементов. Среднее время работы Del = O(1).
- T(n) = T(n-1) + T(n-3), ищем ответ в виде an, находим его бинпоиском
- Упражения на дом
- Доказать, что D(N) = O(Neps) для любого eps > 0