Про курс
На курсі «Алгоритми та структури даних на C#» розглядаються найбільш поширені способи компонування даних для зручної і водночас швидкої їх обробки та оптимальні алгоритми роботи з ними.
Вже на першому уроці детально розглядаються питання оцінки часу виконання алгоритмів, як складової частини рішення поставленого завдання, оскільки для завдань великих розмірів важливу роль грає не тільки потужність обчислювальних засобів, а також ефективність алгоритму. Далі будуть розглянуті основні структури даних - однозв'язкові та двозв'язкові списки, динамічні масиви, стеки, черги, дерева та множини.
На курсі будуть детально розглянуті алгоритми сортування, поняття «хеш-таблиці» та «АВЛ-дерева». Також розглянемо структуру даних «Граф», яка широко використовується в житті. Освоїмо метод динамічного програмування для розв’язання різноманітних завдань. Заключний урок буде присвячений розв’язанню практичних прикладів – завдання комівояжера, завдання про ханойські вежі та інші цікаві задачі.
Алгоритми та структури даних, які ми розглядаємо в даному курсі, можна реалізувати будь-якою мовою програмування, нами для цього буде використовуватися мова С#, базових знань якої та знань основ ООП буде цілком достатньо для розуміння матеріалу.
Попередні Вимоги
- Впевнене володіння персональним комп'ютером
- Базові знання мови програмування C#
Ви навчитеся
- Розуміти принципи побудови та використання структур даних та алгоритмів для їх обробки.
- Визначати складність алгоритму.
- Реалізувати найпоширеніші алгоритми та модернізувати їх.
- Розрізняти переваги використання тих чи інших структур у кожному конкретному випадку.
- Розуміти особливості структур даних, як-от зв’язні списки, динамічний масив, Stack, Queue, Set, хеш-таблиці, дерева, графи, бінарне дерево пошуку, АВЛ-дерево та розуміти алгоритми для роботи з цими типами даних.
- 5 год 14 хв
- 24.04.2024
- 10
- 24.04.2024
- українська
Що входить до курсу
Основна мета цього уроку – ознайомити студентів зі структурами даних та поняттям алгоритму. Ми розглянемо асимптотичну складність алгоритму, однозв'язкові та двозв'язкові зв'язані списки. Також навчимося використовувати О-нотації.
На занятті розглядаються основні структури даних. Пояснюється політика зростання динамічного масиву. Розберемо основні способи роботи з цими структурами даних та його реалізацію, об'єднання, перетин, різницю, симетричну різницю двох множин.
На занятті пояснюються основні види сортування даних. Демонструється їх суть та реалізація. Порівнюються різні методи сортування для різних призначень та передумов. Коротко пояснюється суть нового сортування Timsort.
На уроці розглядається дві структури даних: хеш-таблиця та дерево. Роз'яснюється суть хеш-таблиці, принцип її роботи, хеш-функція та колізії у хеш-таблицях. Розглядається структура даних «Дерево», детальніше пояснюється бінарне дерево пошуку та додавання вузлів у дерево.
Даний урок присвячений розгляду методів роботи з бінарним деревом пошуку: видалення вузла з дерева (3 варіанти видалення), пошук вузла в дереві, прямий, зворотний і симетричний обходи дерева. Розглядається суть АВЛ-дерева як модернізація бінарного дерева пошуку. Роз'яснюється суть балансування АВЛ-дерева та способи реалізації балансування.
На уроці розглядається популярна та складна структура даних «Граф». Також поговоримо про введення в теорію графів, способи задати граф та два варіанти пошуку за графом: у ширину та глибину.
На уроці розглядаються теми з теорії графів, як-от зв'язкові компоненти, цикл Ейлера. Поговоримо про відомий алгоритм Лі. Пояснюється знаходження найкоротшого шляху між вершинами графа. Демонструється алгоритм Дейкстри.
На занятті глибше розглянемо теорію графів. Коротко викладається суть та принцип алгоритму Флойда-Уоршелла. Роз'яснюється та демонструється топологічне сортування та пошук компонентів зв'язності через обхід у глибину.
На уроці розглядається підхід динамічного програмування до розв’язання багатьох завдань. Пояснюється сутність і принцип різних прийомів. Демонструються типові завдання та їх розв’язання.
На занятті розглядаються такі завдання: Ханойські вежі, завдання комівояжера, завдання для рюкзака.