CSCB039 Алгоритми и програмиране

Анотация:

Курсът е изключително важен за подготовката на всеки специалист в областта на Информатиката и Информационните технологии. В рамките на този курс се осъществява интегрирането на знанията и уменията от курсовете по Програмиране и Структури от данни. Курсът включва както фундаментални теоретични знания, така и знания, които имат пряко приложение в програмистката практика. От теоретична гледна точка студентите ще се запознаят с различни формализми за приближаване на неформалното понятие алгоритъм, с понятията за сложност по време и памет и техниките за оценяване на сложността на алгоритми, с оценка на асимптотичното поведение на функциите на сложност, с някои популярни алгоритмични схеми, както и с най-голямото предизвикателство на съвременната Теория на алгоритмите - съществуването на задачи (NP-пълни), за които все още няма качествени алгоритми. От практическа гледна точка студентите ще се запознаят с някои, неизучавани в курса по Структури от данни, абстрактни типове и тяхното ефективно имплементиране, както и с най-често използваните в практиката алгоритми и оценката на тяхната сложност.

прочети още
Информатика

Преподавател(и):

проф. Красимир Манев  д-р

Описание на курса:

Компетенции:

Завършилите курса студенти ще знаят:

= различни формализми на неформалното понятие алгоритъм;

= дефинициите за понятията сложност на алгоритъм по време и памет;

= асимптотично поведение на целочислени функции;

= основни алгоритмични схеми - "Разделяй и владей", Обхождане на графи, Динамично програмиране, "Лакоми" алгоритми, Търсене с връщане;

= основни алгоритми и оценката на тяхната сложност;

= дефиниция на понятията свързани със съществуването на NP-пълни задачи.

Завършилите курса студенти ще могат:

= да създават свои алгоритми на базата на известна алгоритмична схема;

= да оценяват сложността на създавани от тях алгоритми;

= да сравняват сложностите на различни алгоритми, решаващи една и съща задача.
Предварителни изисквания:
За да могат успешно да се справят с курса студентите трябва:

= да имат добри познания в областта на Дискретната математика и някои елементи на Математическия анализ на функции на реална променлива;

= да владеят на много добро ниво език за програмиране (за предпочитане C/C++);

= да познават най-необходимите за работата на алгоритмите абстрактни типове и класическите им имплементации в структури данни, както и обичайните функции за работа със структурирани данни.

Форми на провеждане:
Редовен

Учебни форми:
Лекция

Език, на който се води курса:
Български

Теми, които се разглеждат в курса:

  1. Понятие за масова задача и алгоритъм
  2. Формални представяния на алгоритъм. МПД
  3. Формални представяния на алгоритъм. Език за програмиране
  4. Сложност на алгоритми по време и памет
  5. Сложност на рекурсивни алгоритми
  6. Асимптотично поведение на целочислени функции
  7. Сравняване на асимптотичното поведение на целочислени функции
  8. Първо контролно
  9. Сортиране. Класически алгоритми
  10. Сортиране със сложност O(N.log N) - Сортиране със сливане
  11. Сортиране със сложност O(N) - Сортиране с броене
  12. Алгоритмична схема "Разделяй и владей"
  13. Двоично търсене. Търсене с хеш таблица
  14. Крайни графи и мултиграфи
  15. Коренови дървета
  16. Абстрактен тип пирамида. Пирамидално сортиране
  17. Обхождане на графи в ширина
  18. Обхождане на графи в дълбочина
  19. Топологическо сортиране
  20. Алгоритми за най-къс път в граф
  21. Пълно изчерпване и търсене с връщане
  22. "Лакоми алгоритми"
  23. Динамично програмиране - едномерни таблици
  24. Динамично програмиране - двумерни таблици
  25. Динамично програмиране в даг
  26. Второ контролно
  27. Алгоритмична геометрия
  28. Сложност на задачи. NP-пълнота
  29. Теорема на Кук
  30. Приближени алгоритми за NP-пълни задачи

Литература по темите:

1. Th.H. Cormen, Ch.E. Leiserson, R.L. Rivest, C.Stein, Introduction to

Algorithms, MIT Press, Third ed., 2009.

2. R. Sedgewick, Algorithms, Addison-Wesley Pub, 1988.

3. St. Skiena, The Algorithm Design Manual, Springer, 2010.

4. Кр. Манев, Алгоритми в графи. Основни алгоритми, КЛМН, 2013.

5. St. Halim, F. Halim, Competitive Programming 3, self edited