Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ _deps
.cache/*
.vscode/*
build/*
cmake-build-debug/*
.idea/

# Allow expected outputs for tests to be committed
!**/tests/*.out
!**/tests/**/*.out
!**/tests/**/*.out
63 changes: 48 additions & 15 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,21 +1,54 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)

project(homeworks)
project(homeworks LANGUAGES CXX)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib)
option(BUILD_SANDBOX "Build sandbox targets" OFF)
option(BUILD_ADDITIONAL_TASKS "Build additional tasks" OFF)
set(BUILD_TASK "" CACHE STRING "Build only one task, for example task_07")

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sandbox)
set(HOMEWORK_TASKS
task_01
task_02
task_03
task_04
task_05
task_06
task_07
task_08
task_09
task_10
task_11
task_12
task_13
task_14)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/additional_tasks)
list(FIND HOMEWORK_TASKS "${BUILD_TASK}" build_task_index)

file(GLOB_RECURSE tasks_dirs LIST_DIRECTORIES true ".")
if(BUILD_TASK AND build_task_index EQUAL -1)
message(FATAL_ERROR "Unknown BUILD_TASK='${BUILD_TASK}'. Expected one of: ${HOMEWORK_TASKS}")
endif()

foreach(dir ${tasks_dirs})
IF(IS_DIRECTORY ${dir})
IF(${dir} MATCHES "task_[0-9][0-9]$" AND NOT ${dir} MATCHES "build")
add_subdirectory(${dir})
ENDIF()
ELSE()
CONTINUE()
ENDIF()
endforeach()
add_subdirectory(lib)

include(CTest)

if(BUILD_TESTING)
find_package(GTest REQUIRED)
include(GoogleTest)
endif()

if(BUILD_TASK)
add_subdirectory(${BUILD_TASK})
else()
foreach(task IN LISTS HOMEWORK_TASKS)
add_subdirectory(${task})
endforeach()

if(BUILD_SANDBOX)
add_subdirectory(sandbox)
endif()

if(BUILD_ADDITIONAL_TASKS)
add_subdirectory(additional_tasks)
endif()
endif()
17 changes: 7 additions & 10 deletions additional_tasks/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,11 @@ cmake_minimum_required(VERSION 3.10)

project(additional_tasks)

