16 онлайн-занять
[щопонеділка та щосереди]
Комплексний курс про те, як знаходити нестандартні рішення у складних робочих задачах, оптимізувати рядки програмного коду та масштабувати ІТ-системи, спираючись на знання з алгоритміки.
щоби не просто копіпастити «милиці», а розбиратися в архітектурних підходах, дотримуватися стилю, писати чистий код і мінімізувати системні баги.
щоби здобути практичний досвід розв'язання задач з алгоритміки, навчитися адаптувати класичні методи під свої задачі, винаходити на їхній основі власні рішення та впроваджувати фічі, які покращать продукт.
щоби розібратися у структурах даних і писати досконалі алгоритми для машинного навчання: наприклад, для навчання з учителем ви застосуєте структуру типу «дерево» або «граф», для навчання без учителя ― алгоритми сортування.
Алгоритми ― це не нудна теорія, яка потрібна лише на співбесідах. Це реальний ефективний інструмент, який допомагає розробнику знаходити неординарні розвʼязки складних задач програмування та проєктувати системи, здатні до швидкого масштабування.
Розібратись у видах алгоритмів та структур даних вам допоможе цей курс. Спочатку ми на реальних прикладах ознайомимося з типами задач, які можна розв’язати за допомогою алгоритмів. Потім навчимося працювати з різними структурами даних та застосовувати класичні алгоритми: від бульбашкового сортування до динамічного програмування. Алгоритми розбиратимемо разом із лектором на практиці мовами Java, JavaScript і Python.
Лектор поділиться особистим досвідом застосування алгоритмів, ознайомить вас із класичними методами розв’язання завдань та навчить структурувати дані для максимально ефективного використання.
Ви навчитеся розв’язувати робочі завдання за допомогою класичних методів, опануєте алгоритми сортування [бульбашкове, швидке, сортування вставкою/вибором/злиттям], бінарні та збалансовані дерева, графи, хеш-функції та хеш-таблиці, одновимірні та двовимірні завдання динамічного програмування.
Ви розбиратимете алгоритми мовами Python, Java, JavaScript. Однією із цих мов на ваш вибір писатимете домашні завдання, а лектор даватиме фідбек щодо вашого коду. Після цього ви отримуватимете повний розбір задач і зможете трекати свої помилки. Також будуть онлайн-зустрічі зі студентами без лектора для обговорення домашніх завдань і нетворкінгу.
Ви закриєте прогалини в знаннях та підготуєтеся до problem solving interview у великій IT-компанії. Для 3 найкращих студентів лектор проведе тестове технічне інтерв’ю чи особисту консультацію.

- Розберетеся в тому, що таке алгоритми та структури даних.
- Дізнаєтеся, у яких сферах використовують алгоритми та які завдання вони вирішують.
- На реальних прикладах із життя та технічних прикладах із практики лектора навчитеся визначати складність алгоритмів.
- Навчитеся обробляти масиви та виконувати прості операції над ними [доступ, пошук, вставка, видалення].
- Розберете кілька різних завдань з роботи з масивами.
- Навчитеся визначати тимчасову складність і складність пам’яті масивів.
- Навчитеся проводити різні операції зі зв’язаними списками, стеками, чергами.
- Розберете та розв’яжете типові завдання на зв’язані списки, наприклад, спробуєте видалити з нього дублікати.
- Розв’яжете завдання зі стеками та чергами, наприклад, здійсните перевірку вкладених дужок.
- Навчитеся перетворювати стеки на черги й навпаки.
- Дізнаєтеся, коли та навіщо застосовувати рекурсію.
- Розберете типові рекурсивні завдання та навчитеся реалізовувати алгоритми із застосуванням рекурсії.
- Розрахуєте n-й елемент для послідовності Фібоначчі за допомогою рекурсії.
- Розберетеся у видах алгоритмів пошуку та сортування.
- Дізнаєтеся, що таке бінарний пошук та навчитеся реалізовувати завдання із застосуванням бінарного алгоритму.
- Визначите різницю між тимчасовою складністю та складністю пам’яті.
- Ознайомитеся із бульбашковим сортуванням, сортуванням вставками та сортуванням вибором.
- Застосуєте ці алгоритми на практиці та розв’яжете із ними задачі.
- Навчитеся сортувати масиви даних.
- Реалізуєте сортування злиттям та швидке сортування.
- Навчитеся вибирати вид алгоритму відповідно до конкретного завдання та знаходити оптимальний спосіб розв’язання.
- Дізнаєтеся, як структура даних «дерево» допомагає зберігати ієрархічну інформацію.
- Розберете види деревоподібних структур даних.
- Зрозумієте, чим бінарне дерево відрізняється від дерева загального вигляду.
- Навчитеся знаходити спільного предка, визначати діаметр дерева та зв’язки між вузлами.
- Напишете алгоритм знаходження k-го елемента в масиві.
- Дізнаєтеся, які підходи можна застосувати для розв’язання типових завдань із бінарними деревами пошуку.
- Детально вивчите структуру AVL-дерева, червоно-чорних дерев та інші види збалансованих дерев.
- Ознайомитеся із сучасними варіантами деревоподібних структур [дерево Фенвіка, дерево відрізків].
- Навчитеся розв’язувати класичні завдання з використанням збалансованих дерев.
- Дізнаєтесь, які бувають графи.
- Навчитеся реалізовувати матрицю суміжності та основні алгоритми обходу.
- Знайдете мінімальне кістякове дерево в неорієнтованому навантаженому графі.
- Навчитеся реалізовувати алгоритми знаходження найкоротшого шляху та алгоритми обходу [у ширину, у глибину].
- Реалізуєте задачі за допомогою вивчених методів на графи, наприклад, визначите кількість одноциклових компонентів на графіку або знайдете вузол із мінімальною абсолютною різницею із заданим значенням.
- Дізнаєтеся, для яких завдань застосовують хеш-функції, та розберете реальні кейси.
- Вивчите структуру даних хеш-таблиці.
- Навчитеся реалізовувати схему для знаходження колізій та запобігання колізій у хеш-таблицях та структурах даних.
- Перевірите, чи є один масив частиною іншого і знайдете перше повторення елемента масиву.
- Розберетеся в поняттях: динамічний масив, двійкова купа та пірамідальне сортування.
- Розберете на прикладах одновимірні та двовимірні завдання динамічного програмування.
- Навчитеся визначати прості завдання на динаміку та знаходити розв’язання до них.
- Навчитеся розв’язувати задачі методом динамічного програмування за під відрізками та динамічного програмування за підмножинами.
- Розберетеся в алгоритмах кешування.
- Навчитеся оптимізувати тимчасову та обчислювальну складність [time and space complexity].
- Дізнаєтеся, навіщо застосовують жадібні алгоритми.
- Навчитеся оптимізувати алгоритми за графами.
- Підберете найкращий алгоритм для запропонованого завдання, самостійно розв’яжете задачу, потім аргументуєте свій вибір і розв’язання перед лектором.
- Отримаєте перелік типових завдань для технічного інтерв’ю.
- Виберете найбільш вдалий алгоритм для розв’язання кожного завдання.
- Реалізуєте розв’язання під час заняття з обмеженими часовими межами.
- Навчитеся швидко приймати рішення щодо оптимізації програмного коду та аргументувати ці рішення.