Algorithms in Practice
Solve problems at the speed of thought.
400 $/місяць
пн / чт, 18:30 (UTC+3)
старт:
23 лип. 2026 р.
40 занять, 4 місяці
400 $/місяць
пн / чт, 18:30 (UTC+3)

про курс
Алгоритми та структури даних — фундамент, який працює в будь-якій мові програмування, але на рівні middle/senior справа вже не в тому, щоб їх "знати". Справа в тому, щоб вміти виводити рішення з обмежень задачі — від наївного підходу до оптимального, з усвідомленням trade-offs на кожному кроці. Саме цьому ми й вчимо: не запам'ятовувати готові розв'язки, а думати так, щоб приходити до них самостійно.
На курсі ми починаємо з ключових ідей, розбираємо їх глибоко й системно, а потім закріплюємо на великій кількості прикладів та продакшн-кейсів. У результаті ви зможете впевнено розв’язувати задачі рівня LeetCode Hard, проходити техспівбесіди в Big Tech, оптимізувати legacy-код і краще розуміти внутрішню логіку складних систем. Курс побудований як траєкторія: кожна наступна тема логічно виростає з попередньої, а інструменти з’являються саме тоді, коли стають потрібними для наступного кроку — так формується цілісна картина, а не набір розрізнених технік.
Це курс-виклик. 40 занять, сотні задач, код кожного тижня. Тих, хто не виконує домашки — відраховуємо. Тих, хто залишається — чекає розбір їхнього коду, живі дискусії та оточення інженерів, які теж хочуть стати сильнішими. Найкращі студенти наприкінці курсу отримають mock-інтервʼю з інженером із FAANG з персональним фідбеком.
Навчальний план
буде гаряче
ДЛЯ ІНЖЕНЕРІВ
Analysis of algorithms
Thinking in constraints: від Big-O на папері до аналізу реального production-коду
• Time complexity: цикли, вкладені цикли, рекурсія
• Space complexity: стек рекурсії, heap allocations, вартість копіювання структур даних і приховані витрати пам'яті
• Асимптотичний аналіз складних ітеративних та рекурсивних алгоритмів
• Аналіз ймовірнісних алгоритмів та структур даних: коли точна відповідь надто дорога
Практика
• Реальний кейс з інфраструктури Facebook — серед мільйонів клієнтів знайти того єдиного, що DDOS-ить сервіс, маючи в пам'яті лише дві змінні. Розбираємо, чому хеш-таблиця тут програє і як алгоритм 1981 р. дає O(1) пам'яті за один прохід
• Беремо реальний бекенд із CRUD-ендпоінтами. Розбираємо Big-O кожного методу. Вчимося бачити справжню ціну кожного рядка коду крізь абстракції фреймворку
Brute force algorithms
Від collision detection в іграх до convex hull у computer vision — як перебір вирішує реальні задачі, коли його правильно застосувати
• Ітеративний перебір як baseline: коректне просте рішення, від якого відштовхуємося в оптимізації
• Як з аналізу коду зрозуміти, чи пройде рішення за часом і пам'яттю, ще до написання коду
• Stress testing — техніка, якою ловлять баги, що проходять крізь звичайні unit-тести
Практика
• Closest pair of points: серед тисяч об'єктів на екрані знайти два найближчі — задача, що виникає у collision detection в іграх, фізичних симуляціях і кластеризації даних
• Convex hull: побудувати мінімальну опуклу оболонку, що охоплює задану множину точок — задача, що лежить в основі визначення меж об'єктів у комп'ютерному зорі, виявлення колізій у CAD-системах та оптимізації маршрутів
Recursion & Backtracking & Heuristic search
Від хвостової рекурсії до регулярних виразів. Як використовувати рекурсію для комбінаторики, парсингу та евристичного пошуку
• Рекурсія як декомпозиція: звести задачу до меншої копії себе і не втратити контроль над глибиною стека
• Класичні рекурсивні задачі: fast exponentiation (fast pow), towers of hanoi algorithm, recursive expression evaluation
• Backtracking з відсіканням — як не перебирати очевидно мертві гілки
• Генерація перестановок, підмножин, розміщень, комбінацій — каркас під будь-яку переборну задачу
• Хвостова рекурсія та Tail Call оптимізація
• Beam Search: як шукати не ідеальний, а достатньо хороший розвʼязок
Практика
• Пишемо мінімальний regex engine. Чому деякі регулярки "вбивають" сервіс через catastrophic backtracking (ReDoS) — реальний клас вразливостей
• Рекурсивний спуск, що парсить і рахує арифметичний вираз з дужками й пріоритетами — той самий кістяк, що в інтерпретаторах і калькуляторах
• 8 Queens і Sudoku Solver: як рекурсивно будувати розвʼязок, швидко перевіряти обмеження та відсікати неможливі гілки до того, як перебір вибухне
Two pointers & Sliding window & Prefix sums
Як перетворити O(n²) на O(n): техніки, що стоять за face detection у camera hardware, OLAP-запитами в базах даних та половиною LeetCode-задач у FAANG-інтерв'ю
• Two pointers: opposite ends і same direction — паттерни, що перетворюють O(n²) на O(n) без зміни ідеї алгоритму
• Sliding window: робота з рухомим вікном даних і умови монотонності, за яких воно працює
• Prefix sums: O(1) на запит про суму діапазону замість O(n) — фундамент під range queries
• 2D prefix sums та integral images: основа Viola–Jones face detection, що досі живе у camera hardware
• Difference arrays: bulk-оновлення діапазонів за O(1) на запит — як це працює у системах бронювання
Практика
• Алгоритм, що лежить в основі SQL JOIN, повнотекстового пошуку (inverted index у Google і Elasticsearch) та рекомендацій типу «common friends» у соцмережах
• Реалізуємо integral image — структуру з 2D prefix sums, яку у 2001 році використали в алгоритмі Viola–Jones для першого face detection у реальному часі на CPU тих років
Binary search & Galloping search & Range queries
Autocomplete, git bisect, запит до бази, навіть підбір параметра в ML — це все пошук. Заглянемо під капот і розберемо нюанси реалізації
• Інваріанти як спосіб писати код без помилок. Binary search без off-by-one — раз і назавжди, замість вгадування <= чи <
• Лінійний пошук для гри Minesweeper та Run-length encoding. Sentinel linear search
• Коренева декомпозиція (sqrt decomposition): техніка для прискорення коду. Коли segment tree — overkill?
• Binary search не по масиву, а по відповіді: шукаємо мінімальне валідне значення, коли явного відсортованого масиву взагалі немає
• Binary search на невідсортованих і «майже відсортованих» даних
• Jump search і Galloping search: коли бінарний пошук — не єдиний вихід
• Чи можливо в теорії шукати швидше ніж за log n? Нижня межа складності задачі пошуку
Практика
• git bisect як binary search по комітах: знайти один баг-коміт серед тисяч за log(n) кроків
• Реалізуємо versioned key-value store, який пам'ятає, яке значення мав ключ у будь-який момент часу
• Знайти кінець лога на S3 без сортування. Append-only лог, файли з послідовними номерами, машина впала — треба знайти найбільший номер. Сканувати весь bucket дорого (LIST коштує як PUT), верхньої межі немає
• Скільки насправді коштує «вигідний» автокредит (binary search on answer). Дилер говорить лише про розмір місячного платежу, а справжню процентну ставку — мовчки приховує
Sorting & Divide and Сonquer
Від класичних ідей до неочевидних оптимізацій і сортування гігабайтів даних, що фізично не влазять у RAM
• External sort: як відсортувати 100 GB на машині з 8 GB RAM — те, що реально роблять бази даних і MapReduce
• Quick sort і Quick select: пошук k-ї статистики за O(n) і задача Dutch National Flag
• Зв’язок між Selection sort та Heap sort
• Неасимптотичні оптимізації Merge sort та Insertion sort
• Radix sort: як відсортувати 1 000 000 чисел швидше за Quick sort
• Метод Scanline: обробка подій у відсортованому порядку
Практика
• Як пришвидшити bubble sort в 2 рази, не міняючи основну ідею? А як в 50 разів?
• External merge sort на прикладі того, як PostgreSQL сортує результат ORDER BY, що не вміщається в work_mem
• Розбираємо production-кейс із MongoDB — чому сортування та побудова індексів на великих колекціях можуть впиратися в памʼять і диск
Linear data structures: array & linked list & stack & queue & heap
Глибокий аналіз прикладних структур даних під зберігання, потокову обробку і швидкий доступ
• Динамічні масиви зсередини: amortized O(1) на append, чому ріст саме ×2 і скільки реально коштує append у Python чи push_back у C++
• Як зробити зв'язний список швидким? Skip list на практиці
• Stack зсередини: реалізація через dynamic array і через linked list. Monotonic stack та як він використовується для аналізу ринку акцій
• Queue зсередини: від наївної реалізації до циклічного буфера — розбираємо, чому черга на масиві не повинна зсувати всі елементи після кожного pop, як head і tail перетворюють масив на кільце
• Heap та priority queue: структура для ситуацій, де дані постійно змінюються, але нам завжди треба швидко дістати “найважливіший” елемент
Практика
• TTL у Redis: як expiry мільйонів ключів робиться без сканування всієї бази
• Перевірка коректності XML та RPN для обчислення виразів
• Top-K найпопулярніших елементів в потоці даних
• Union-Find: міста зʼєднуються дорогами, користувачі — у кластери. Як підтримувати це ефективно?
• LRU cache: задача з реальних кешів, браузерів та баз даних
• Як написати свій простий Event loop?
Greedy algorithms
Як жадібні алгоритми допомагають створювати найефективніші стратегії кешування, планування та стиснення даних?
• Коли жадібність взагалі коректна: exchange argument замість «здається, спрацює»
• Кешування як greedy-задача: чому LRU — це лише евристика. Який алгоритм кешування оптимальний?
• Huffman coding: як побудувати оптимальний код без втрат — те, що всередині gzip, JPEG і HTTP-стиснення
• Оптимальне планування подій: коли жадібний підхід працює?
• Minimum Spanning Tree через Kruskal/Prim: найдешевший спосіб з'єднати все — від мереж до кластеризації
Практика
• Реалізуємо Huffman-кодер і стискаємо реальний текстовий файл
• Interval scheduling: максимум несуперечливих задач — основа планувальників, бронювань і розподілу ресурсів
Probabilistic algorithms & data structures
Від класичних hash table до bloom filter: як хешування дозволяє швидко знаходити дані, а на великому масштабі — свідомо міняти точність на памʼять, швидкість і передбачувану похибку
• Чому хеш-таблиці працюють швидко?
• Хеш-функції й колізії: chaining vs open addressing, linear probing, load factor і чому resize неминучий
• Парадокс днів народжень (birthday paradox): чому колізії виникають набагато раніше, ніж здається?
• Bloom Filter: як за крихітну памʼять відповідати “цього точно немає” з ризиком false positive — і економити дорогі походи в БД, як у Cassandra чи Bigtable
• HyperLogLog: порахувати кількість унікальних серед мільярдів за кілька кілобайт — як це рахує unique visitors аналітика
• Rabin–Karp: хешування рядка для пошуку патерну й rolling hash, на якому будується дедуплікація і rsync
Практика
• LSH (Locality-Sensitive Hashing) — як швидко знаходити схожі обʼєкти серед мільйонів, не порівнюючи кожен з кожним
• Reservoir sampling: чесний випадковий семпл із потоку невідомої довжини — те, що працює в MapReduce та аналітиці на льоту
• Shuffle array: як чесно перемішати масив так, щоб кожна перестановка мала однакову ймовірність — від Fisher–Yates до типових помилок у “random sort”, які непомітно ламають випадковість
Dynamic programming
DP — це мистецтво не рахувати те саме двічі. За ним стоять spell-checkers, git diff, вирівнювання тексту в LaTeX і навіть порівняння ДНК
• Від рекурсії з memoization до bottom-up таблиці: одна й та сама ідея під двома кутами, і коли який вигідніший за пам'яттю
• Edit distance (Левенштейн): скільки правок між двома рядками — основа spell-check, fuzzy search і автокорекції
• Sequence alignment: git diff, LCS і той самий алгоритм, що вирівнює ДНК у біоінформатиці
• Задача про гру в Blackjack. Як dynamic programming допомагає рахувати не просто найкращий хід зараз, а найкращу стратегію на кілька кроків уперед
• Задача пакування рюкзака (knapsack problem): ресурсів мало, варіантів багато, а вибрати треба найкращу комбінацію
• Seam Carving — як зменшити картинку, не обрізаючи головне: алгоритм знаходить найменш помітні шляхи пікселів і прибирає саме їх.
Практика
• Реалізуємо edit distance і будуємо на ньому мінімальний «did you mean?» — той самий кістяк, що в пошуку й текстових редакторах
• Як LaTeX та Microsoft Word вирівнюють текст по ширині рядка?
• Robot paths — як навчити робота рахувати всі можливі маршрути на 2d площині?
Graphs and Trees
Соцмережі, файлові системи, залежності мікросервісів і маршрути — це графи в різних формах. Вчимося бачити ці структури й застосовувати bfs, dfs, shortest paths і topological sort на практиці.
• Як ефективно представити граф у памʼяті: adjacency list, matrix, edge list і CSR
• DFS і BFS як два погляди на обхід графу
• Topological sort та виявлення циклів: порядок збірки, розв'язання залежностей, dependency hell у пакетних менеджерах
• Знаходження найкоротших шляхів: Dijkstra vs. Bellman-Ford
• Бінарні дерева пошуку та як їх балансувати: AVL, Treap. Balanced binary search tree vs. randomized tree
• Trie і Ternary Search Tree для префіксного пошуку
Практика
• State machine як граф: вершини — стани системи, ребра — дозволені переходи, і граф ніде не заданий явно
• Пишемо web crawler на BFS — та сама модель, що в основі індексаторів пошуковиків
• Автодоповнення на Trie/TST: префіксний пошук із ранжуванням за популярністю — те, що відпрацьовує під рядком пошуку на кожному великому сайті
• Lowest common ancestor через binary lifting
читає
буде гаряче
ДЛЯ ІНЖЕНЕРІВ

Engineering Lead y @SQUAD, Founder в @CS Osvita.
Former: @Dell Software Engineer, @Fiverr Senior Software Engineer, @Ring Machine Learning Engineer.
Реєстрація. Перший крок за вами
реєстрація
перший крок за вами
Я приймаю умови Публічної оферти та надаю згоду на обробку своїх персональних даних відповідно до Політики конфіденційності.
відгуки
що говорять випускники
ДЛЯ ІНЖЕНЕРІВ
відгуки
що говорять випускники
Говорять
випускники

Software Engineer @Spotify
Олександра Кулик
Курс дуже потужний. Буде корисним і новачкам, і тим, хто має більше досвіду — за рахунок поступового ускладнення задач та алгоритмів, а також опцій для додаткового опрацювання. Зможете відточити комплексний підхід до розв'язання задач будь-якої складності. Раджу на всі 100%

Software Engineer @Apple
Дмитро Пащенко
Cаме тут я знайшов в ідсутню частину пазла, яка заповнила прогалину в моїх знаннях. Це дозволило мені отримувати більш глибоке розуміння технологій, з якими я працюю. Для мене пройти курси було справжнім викликом, але зусилля того вартували.

Senior Software Engineer @Netflix
Дмитро Коваленко
Після місяців підготовки і пари невдалих співбесід, вирішив ґрунтовно зайнятись базою. Потрапив в школу - це було саме те, чого мені не вистачало. Результат не забарився - я в компанії своєї мрії. Раджу пройти навчання щоб виробити звичку освоювати нові теми і вирішувати все складніші задачі, що дуже допоможе у роботі.

