
Algorithms
in Practices
Solve problems at the speed of thought.
The revolution needs builders

Це було саме те, чого мені не вистачало. Результат не забарився — я в компанії своєї мрії.
// Дмитро Коваленко,
@Netflix

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

Мені екстремально сподобалось.
// Максим Крамаренко,
@Netflix

Структурована, оригінальна та весела подача складних тем.
// Тимур Пірієв,
@Lyft @ex-Google

Завдяки курсу я успішно пройшов співбесіду в IBM.
// Сергій Старовойт,
@IBM

Це було саме те, чого мені не вистачало. Результат не забарився — я в компанії своєї мрії.
// Дмит ро Коваленко,
@Netflix
ПРО КУРС
Python швидкий настільки, наскільки добре ви розумієте, що відбувається під капотом. На цьому курсі ми відкриємо те, що зазвичай приховано: модель памʼяті CPython, PyObject, алокації та фрагментацію, GIL і конкурентність потоків, multiprocessing, async та zero-copy підходи. Ви навчитеся не «припускати», а міряти, профілювати й оптимізувати. Ви переконаєтесь, що робота з пам’яттю чи потоками — це не дрібниці, а фундамент, що визначає швидкість, стійкість та вартість вашої системи.
Цей курс переводить розробника у категорію those who understand Python beneath Python — інженерів, що контролюють поведінку інтерпретатора, вміють будувати scalable-рішення, зменшувати latency та споживання RAM, писати код стійкий до високих навантажень. Результат — відчутний приріст продуктивності програм і повний контроль над тим, як вони працюють зсередини.
Програма не для пасивного перегляду, а для глибокої роботи: дослідження, експерименти, оптимізація й, можливо, переписування того, що здавалося правильним роками.
prerequisites
:: Практичний досвід програмування від 1 року
:: Практичний досвід програмування від 1 року
:: Практичний досвід програмування від 1 року
:: Практичний досвід програмування від 1 року
:: Практичний досвід програмування від 1 року
:: Практичний досвід програмування від 1 року
ДВІЧІ на тиждень
Субота
10:00 UTC+3
Середа
18:30 UTC+3
// live зустрічі з записом
Стек
Будь-яка мова програмування
// live зустрічі з записом
ПРОГРАМА
:: 32 live заняття
:: 8 Q&A сесій
:: до 30 студентів в групі
Graphs and Trees
Соцмережі, файлові системи, залежності мікросервісів і маршрути — це графи в різних формах. Вчимося бачити ці структури й застосовувати bfs, dfs, shortest paths і topological sort на практиці.
• DFS і BFS як два погляди на обхід графу
• Топологічне сортування й детекція циклів: порядок збірки, розв'язання залежностей, dependency hell у пакетних менеджерах
• Знаходження найкоротших шляхів: Dijkstra vs. Bellman-Ford
• Бінарні дерева пошуку (BST) та як їх балансувати: AVL, Treap
• Trie і Ternary Search Tree
Практика
• State machine як граф: вершини — стани системи, ребра — дозволені переходи, і граф ніде не заданий явно
• Пишемо web crawler на BFS — та сама модель, що в основі індексаторів пошуковиків
• Автодоповнення на Trie/TST: префіксний пошук із ранжуванням за популярністю — те, що відпрацьовує під рядком пошуку на кожному великому сайті
• Lowest common ancestor (binary lifting)
Dynamic programming
DP — це мистецтво не рахувати те саме двічі. За ним стоять spell-checkers, git diff, вирівнювання тексту в LaTeX і навіть порівняння ДНК
• Від рекурсії з memoization до bottom-up таблиці: одна й та сама ідея під двома кутами, і коли який вигідніший за пам'яттю
• Edit distance (Левенштейн): скільки правок між двома рядками — основа spell-check, fuzzy search і автокорекції
• Sequence alignment: git diff, LCS і той самий алгоритм, що вирівнює ДНК у біоінформатиці
• Як виграти в Blackjack та «красиво» зменшити розмір картинки
• Knapsack та оптимальний шлях робота в лабіринті
Практика
• Реалізуємо edit distance і будуємо на ньому мінімальний «did you mean?» — той самий кістяк, що в пошуку й текстових редакторах
• Як LaTeX та Microsoft Word вирівнюють текст по ширині рядка?
Probabilistic algorithms & data structures
Від класичних hash table до bloom filter: як хешування дозволяє швидко знаходити дані, а на великому масштабі — свідомо міняти точність на памʼять, швидкість і п ередбачувану похибку
• Як компактно представити хеш-таблицю в пам'яті
• Хеш-функції й колізії: chaining vs open addressing, linear probing, load factor і чому resize неминучий
• Bloom Filter: як за крихітну памʼять відповідати “цього точно немає” з ризиком false positive — і економити дорогі походи в БД, як у Cassandra чи Bigtable
• HyperLogLog: порахувати кількість унікальних серед мільярдів за кілька кілобайт — як це рахує unique visitors аналітика
• Rabin–Karp: хешування рядка для пошуку патерну й rolling hash, на якому будується дедуплікація і rsync
Практика
• Reservoir sampling: чесний випадковий семпл із потоку невідомої довжини — те, що працює в MapReduce та аналітиці на льоту
• Shuffle: як чесно перемішати масив так, щоб кожна перестановка мала однакову ймовірність — від Fisher–Yates до типових помилок у “random sort”, які непомітно ламають випадковість
Greedy algorithms
Як жадібні алгоритми допомагають створювати найефективніші стратегії кешування, планування та стиснення даних?
• Коли жадібність взагалі коректна: exchange argument замість «здається, спрацює»
• Кешування як greedy-задача: чому LRU — це лише евристика. Який алгоритм кешування оптимальний?
• Huffman coding: як побудувати оптимальний код без втрат — те, що всередині gzip, JPEG і HTTP-стиснення
• Оптимальне планування подій: коли жадібний підхід працює?
• Minimum Spanning Tree через Kruskal/Prim: найдешевший спосіб з'єднати все — від мереж до кластеризації
Практика
• Реалізуємо Huffman-кодер і стискаємо реальний текстовий файл
• Interval scheduling: максимум несуперечливих задач — основа планувальників, бронювань і розподілу ресурсів
Linear data structures: array & linked list & stack & queue & heap
Глибокий аналіз прикладних структур даних під зберігання, потокову обробку і швидкий доступ
• Динамічні масиви зсередини: amortized O(1) на append, чому ріст саме ×2 і скільки реально коштує append у Python чи push_back у C++
• Як зробити Linked list швидким? 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: задача з реальних кешів, браузерів та баз даних
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
• Convex hull: як оптимально оточити множину точок мінімальною оболонкою
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). Дилер говорить лише про розмір місячного платежу, а справжню процентну ставку — мовчки приховує
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 тих років
Recursion & Backtracking & Heuristic search
Від хвостової рекурсії до регулярних виразів. Як використовувати рекурсію для комбінаторики, парсингу та евристичного пошуку
• Рекурсія як декомпозиція: звести задачу до меншої копії себе і не втратити контроль над глибиною стека
• Backtracking з відсіканням — як не перебирати очевидно мертві гілки
• Генерація перестановок, підмножин, розміщень, комбінацій — каркас під будь-яку переборну задачу
• Хвостова рекурсія та Tail Call оптимізація
• Beam Search: як шукати не ідеальний, а достатньо хороший розвʼязок
Практика
• Пишемо мінімальний regex engine. Чому деякі регулярки "вбивають" сервіс через catastrophic backtracking (ReDoS) — реальний клас вразливостей
• Рекурсивний спуск, що парсить і рахує арифметичний вираз з дужками й пріоритетами — той самий кістяк, що в інтерпретаторах і калькуляторах
• 8 Queens і Sudoku Solver: як рекурсивно будувати розвʼязок, швидко перевіряти обмеження та відсікати неможливі гілки до того, як перебір вибухне
Brute force algorithms
Від collision detection в іграх до convex hull у computer vision — як перебір вирішує реальні задачі, коли його правильно застосувати
• Ітеративний перебір як baseline: коректне просте рішення, від якого відштовхуємося в оптимізації
• Прогноз за обмеженнями: як з аналізу коду зрозуміти, чи пройде рішення за часом і пам'яттю, ще до написання коду
• Коли brute force — це і є правильна відповідь: малі n, дедлайн важливіший за мікрооптимізацію, читабельність дорожча за швидкість
• Stress testing — техніка, якою ловлять баги, що проходять крізь звичайні unit-тести
Практика
• Closest pair of points: серед тисяч об'єктів на екрані знайти два найближчі — задача, що виникає у collision detection в іграх, фізичних симуляціях і кластеризації даних
• Convex hull: побудувати мінімальну опуклу оболонку, що охоплює задану множину точок — задача, що лежить в основі визначення меж об'єктів у комп'ютерному зорі, виявлення колізій у CAD-системах та оптимізації маршрутів
Analysis of algorithms
Thinking in constraints: від Big-O на папері до аналізу реального production-коду
Heavy Hitters у DevOps: як швидко виявляти запити, що генерують більше X% трафіку
Аналіз швидкодії API веб-сервера
Асимптотичний аналіз ітеративних та рекурсивних алгоритмів
Аналіз ймовірнісних алгоритмів
ЯК ПРОХОДИТЬ
НАВЧАННЯ
01
фідбек та ітерації
// Домашки не задаємо для галочки. Викладач перевіряє ваші результати та відправляє на доопрацювання та пояснює пробіли
Zoom
01
фідбек та ітерації
// Домашки не задаємо для галочки. Викладач перевіряє ваші результати та відправляє на доопрацювання та пояснює пробіли
Zoom
01
фідбек та ітерації
// Домашки не задаємо для галочки. Викладач перевіряє ваші результати та відправляє на доопрацювання та пояснює пробіли
Zoom
ПРАКТИЧНА
РОБОТА
:: 30 завдань
:: пишете власну СУБД
:: ФІДБЕК ВИКЛАДАЧА
// Рекомендуємо виділяти 6–10 годин на тиждень для виконання домашніх завдань, щоб отримати максимальний результат від курсу.
Title
<h5 class="font_5">Sub title</h5>
<h5 class="font_5"><br></h5>
Description
ЩО ЗМІНИТЬСЯ
ПІСЛЯ КУРСУ
1
як ти проходиш coding interview
// 80% технічних співбесід у Big Tech — задачі на алгоритми і структури даних. Після курсу ти заходиш на будь-яку з них з чіткою структурою мислення — і можеш пояснити своє рішення на кожному кроці.
2
як ти підходиш до задачі
// Аналізуєш обмеження до першого рядка коду — впізнаєш клас задачі, знаєш інструмент і розумієш trade-offs між підходами. Бачиш фінішну пряму ще на старті.
3
як ти читаєш
код
// Бачиш реальну ціну кожного рядка крізь абстракції — де фреймворк приховує дорогу операцію, де рекурсія з'їдає пам'ять, де красивий метод насправді O(n²).
ВИКЛАДАЧ
ТА АВТОР ПРОГРАМИ

