Skip to content

Latest commit

 

History

History
96 lines (82 loc) · 4.25 KB

program.md

File metadata and controls

96 lines (82 loc) · 4.25 KB

Спецификация на курса

Идея на курса

Искаме да направим курс по Алгоритми, който да зариби хората по темата, да попишат основните и важни за "общата култура" алгоритми, както и да напишат софтуер с тяхното приложение.

Принципът на случване на курсове в Хак България е следния:

  • Дават се 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
    • 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 лекции)