Software Engineer @Grammarly
Олексій Згурський
Крутий курс, раджу. Дав чітке розуміння ключових тем та багато практичних навичок.

Senior Java Developer @UKEESS
Андрій Забурянний
Що одразу кидається в очі, так це нереально круто структурована подача матеріалу від Івана. До курсу я думав, що осягнути алгоритми майже неможливо, але під час лекцій все ніби прояснялося на ходу. Вважаю, що кожен розробник зможе закрити якусь прогалину в знаннях завдяки цьому курсу. Окремий респект за домашні завдання та лекційні нотатки. Надзвичайно кайфанув від цього крутого курсу.

Senior Software Engineer @Coursera
Олександр Шень
Чудовий курс! Дуже сподобалося розв'язувати непрості домашні завдання та працювати над задачами аналогічними до продакшену - це чудово доповнює теорію й дає змогу краще зрозуміти пройдений матеріал.

Senior Engineer @Netflix
Максим Крамаренко
Мені е кстремально сподобалось. Я точно дізнався багато нового і згадав круті штуки, які були забуті у вирі роботи над буденними задачами. Складність була доволі високою, щоб кайфувати від кожного вирішенного завдання. Ми охопили всі теми, які мене цікавили і навіть більше!

Software Engineer @Lyft @ex-Google
Тимур Пірієв
Структурована, оригінальна та весела подача складних тем. Дуже якісні матеріали, що доповнюють основні лекції. Продумані домашні завдання. Моя рекомендація всім.