Іван Петрушенко
Engineering Lead y @SQUAD, Founder в @CS Osvita.
Former: @Dell Software Engineer, @Fiverr Senior Software Engineer, @Ring Machine Learning Engineer.
:: випустив понад 300 інженерів
:: 14 років інженерного досвіду з високонавантаженими системами
:: випускник Stanford University
Перевірено випускниками -
ТОП інженерами з індустрії
amazon
netflix
booking.com
spotify
meta

Михайло Панчук
Senior Software Engineer @Emlen.io, командир взводу управління дивізіону в ЗСУ
Курс допоміг повноцінно повернутись в програмування після служби. Програма дуже класно структурована та має багато практичних кейсів. Домашні завдання насичені й потребують часу, але саме завдяки їм матеріал реально засвоюється. Викладач Іван Петрушенко справді вміє мотивувати до навчання, і готовий допомогти та пояснити все, що незрозуміло. Формат лекцій інтерактивний: багато спілкування і можливість почути думки одногрупників.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Олександра Кулик
Software Engineer @Spotify
Курс дуже потужний. Буде корисним і новачкам, і тим, хто має більше досвіду — за рахунок поступового ускладнення задач та алгоритмів, а також опцій для додаткового опрацювання. Зможете відточити комплексний підхід до розв'язання задач будь-якої складності. Раджу на всі 100%
БРОНЮЙ СВОЄ
МІСЦЕ В ГРУПІ
оплата помісячно
420 $
курс триває 4 місяці
оплата за весь курс
1600 $
за курсом нбу
ПЕРШИЙ КРОК ЗА ТОБОЮ
Я приймаю умови Публічної оферти та надаю згоду на обробку своїх персональних даних відповідно до Політики конфіденційності.
За тебе може заплатити роботодавець?
Напиши нам на hello@csosvita, і ми оформимо все якнайшвидше.
МАЄШ ПИТАННЯ?
МИ ВІДПОВІДАЄМО
// Не знайшли відповідь, яку шукали? Напишіть нам на hello@csosvita.com і ми з усім допоможемо