file(GLOB_RECURSE tasks_dirs LIST_DIRECTORIES true ".")
file(GLOB additional_entries RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*")

foreach(dir ${tasks_dirs})
IF(IS_DIRECTORY ${dir})
IF(NOT ${dir} MATCHES ".*src.*")
add_subdirectory(${dir})
ENDIF()
ELSE()
CONTINUE()
ENDIF()
endforeach()
foreach(entry ${additional_entries})
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${entry}" AND
EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${entry}/CMakeLists.txt")
add_subdirectory(${entry})
endif()
endforeach()
37 changes: 37 additions & 0 deletions cmake/AddHomeworkTask.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
function(add_homework_task)
set(options)
set(one_value_args NAME)
set(multi_value_args SOURCES TEST_SOURCES INCLUDE_DIRS)
cmake_parse_arguments(TASK "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN})

if(NOT TASK_NAME)
message(FATAL_ERROR "add_homework_task requires NAME")
endif()

if(NOT TASK_SOURCES)
message(FATAL_ERROR "add_homework_task(${TASK_NAME}) requires SOURCES")
endif()

add_executable(${TASK_NAME} ${TASK_SOURCES})
target_compile_features(${TASK_NAME} PRIVATE cxx_std_23)
target_include_directories(
${TASK_NAME}
PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/src"
${TASK_INCLUDE_DIRS}
)
target_link_libraries(${TASK_NAME} PRIVATE Utils)

if(BUILD_TESTING AND TASK_TEST_SOURCES)
add_executable(${TASK_NAME}_tests ${TASK_TEST_SOURCES})
target_compile_features(${TASK_NAME}_tests PRIVATE cxx_std_23)
target_include_directories(
${TASK_NAME}_tests
PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/src"
${TASK_INCLUDE_DIRS}
)
target_link_libraries(${TASK_NAME}_tests PRIVATE GTest::gtest_main Utils)
gtest_discover_tests(${TASK_NAME}_tests)
endif()
endfunction()
120 changes: 60 additions & 60 deletions doc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,83 +4,83 @@

1 лекция.

- Определение алгоритма. Примеры простых алгоритмов: вычисление числа Фибоначчи, проверка числа на простоту, быстрое возведение в степень.
- Асимптотические обозначения, работа с ними.
- Определение структуры данных, абстрактного типа данных (интерфейса).
- Массив. Линейный поиск. Бинарный поиск.
- [Определение алгоритма. Примеры простых алгоритмов: вычисление числа Фибоначчи, проверка числа на простоту, быстрое возведение в степень.](topic0/question1.md)
- [Асимптотические обозначения, работа с ними.](topic0/question2.md)
- [Определение структуры данных, абстрактного типа данных (интерфейса).](topic0/question3.md)
- [Массив. Линейный поиск. Бинарный поиск.](topic0/question4.md)

# ТЕМА 1. БАЗОВЫЕ СТРУКТУРЫ ДАННЫХ

1 лекция.

- Динамический массив.
- Амортизационный анализ. Метод потенциалов. Метод монето
- Амортизированное (учетное) время добавления элемента в динамический массив.
- [Двусвязный и односвязный список. Операции. Объединение списков.](topic1/question5.md)
- [Стек.](topic1/question6.md)
- [Очередь.](topic1/question7.md)
- [Дек.](topic1/question8.md)
- Хранение стека, очереди и дека в массиве. Циклическая очередь в массиве.
- Хранение стека, очереди и дека в списке.
- Поддержка минимума в стеке.
- Представление очереди в виде двух стеков. Время извлечения элемента.
- Поддержка минимума в очереди.
- [Динамический массив.](topic1/question1.md)
- [Амортизационный анализ. Метод потенциалов. Метод монето](topic1/question2.md)
- [Амортизированное (учетное) время добавления элемента в динамический массив.](topic1/question3.md)
- [Двусвязный и односвязный список. Операции. Объединение списков.](topic1/question4.md)
- [Стек.](topic1/question5.md)
- [Очередь.](topic1/question6.md)
- [Дек.](topic1/question7.md)
- [Хранение стека, очереди и дека в массиве. Циклическая очередь в массиве.](topic1/question8.md)
- [Хранение стека, очереди и дека в списке.](topic1/question9.md)
- [Поддержка минимума в стеке.](topic1/question10.md)
- [Представление очереди в виде двух стеков. Время извлечения элемента.](topic1/question11.md)
- [Поддержка минимума в очереди.](topic1/question12.md)
- [Двоичная куча. АТД “Очередь с приоритетом”.](topic1/question13.md)

# ТЕМА 2. СОРТИРОВКИ И ПОРЯДКОВЫЕ СТАТИСТИКИ

3 лекции.

- Формулировка задачи. Устойчивость.
- Квадратичные сортировки: сортировка вставками, выбором.
- Сортировка слиянием.
- Сортировка с помощью кучи.
- Нижняя оценка времени работы для сортировок сравнением.
- Поиск числа инверсий
- Быстрая сортировка. Выбор опорного элемента. Доказательство среднего времени работы.
- Сортировка подсчетом. Карманная сортировка.
- Поразрядная сортировка.
- MSD, LSD. Сортировка строк.
- Поиск k-ой порядковой статистики методом QuickSelect.
- Поиск k-ой порядковой статистики за линейное время.
- [Формулировка задачи. Устойчивость.](topic2/question1.md)
- [Квадратичные сортировки: сортировка вставками, выбором.](topic2/question2.md)
- [Сортировка слиянием.](topic2/question3.md)
- [Сортировка с помощью кучи.](topic2/question4.md)
- [Нижняя оценка времени работы для сортировок сравнением.](topic2/question5.md)
- [Поиск числа инверсий](topic2/question6.md)
- [Быстрая сортировка. Выбор опорного элемента. Доказательство среднего времени работы.](topic2/question7.md)
- [Сортировка подсчетом. Карманная сортировка.](topic2/question8.md)
- [Поразрядная сортировка.](topic2/question9.md)
- [MSD, LSD. Сортировка строк.](topic2/question10.md)
- [Поиск k-ой порядковой статистики методом QuickSelect.](topic2/question11.md)
- [Поиск k-ой порядковой статистики за линейное время.](topic2/question12.md)

# ТЕМА 3. ДЕРЕВЬЯ ПОИСКА

4 лекции.

- [Определение дерева, дерева с корнем. Высота дерева, родительские, дочерние узлы, листья. Количество ребер.](topic3/question1-2-3.md)
- [Обходы в глубину. Pre-order, post-order и in-order для бинарных деревьев.](topic3/question1-2-3.md)
- [Обход в ширину.](topic3/question1-2-3.md)
- [Дерево поиска.](topic3/question4-5-6.md)
- [Поиск ключа, вставка, удаление.](topic3/question4-5-6.md)
- [Необходимость балансировки. Три типа самобалансирующихся деревьев.](topic3/question4-5-6.md)
- Декартово дерево. Оценка средней высоты декартового дерева при случайных приоритетах (без доказательства).
- Построение за O(n), если ключи упорядочены.
- Основные операции над декартовым деревом.
- АВЛ-дерево. Вращения.
- Оценка высоты АВЛ-дерева.
- Операции вставки и удаления в АВЛ-дереве.
- Красно-черное дерево.
- Оценка высоты красно-черного дерева.
- Операции вставки и удаления в красно-черном дереве.
- Сплей-дерево. Операция Splay.
- Поиск, вставка, удаление в сплей-дереве.
- Учетная оценка операций в сплей-дереве = O(log n) .
- B-деревья.
- [Определение дерева, дерева с корнем. Высота дерева, родительские, дочерние узлы, листья. Количество ребер.](topic3/question1.md)
- [Обходы в глубину. Pre-order, post-order и in-order для бинарных деревьев.](topic3/question2.md)
- [Обход в ширину.](topic3/question3.md)
- [Дерево поиска.](topic3/question4.md)
- [Поиск ключа, вставка, удаление.](topic3/question5.md)
- [Необходимость балансировки. Три типа самобалансирующихся деревьев.](topic3/question6.md)
- [Декартово дерево. Оценка средней высоты декартового дерева при случайных приоритетах (без доказательства).](topic3/question7.md)
- [Построение за O(n), если ключи упорядочены.](topic3/question8.md)
- [Основные операции над декартовым деревом.](topic3/question9.md)
- [АВЛ-дерево. Вращения.](topic3/question10.md)
- [Оценка высоты АВЛ-дерева.](topic3/question11.md)
- [Операции вставки и удаления в АВЛ-дереве.](topic3/question12.md)
- [Красно-черное дерево.](topic3/question13.md)
- [Оценка высоты красно-черного дерева.](topic3/question14.md)
- [Операции вставки и удаления в красно-черном дереве.](topic3/question15.md)
- [Сплей-дерево. Операция Splay.](topic3/question16.md)
- [Поиск, вставка, удаление в сплей-дереве.](topic3/question17.md)
- [Учетная оценка операций в сплей-дереве = O(log n) .](topic3/question18.md)
- [B-деревья.](topic3/question19.md)

# ТЕМА 4. ХЕШ-ТАБЛИЦЫ

2 лекции.

- Хеш-функции. Остаток от деления, мультипликативная.
- Деление многочленов - CRC.
- Полиномиальная. Ее использование для строк. Метод Горнера для уменьшения количества операций умножения при ее вычислении.
- [Хеш-функции. Остаток от деления, мультипликативная.](topic4/question1.md)
- [Деление многочленов - CRC.](topic4/question2.md)
- [Полиномиальная. Ее использование для строк. Метод Горнера для уменьшения количества операций умножения при ее вычислении.](topic4/question3.md)
- [Хеш-таблицы. Понятие коллизии.](topic4/question4.md)
- [Метод цепочек (открытое хеширование).](topic4/question5.md)
- Метод прямой адресации (закрытое хеширование).
- Линейное пробирование. Проблема кластеризации.
- Квадратичное пробирование.
- Двойное хеширование.
- [Метод прямой адресации (закрытое хеширование).](topic4/question6.md)
- [Линейное пробирование. Проблема кластеризации.](topic4/question7.md)
- [Квадратичное пробирование.](topic4/question8.md)
- [Двойное хеширование.](topic4/question9.md)

# ТЕМА 5. ЖАДНЫЕ АЛГОРИТМЫ И ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

Expand All @@ -94,9 +94,9 @@

2 лекция

- Задача о рюкзаке. Жадный и динамический подходы
- Почему нет решения задачи о рюкзаке жадным методом?
- ДП на матрицах. Числа Фиббоначи
- ДП на матрицах. Кол-во путей в графе из u в v длины ровно k
- ДП на матрицах. Кол-во путей в графе из u в v длины <= k
- ДП на матрицах. Есть ли хотя бы один путь из u в v длины ровно k?
- [Задача о рюкзаке. Жадный и динамический подходы](topic5/question6.md)
- [Почему нет решения задачи о рюкзаке жадным методом?](topic5/question7.md)
- [ДП на матрицах. Числа Фиббоначи](topic5/question8.md)
- [ДП на матрицах. Кол-во путей в графе из u в v длины ровно k](topic5/question9.md)
- [ДП на матрицах. Кол-во путей в графе из u в v длины <= k](topic5/question10.md)
- [ДП на матрицах. Есть ли хотя бы один путь из u в v длины ровно k?](topic5/question11.md)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/topic0/img/binary-search-sequence-search.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading