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

Анотация:

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

прочети още
Информационни технологии

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

гл. ас. Слав Ангелов  д-р

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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