Здрасти,
много добри идеи.
Колкото до алгоритмичните дисциплини - не знам дали е всеизвестен факт, но всеки понеделник се събираме от 4:30PM в 535 и разглеждаме алгоритми. Последния път разглеждахме червено-черни дървета и като цяло балансирани дървета. Разглеждахме стандартни структури от данни и комбинаторни алгоритми преди това. Ако някой, проявява интерес ще се радвам да се видим ;)
Поздрави
Ники
Като бивш възпитаник на ФМИ и като настоящ професионалист в областта на софтуерните технологии и в частност телеком услугите, заставам с две ръце зад Ники и разглеждането на алгоритми.
Защо ли? Защото наскоро в работата ми се наложи да имплементирам решение за един клиент, свързано с Cisco и Huawei рутери и суичове, където два поредни месеца се побърках да пиша алгоритми за "multiple trees in multiple trees selection", парсери на текстови данни, парсери на дървовидни структури и още няколко академични "глезотии". Ако не бях на "ти" с дърветата, графите, тяхното създаване и оптимално обхождане, парсерите, основните алгоритми и структурите от данни (АСД), сигурно щях да умувам половин година или още по-вероятно - нямаше да измисля нищо.
Ще се опитам да обясня на теория за какво става дума. Не мога да кажа съвсем конкретно, тъй като имам подписана клауза за спазване на конфиденциалност, но на теория нищо не ми пречи да обяснявам. И така:
Имаме като даденост текстова структура, която много (но не напълно) напомня дървовидна структура. Само че не едно дърво, а
n на брой дървета в подреден списък. Възлите-деца, обаче на тези дървета не са подредени, така че дървото (A, (B, C)) е абсолютно аналогично на дървото (A, (C, B)).
Сега идва наред друг списък с дървета, които също са подредени и възлите-деца не са. Номерът е да се съпоставят тези два списъка и да се намери имаме ли в първия списък точен отрязък, който да отговаря 100% на втория списък, при зададен някакъв критерий за сравняване на възли като не е задължително вторият списък да съвпада с първия, броейки от ниво "0" при обхождане в широчина.
Така че в случая не става въпрос за просто сравняване на дървета, а за сравняване на множество дървета с друго множество от дървета при произволна начална дълбочина на сравняването (казано по-обобщено).
Бих могъл да го обясня и много по-просто като кажа какъв е бизнес сценарият, но не това е важното. Важното е, че в нашия международен екип от 20 човека, аз бях единственият, който можа в дадения срок да сведе бизнес сценарият до адекватен алгоритъм, да "преведе" алгоритъмът до софтуерна имплементация и да "свърже" софтуерната имплементация с това, което междувременно останалите хора в нашия екип бяха сътворили и накрая да предоставим решениетокато част от целия software solution на клиента. Бих казал една не лека академична/бизнес задача, допълнително усложнена от фактора "време" (тук не мисля алгоритъм за себе си, а за клиента, който плаща за всеки час) и съобразяване с другите колеги и другите задачи, които междувременно имах.
За пълнота нека спомена, че конкретната задача включваше и реализация на сравнително прост "custom made" markup език, чрез който се дава възможност потребителят сам да описва структурата на втория подреден списък от дървета и да дефинира критерият за сравняване на възлите в дърветата, съответно парсер за езика и алгоритъм за "превеждане" на резултата от парсването в поредица от дървовидни структури. А първият списък с дървета се получава от друг парсер, който обхожда текстовите данни, както вече споменах. Работа с парсери, как се пишат и реализират оптимално - това също се учи във ФМИ в една много хубава избираема дисциплина в по-горните курсове.
С всичко това искам да кажа, че ученето на алгоритми не е загуба на време, тъй като всеки средно статистически интелигентен ФМИ-ст може да седне и да се научи сам на даден език за програмиране или дадено API, но алгоритмите и тяхната имплементация - това не го пише във всяк книга. А дори да имате подходящите книги - при алгоритмите трябва освен писане и много мислене, както и много решаване на алгоритмични задачи. Не е нужно човек да се подготвя като за състезание (аз никога не съм ходил на академични състезания), но поне да знае основни алгоритми за създаване и обхождане на дървета, графи, тяхното оптимално претърсване и други подобни.
Така че слушайте Ники, той знае какво говори!