
Курс знайомить студентів з фундаментом, на якому тримається вся розробка програмного забезпечення: тим, як ефективно організувати дані в пам'яті та як розв'язувати задачі за скінченну кількість зрозумілих кроків. Студенти вчаться бачити за конкретною задачею алгоритм, обирати для неї відповідну структуру даних і оцінювати, скільки часу та пам'яті знадобиться розв'язку.
Розглядаються основи аналізу алгоритмів і складності, масиви та представлення даних у пам'яті, рекурсія, базові та швидкі алгоритми сортування, лінійні структури даних (стек, черга, дек), бінарний пошук і дерева. Теоретичну основу курсу становлять класичні підходи, викладені в «Мистецтві програмування» Д. Кнута, а приклади подаються мовою незалежного від мови програмування псевдокоду.
Практична частина — лабораторні роботи з короткими індивідуальними завданнями на реалізацію вивчених алгоритмів (рекомендована мова — C, допускається будь-яка інша). Завдання наближені до побутових ситуацій і типових запитань на технічних співбесідах.
Після завершення курсу студент уміє аналізувати та порівнювати алгоритми, реалізовувати основні структури даних і сортування, застосовувати рекурсію та пошук, а також обґрунтовано вибирати підхід до розв'язання прикладних задач.
- Teacher: Роман Петришин