Software Engineer @Booking.com
Олександр Верболоз
Алгоритмічний курс перевершив мої очікування! Викладач відмінно мотивує і пропонує матеріал у захопливій формі, що значно полегшує навчання. Завдяки курсу я нарешті отримав базу якої мені не вистачало. Рекомендую CS osvita як початківцям так і професіоналам.

Vice President Software Engineer @JPMorgan
Ігор Хлапонін
Дуже методич ний і структурований підхід, який дозволив зрозуміти алгоритми загалом і чому саме той чи інший використовується у конкретному випадку. Це було інтерактивно та дуже цікаво, а не нудно, як на звичайних лекціях в університеті. Також сподобався елемент контесту — це мотивувало займатися більше, щоб отримати кращий результат.

Senior Software Development Engineer @Amazon
Дмитро Космаков
Найкращий курс з Алгоритмів і крапка.

Software Engineer @IBM
Сергій Старовойт
Залишився д уже задоволений. Через зміну проєкту та роботи часу було обмаль, а знання в алгоритмах, чесно кажучи, прямували до нуля, попри 7 років досвіду в розробці. Тому навчання вимагало багато зусиль і часу, але я жодного разу не пожалкував, що записався. Курс допоміг мені відчувати себе впевнено на співбесідах — і завдяки цьому я успішно пройшов співбесіду в IBM. Дуже рекомендую!

