Термини и устройство на темите

Структура и съдържание на темите.
Тренировки. Последователност на лекциите. Термини.
Автор: Александър Георгиев

Преди да започнем със същинския материал ще кажем няколко думи за това как точно ще бъдат представени темите. Това включва информация какво ще съдържат те, в каква последователност ще са и какви специфични неща ще са често-срещани в тях.

Структура и съдържание на темите

Въпреки съществуващата известна разлика в значението на "тема" и "лекция", тук ще ги считаме за едно и също нещо: документ и/или страница, която дава информация за даден алгоритъм, техника или структура данни. Понякога няколко алгоритми със сходно действие ще бъдат преподадени в една тема (например алгоритмите на Floyd и Dijkstra за намиране на най-къс път в граф).

Теми

Ще се стараем темите да имат следната структура (където това е възможно):
  • заглавие на български
  • заглавие на английски
  • сбито резюме на темата
  • проблем, който искаме да решим
  • наивни решения
  • ефективни алгоритми
  • примерен код
  • примерни задачи
  • референции
Не винаги всички те ще присъстват. Понякога ще пропускаме някои от тях, когато няма такива или пък не считаме, че биха били подходящи/полезни на читателите. Не винаги те ще са и в такъв ред - например най-често задачите и кодът ще бъдат пръснати из цялата тема, а не отделени в собствена секция.
Референциите в края на темата обикновено ще дават допълнителни четива (или оригиналните такива, ако черпим знанията си от някой пейпър). Те не са задължителни, но биха били добро начало, ако искате да научите повече за въпросната тема.

Темите нямат за цел да са напълно изчерпателни - например много рядко ще прилагаме доказателства защо даденият алгоритъм работи, или няма да доказваме стриктно защо неговата сложност е тази, която сме споменали. Също така с цел да покрием повече материал няма да навлизаме твърде надълбоко в дадени теми, ако считаме, че информацията, която пропускаме, рядко (ако изобщо) би била полезна на младите състезатели. Като rule of thumb ще ползваме - ако не сме го срещали в задача (с изключение когато го намираме за изключително интересно) - не го преподаваме.

Задачи

Ще даваме за пример задачи от най-различни места - IOI, национални състезания, чужди тренировъчни системи, а също така задачи, на които ние сме автори. Поради различните източници не винаги ще е възможно да предоставим всички материали (най-вече тестове и/или система, където задачата е качена и може да бъде директно предадена). Все пак ще се опитаме да дадем колкото се може повече неща за въпросната задача, като ще се стараем да включваме:
  • Име на задачата
  • Къде е дадена
  • Условие
  • Решение (идея)
  • Решение (сорс)
  • Тестове/Чекер
  • Линк към състезателна система

Специални полета

От време на време в текста ще срещате "специални полета", отличаващи се с различен цвят (лесно ще ги забележите, тъй като са направени с цел да се открояват).

Зелените полета ще съдържат програмен код или условие на задача. Те са основният начин, по който ще даваме примери както за задачи, така и за тяхното решение. Считаме, че е полезно за младите състезатели да видят как може да се реализира даден алгоритъм или структура данни.

Оранжевите полета ще съдържат важна информация, свързана с темата, или допълнителна информация, която мислим, че ще ви помогне много за да избегнете някои стандартни грешки по време на състезание.

Сините полета ще задават интересна допълнителна информация, която не ви трябва пряко за да разберете материала от лекцията. Все пак съветваме състезателите да не ги пропускат, тъй като обикновено в тях има полезни съвети.

Тренировки

Освен темите сме дали и пет тренировъчни сесии. Те съставят програма, чрез която състезателите могат да се упражняват. Начините на трениране в тези сесии са изпитани от нас и при правилното им прилагане ще доведат до добри резултати. Тези тренировки ще развият в състезателите някои от най-важните според нас качества, нужни за състезателната информатика. Разбира се, има и редица други начини, по които човек може да тренира, така че бъдещите състезатели изобщо не трябва да се чувстват ограничени или задължени да следват нашите съвети.

Тренировките разделят темите условно на шест части: уводни, начални, основни, по-сложни, сложни, и допълнителни техники, алгоритми и структури данни.

Последователност на темите

След известно чудене в каква точно последователност да бъдат предоставените темите, в крайна сметка решихме да дадем избор на читателя сам да реши, коя би му била по-полезна.

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

Втората възможна последователност е за тези от вас, които биха желали да ползват сайта като учебник. Тя би била по-подходяща за начинаещите състезатели. В нея материалът се "развива" от по-прост към по-сложен, като многократно скачаме от раздел в раздел, с цел да научим нещо, без което не можем да продължим нататък. Понякога сме дали "предимство" на някои по-сложни теми пред други по-прости такива, понеже считаме, че биха били по-полезни на читателите.

Това позволява постепенно поемане на материала без да е нужна намесата на учител за да ви насочва кое след кое да прочетете. Въпреки това, ако все пак ви се намира преподавател под ръка (например посещавате школа), можете да го помолите да ви състави индивидуален план. Така той ще може да подбере само темите, които са от най-голяма важност за вашето ниво или възрастова група, в реда, в който бихте ги научили най-добре. Учебния план, можете да намерите тук.

Термини

Макар и на български, ще ползваме много чуждоезични термини (предимно от латински и английски). От една страна това може би е нежелателно, тъй като разваля общата идея за "сайт на български". От друга, след многократните си сблъсъци с опити част от тези термини да бъдат преведени на български език сме стигнали до извода, че резултатът е по-скоро комичен, отколкото полезен.

В резултат на употребата им ще знаете какво значат съответните думи, когато ги срещнете в чужда литература (задачи или статии). А това неминуемо рано или късно ще се случи - за съжаление световният език в момента е английският, а не българският. Нещо повече, ако след време работите като програмист (независимо дали сте в България или в чужбина) ще ви се наложи да пишете код, коментари и документация на английски. Това просто е стандартът в момента.

Не мислим, че употребата на тези чуждици ще доведе до особени проблеми при разбирането на материала. Повечето от тях са интуитивни, или тяхното значение може да се разбере от контекста. По-опитните състезатели със сигурност ще са срещали мнозинството от тях, но тъй като осъзнаваме, че ще има хора, които не са, сме направили специална страница, където да обясняваме значението им. Ако случайно намерите дума, чието значение не знаете и не е включено във въпросната страница, просто пишете във форумите за това (коя е думата и къде сте я срещнали) - с радост ще допълним пропуските.


За да предложите корекция, селектирайте думата или текста, който искате да бъде променен,
натиснете Enter и изпратете Вашето предложение.
Страницата е посетена 3616 пъти.

Предложете корекция

Selected text (if you see this, there is something wrong)

(Незадължително) E-mail за обратна връзка: