Искаме да направим курс по Алгоритми, който да зариби хората по темата, да попишат основните и важни за "общата култура" алгоритми, както и да напишат софтуер с тяхното приложение.
Принципът на случване на курсове в Хак България е следния:
- Дават се prereading материали на хората, за да се подготвят.
- В началото се показват важните неща - ако трябва се пише и код пред всички / чертае се на дъската
- След това хората решават задачи по темата на място и питат въпроси, ако имат такива.
- След това се дава домашно за допълнителни упражнения.
Крайната цел на курса е:
- Хората да знаят какво означава думичката "алгоритъм" и да са наясно колко дълбока и всеобхватна темата
- Да се знае идеята зад "сложност на алгоритъм", както и базовите сложности на основните и известни алгоритми
- Да се знаят нужните структури от данни, нужни за част от алгоритмите
- Да са писали поне 1 по-приложен софтуер, в който да е оплетена концепция за някой интересен алгоритъм.
- Да са зарибени да продължат да се състезават в TopCoder / Maycamp или подобните системи.
- Да се вдигне общата култура и хората да не се провалят на интервютата.
- Курсът ще започне 8ми юни и ще свърши на 8ми август.
- Курсът ще има 2 пъти в седмицата занятия, с обедна и вечерна група.
- Всяко занятие е с продължение 4 часа
- За курсът ще се дават поне по 1 домашно в седмицата.
- Добра идея е да има и 2 състезания по време на целия курс.
(Втора итерация върху програмата)
Тази програма е първоначален draft и подлежи на промяна
- Въведение в курса и анализ на алгоритми (1 лекция)
- структури от данни
- алгоритми
- анализ на алгоритми
- стъпки на алгоритъма
- асимптотична сложност
- амортизирана сложност
- best/worst case анализ
- Array
- Linked list
- Array list
- Queue/Stack
- Сортиране на редица (1 лекции)
- Selection sort
- Insertion sort
- Merge sort
- Bubble sort
- Shell sort
- Quick sort
- Counting sort
- Търсене на елемент в редица (1 лекция)
- Linear search
- Binary search
- integers
- floats
- Пирамида (1 лекция)
- Heap
- Heap sort
- Priority queue
- k-th biggest element
- Дървовидни структури от данни (1 лекция)
- Binary tree
- Binary search tree
- Trie
- Indexed tree
- Графи (3 лекции)
- adjacency list
- adjacency matrix
- BFS / DFS
- Spanning trees
- Minimum spanning trees:
- Prim
- Kruskal
- Minimum spanning trees:
- Shortest path
- Dijkstra
- Floyd–Warshall
- топологично сортиране
- Hashing (1 лекция)
- Hash function
- Hash table
- Bloom filter
- String algorithms (1 лекция)
- rolling hash
- run-length encoding
- Burrows-Wheeler transform
- Knuth-Morris-Pratt
- Randomized algorithms - Monte Carlo and Las Vegas (3 лекции)
- Dynamic programming (3 лекции)