16 онлайн-занять
[щопонеділка та щосереди]
Комплексний онлайн-курс про те, як знаходити нестандартні рішення в складних робочих задачах та оптимізувати рядки програмного коду, спираючись на знання з алгоритміки.
*курс викладається російською мовою
Ви ознайомитеся з класичними методами розв’язання задач програмування за допомогою алгоритмів. Навчитеся не просто писати «костилі», а розбиратися в архітектурних підходах, дотримуватися стилю, писати чистий код і мінімізувати системні баги. У результаті — отримаєте необхідну базу для кар’єрного зростання.
Ви закриєте прогалини в знаннях і закриватимете поточні завдання ефективніше. Здобудете практичний досвід розв'язання задач з алгоритміки, будете адаптувати наявні класичні методи під свої завдання, винаходити на їхній основі власні рішення та впроваджувати фічі, які покращать продукт.
Швидко знайти необхідну інформацію, стиснути дані без втрат або спроєктувати систему, здатну масштабуватися, розробнику допомагають алгоритми, тобто готові послідовності операцій. Розібратися у видах алгоритмів та структур даних вам допоможе цей курс.
Спочатку ми на реальних прикладах ознайомимося з типами завдань, які можна розв’язати за допомогою алгоритмів. Потім навчимося працювати з різними структурами даних та застосовувати класичні алгоритми: від бульбашкового сортування до динамічного програмування. Будемо адаптувати наявні алгоритми та знаходити найефективніші рішення для потреб бізнесу.
Спочатку лектор поділиться особистим досвідом застосування алгоритмів, ознайомить вас із класичними методами вирішення завдань та навчить структурувати дані для максимально ефективного використання. А потім допоможе засвоїти динамічне програмування.
Ви навчитеся вирішувати робочі завдання за допомогою класичних методів, опануєте алгоритми сортування [бульбашкове, швидке, сортування вставкою, вибором, злиттям], бінарні та збалансовані дерева, графи, хеш-функції та хеш-таблиці, одновимірні та двовимірні завдання динамічного програмування.
На заняттях лектор розбиратиме розв'язання задач однією з мов програмування [Python, Java, JavaScript], розв’язки для інших мов будуть у додаткових матеріалах. Ви зможете вибирати будь-яку мову та виконувати домашні завдання у Replit.
Ви закриєте прогалини в знаннях та підготуєтеся до problem solving interview у великій IT-компанії. Для 3 найкращих студентів лектор проведе тестове технічне інтерв’ю чи особисту консультацію.
Розберетеся в тому, що таке алгоритми та структури даних. Дізнаєтеся, у яких сферах використовують алгоритми та які завдання вони вирішують. На реальних прикладах із життя та технічних прикладах із практики лектора навчитеся визначати складність алгоритмів.
Навчитеся обробляти масиви та виконувати прості операції над ними [доступ, пошук, вставка, видалення]. Розберете кілька різних завдань з роботи з масивами. Навчитеся визначати тимчасову складність і складність пам’яті масивів.
Навчитеся проводити різні операції зі зв’язаними списками, стеками, чергами. Розберете та розв’яжете типові завдання на зв’язані списки, наприклад, спробуєте видалити з нього дублікати. Розв’яжете завдання зі стеками та чергами, наприклад, здійсните перевірку вкладених дужок. Навчитеся перетворювати стеки на черги й навпаки.
Дізнаєтеся, коли та навіщо застосовувати рекурсію. Розберете типові рекурсивні завдання та навчитеся реалізовувати алгоритми із застосуванням рекурсії. Розрахуєте n-й елемент для послідовності Фібоначчі за допомогою рекурсії.
Розберетеся у видах алгоритмів пошуку та сортування. Дізнаєтеся, що таке бінарний пошук та навчитеся реалізовувати завдання із застосуванням бінарного алгоритму. Визначите різницю між тимчасовою складністю та складністю пам’яті.
Ознайомитеся із бульбашковим сортуванням, сортуванням вставками та сортуванням вибором. Застосуєте ці алгоритми на практиці та розв’яжете із ними задачі. Навчитеся сортувати масиви даних.
Реалізуєте сортування злиттям та швидке сортування. Навчитеся вибирати вид алгоритму відповідно до конкретного завдання та знаходити оптимальний спосіб розв’язання.
Дізнаєтеся, як структура даних «дерево» допомагає зберігати ієрархічну інформацію. Розберете види деревоподібних структур даних. Зрозумієте, чим бінарне дерево відрізняється від дерева загального вигляду. Навчитеся знаходити спільного предка, визначати діаметр дерева та зв’язки між вузлами. Напишете алгоритм знаходження k-го елемента в масиві. Дізнаєтеся, які підходи можна застосувати для розв’язання типових завдань із бінарними деревами пошуку.
Детально вивчите структуру AVL-дерева, червоно-чорних дерев та інші види збалансованих дерев. Ознайомитеся із сучасними варіантами деревоподібних структур [дерево Фенвіка, дерево відрізків]. Навчитеся розв’язувати класичні завдання з використанням збалансованих дерев.
Дізнаєтесь, які бувають графи. Навчитеся реалізовувати матрицю суміжності та основні алгоритми обходу. Знайдете мінімальне кістякове дерево в неорієнтованому навантаженому графі. Навчитеся реалізовувати алгоритми знаходження найкоротшого шляху та алгоритми обходу [у ширину, у глибину].
Реалізуєте задачі за допомогою вивчених методів на графи, наприклад, визначите кількість одноциклових компонентів на графіку або знайдете вузол із мінімальною абсолютною різницею із заданим значенням.
Дізнаєтеся, для яких завдань застосовують хеш-функції, та розберете реальні кейси. Вивчите структуру даних хеш-таблиці. Навчитеся реалізовувати схему для знаходження колізій та запобігання колізій у хеш-таблицях та структурах даних. Перевірите, чи є один масив частиною іншого і знайдете перше повторення елемента масиву.
Розберетеся в поняттях: динамічний масив, двійкова купа та пірамідальне сортування. Розберете на прикладах одновимірні та двовимірні завдання динамічного програмування. Навчитеся визначати прості завдання на динаміку та знаходити розв’язання до них.
Навчитеся розв’язувати задачі методом динамічного програмування за під відрізками та динамічного програмування за підмножинами. Розберетеся в алгоритмах кешування. Навчитеся оптимізувати тимчасову та обчислювальну складність [time and space complexity].
Дізнаєтеся, навіщо застосовують жадібні алгоритми. Навчитеся оптимізувати алгоритми за графами. Підберете найкращий алгоритм для запропонованого завдання, самостійно розв’яжете задачу, потім аргументуєте свій вибір і розв’язання перед лектором.
Отримаєте перелік типових завдань для технічного інтерв’ю. Виберете найбільш вдалий алгоритм для розв’язання кожного завдання. Реалізуєте розв’язання під час заняття з обмеженими часовими межами. Навчитеся швидко приймати рішення щодо оптимізації програмного коду та аргументувати ці рішення.