Software Engineer @Grammarly
Павло Михайлов
Дуже добре структурований і глибокий курс, який допомагає зрозуміти, як алгоритми та структури даних працюють "під капотом". Багато практичних завдань із реальними прикладами застосування. Однозначно рекомендую!

Software Engineer @Netflix
Владислав Посудевський
Якщо ви ще думаєте — не думайте. Цей курс треба брати!
Неймовірне поєднання теорії та практики: заняття проходять наживо з увагою до кожного студента, а домашні завдання підібрані майстерно й допомагають глибоко закріпити знання. Рекомендую.

Senior Software Engineer @ Kinaxis
Юрій Біляєв
Ключова особливість цього курсу — просте і зрозуміле пояснення складних тем з глибоким зануренням у фундаментальні основи. Курс про те, як стати кращим інженером. Він допоміг мені закрити прогалини у знаннях і систематизувати базові концепції. Крім того, це чудова можливість познайомитися з однодумцями. Формат навчання — живий, динамічний і дуже практичний. Цей курс суттєво відрізняється від типових — глибший, зрозуміліший, практичніший.

Principal Technical Architect @Adobe
Василь Недвига
Навчання не легке, як і все що має вартість. Курс дозволив мені поглибити свої знання в програмуванні та знайти сенс в деяких технічних топіках котрі до цього не дуже мали сенс. За рахунок продуманого та фундаментального плану навчання — від математики до алгоритмів.
Також хотів подякувати всьому колективу CS Osvita в організації навчального процесу та покращенні продукту.

Розробник ПЗ в Силах безпілотних систем
Василь Цивінський
Я займався системою ситуативної обізнаності в ЗСУ. Обрав курс з алгоритмів, бо це фундамент, якого мені не вистачало — я не маю технічної університетської освіти, тому хотів систематизувати базу. Курс виявився справді складним, якщо виконувати все по максимуму: понад сотня розв’язаних задач, змагання з однодумцями, постійний інтелектуальний челендж.
Атмосфера в групі була дуже сильною — підтримували одне одного, і спілкування не закінчилося разом із курсом.

Senior Software Engineer @Emlen.io, командир взводу управління дивізіону в ЗСУ
Михайло Панчук
Курс допоміг повноцінно повернутись в програмування після служби. Програма дуже класно структурована та має багато практичних кейсів. Домашні завдання насичені й потребують часу, але саме завдяки їм матеріал реально засвоюється. Викладач Іван Петрушенко справді вміє мотивувати до навчання, і готовий допомогти та пояснити все, що незрозуміло. Формат лекцій інтерактивний: багато спілкування і можливість почути думки одногрупників.
формат, який працює
Постійний зворотний зв’язок у Slack, на лекціях і QA-сесіях — ми завжди поруч.
Жодних поверхневих слайдів: тільки глибокий розбір цікавих задач із реального продакшену.
Сертифікат видаємо лише за реальні результати — виконані домашки, участь у дискусіях, відчутний прогрес.
комунікація, яка тримає в тонусі
Зустрічаємось двічі на тиждень у Zoom — щосереди о 18:30 та щосуботи о 10:00, тривалість 1.5 години. Проводимо додаткові Q&A-сесії з лектором. Усі лекції записуємо, щоб ви могли повернутись до них у зручний час.
Практичні домашки з чіткими дедлайнами. Доведеться написати багато коду, мова програмування — на ваш вибір.
Slack — це наш простір для обговорень, хитрих тестів до задач і реферал ів у топ-компанії.
оточення, яке заряджає
Проводимо відбір, щоб ви навчалися в середовищі сильних і вмотивованих. Тих, хто не виконує домашки, — відраховуємо.
Лектор завжди на зв’язку — пояснить, доки не стане зрозуміло. Іноді це третя ітерація code review, іноді — залишаємося після лекції, щоб розібратись разом. Це нормально — ми тут, щоб вчитись і ставати сильнішими.