итераторов существуют? Зачем они вообще нужны? Какие итераторы поддерживает каждый из контейнеров, упомянутых в предыдущих двух вопросах?
37. Что такое компараторы? Что такое функциональные объекты? Приведите хоть один пример.
38. Для чего нужна move-семантика? Расскажите в общих чертах, что это такое. Для чего нужна функция std::move и что она делает? Что такое lvalue, rvalue, prvalue, glvalue и xvalue? Что такое rvalue-ссылки и в чем их особенности, в чем отличия от обычных ссылок?
39. Что такое perfect forwarding? Для чего нужна функция std::forward и что она делает?
40. В каких контекстах применимо ключевое слово auto? Для чего нужно ключевое слово decltype? Для чего нужна конструкция decltype(auto)?
41. Что такое умные указатели? Для решения каких проблем они нужны? Расскажите об операциях, которые поддерживает класс std::shared_ptr. Как (в общих чертах) он устроен изнутри?
42. Что такое аллокаторы? Что из себя представляет класс std::allocator, как и для чего он используется?
43. Что такое лямбда-выражения, каков их синтаксис? Приведите хоть один пример использования.
44. Что такое SFINAE? Для чего нужна структура std::enable_if, как она устроена и как ей пользоваться?
45. Динамическое программирование (ДП): задача о кузнечике (набор максимальной суммы на массиве), задача о черепашке (набор минимальной суммы на таблице), задача о наибольшей общей подпоследовательности.
46. Задача о рюкзаке: решение с помощью динамического программирования.
47. Задача коммивояжера: решение за O(2^n * n^2).
48. Динамическое программирование по профилю. Задача о симпатичных узорах (количество раскрасок таблицы в 2 цвета без одноцветных квадратиков 2х2), ее решение за O(4^n * (n+m)).
49. Задача о наибольшей возрастающей подпоследовательности. Решение за O(n log n) с помощью ДП и с помощью ДО.
50. Определение графа, орграфа, пути, простого пути, цикла, простого цикла. Связность графа. Способы представления графа в памяти.
51. Обход в ширину (BFS), оценка времени работы, реализация.
52. Обход в глубину (DFS), оценка времени работы, реализация.
53. Топологическая сортировка. Решение за O(m+n), доказательство корректности и реализация.
54. Поиск компонент сильной связности в ориентированном графе, алгоритм Косарайю.
55. Поиск мостов и точек сочленения в графе за O(m+n), доказательство корректности.
56. Определение дерева. Поиск диаметра в дереве, оценка времени работы.
57. Задача о кратчайших путях. Алгоритм Дейкстры. Реализация за O(m log n) и за O(n^2).
58. Алгоритм Форда-Беллмана, оценка времени работы и реализация. Поиск циклов отрицательного веса в графе.
59. Алгоритм Флойда-Уоршелла, оценка времени работы и реализация.
60. Система непересекающихся множеств (DSU). Эвристика по рангу и эвристика сжатия путей, оценка времени работы б/д.
61. Задача о минимальном остовном дереве. Алгоритм Крускала. Оценка времени работы.
62. Алгоритм Прима, оценка времени работы.
63. Паросочетания. Алгоритм Куна поиска наибольшего паросочетания в двудольном графе.
64. Теорема Форда-Фалкерсона. Алгоритм Эдмондса-Карпа поиска максимального потока в графе за O(n * m^2).
65. Алгоритм Диница, оценка времени работы, реализация за O(n^2 * m).
Post #119
105