Към съдържанието
bgmateriali.com

Лекция по програмиране: седем метода за сортиране с код, оценка на сложността и устойчивост

Платен материал - 1 кредит или 3,98 €

Сподели:

Зареждане на оценките…

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

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

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

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

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

Накрая са методите с гарантирана сложност. При сортирането чрез сливане са изброени предимствата поред, включително последователният достъп до елементите и устойчивостта, и честно е посочен основният недостатък. При пирамидалното сортиране първо е дадено определението за пирамида с трите условия, които трябва да са изпълнени, после стъпките на алгоритъма една по една и накрая кодът.

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

Какво получаваш. Готов код за всеки метод, който се компилира и се чете лесно. Оценки на сложността с обяснение откъде идват. Устойчивост и препоръки за приложение при всеки метод. И отделен, подробен раздел по най-трудния въпрос в темата, този за разделящия елемент.

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

За какво служи. За подготовка за изпит по структури от данни и алгоритми. За курсова работа, в която трябва да се обоснове избор на метод. За бърза справка, когато трябва да се напише сортиране и да се прецени кое е подходящо. И за преговор на оценките на сложността преди колоквиум.

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

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

Полза за студента: сигурност, че по темата нищо не е пропуснато. След прочита се знае кои методи са устойчиви, кой кога се използва, откъде идват оценките на сложността и как се обосновава избор на метод.

Заключено съдържание
Купете материала за пълен достъп
методи за сортиране
сортиране чрез вмъкване
пряка селекция
метод на мехурчето
сортировка на Шел
бързо сортиране quicksort
сортиране чрез сливане
пирамидална сортировка
времева сложност
устойчивост на алгоритъм

Свързани материали

Пет подхода в проектирането на алгоритми – разделяй и владей, динамично програмиране, връщане назад, лакоми и вероятностни алгоритми

Материал, който събира пет различни начина за подхождане към една задача и показва защо всеки от тях се появява там, където предходният се проваля. Именно тази последователност държи изложението. Всеки нов подход не е представен сам за себе си, а като отговор на недостатък на предишния — така се вижда логиката, по която са възникнали. Темата обхваща основните подходи в проектирането на алгоритми и е събрана на седем страници. Първата част е за разделянето на подзадачи. Тя започва с трите стъпки на метода, а после веднага минава към конкретен пример — умножение на две многоразредни числа. Именно този пример е най-силната част. Показано е как обичайният начин изисква определен брой умножения, как едно преобразуване спестява едно от тях и как оттам сложността пада. Изводът е проверен и с числа — две четириразредни числа, при които се брои колко умножения излизат по всеки от двата начина. Следва пълното извеждане на общата зависимост. То минава през няколко последователни замествания и завършва с разглеждане на три случая според съотношението между два параметъра. При всеки случай е получена отделна оценка. Втората част въвежда следващия подход и обяснява кога предходният не върши работа — когато броят на подзадачите зависи от размера на входа. Третата част е за търсенето с връщане назад. Тя стъпва изцяло на една задача — пресичане на пустиня с ограничен запас от гориво. Задачата е решавана постъпателно, като на всяка стъпка се пита къде трябва да стои поредният склад, а отговорът за предходния се използва при следващия. Особено ценен е този начин на изложение. Читателят не получава готова формула, а върви заедно с разсъждението, докато решението се самоизгради. Четвъртата част е за постъпателните алгоритми, разгледани чрез две различни разграничения, а после и чрез задача за връщане на пари, представена в номерирани стъпки. Петата част е за вероятностните алгоритми. Разграничени са от обичайните, обяснено е кое ги прави такива, а после са изброени три техни разновидности. Приведена е и формула за получаване на случайни числа, следвана от примерна програма. Материалът съдържа три чертежа и множество изрази, а на места е даден и код. За преподавателя това е готова опора за няколко часа, при която всяка част върши работа и поединично. Студентът получава петте подхода на едно място, с по един разработен пример при всеки.

1 кредит
проектиране на алгоритми
разделяй и владей
динамично програмиране
+7
Разгледай

Синтез и анализ на алгоритми – 45 разработени изпитни въпроса с примерен код, схеми и оценки на сложността за подготовка на студенти

Четиридесет и пет въпроса, разработени един след друг — целият конспект по един предмет, събран в един файл. Обемът надхвърля сто и шестдесет хиляди знака. Именно тази пълнота прави материала стойностен. Студентът не търси по няколко източника за отделните теми, а разполага с готов текст за всяка от тях. Материалът е върху синтеза и анализа на алгоритми и е събран на тридесет и седем страници. Началото поставя основите — какво представлява алгоритъмът, по какви начини може да бъде записан и кои са неговите свойства. Изброени са пет отделни свойства, а после и няколко признака, по които алгоритмите се делят на видове. Оттам изложението върви по конспекта, като темите са подредени по нарастваща сложност. Първата голяма група е за основните структури от данни — дървета с техните свойства и обхождания, списъци, стек, опашки и хеш таблици. При всяка е дадена и представа за начина, по който се реализира. Средището са сортировките. Разгледани са седем различни метода в отделни въпроси, като при няколко от тях е показано и как алгоритъмът може да се подобри. Особено ценна е групата за подходите. Тук са разделяй и владей, постъпателните алгоритми с три отделни приложения, динамичното програмиране, връщането назад и алгоритмите от теорията на игрите. Финалната група е за графите — представяне, топологично сортиране, най-къс път по два начина, пропускателна способност и минимално обхващащо дърво по два известни алгоритъма. Изложението е конспектно и удобно за преговор. Определенията са кратки, стъпките са номерирани, а на много места е приведен и примерен код с обяснение под него. При голяма част от въпросите е дадена и оценката на сложността, изразена със съответното означение — точно онова, което се пита на изпит. Материалът съдържа осемдесет и осем изображения — блокови схеми, дървета, графи и таблици. Преподавателят получава готов набор от разработени въпроси, който върши работа като мерило при проверка. Студентът разполага с целия конспект в готов вид — удобно за подготовка в последните дни, когато времето не стига за четене на лекции. Всеки въпрос се преговаря самостоятелно, а подредбата позволява да се тръгне направо от онзи, който предстои.

1 кредит

Синтез и анализ на алгоритми – сбити записки за преговор: целият конспект, събран на девет страници с деветдесет и три чертежа

Целият конспект по един предмет, сведен до девет страници. Онова, което в обичайните записки заема тридесет и седем, тук е събрано в една четвърт от обема — без да е изпуснато съществено. Именно това сгъстяване е смисълът на материала. Той не е предназначен за първо запознаване с предмета, а за последния преговор, когато времето не стига и е нужно всичко да се обхване наведнъж. Съкращаването е постигнато по два начина. Първият е шрифтът — основният текст е с размер шест пункта, а част от него дори с пет. Вторият са съкращенията: над двеста в целия текст, при това последователно прилагани. Съкратени са и заглавията на самите въпроси, така че всяко се побира на един ред. Обхватът следва конспекта. Началото е с основните понятия, свойствата на алгоритъма и класификациите му по няколко признака. Следват математическите основи, рекурсията с нейните типове и опасности, а после и същинският анализ — означенията, определенията и правилата. Отделни въпроси прилагат тези правила върху конкретни случаи: цикли, вложени цикли, рекурсия и многократна рекурсия. Средището са структурите. Дърветата заемат няколко последователни въпроса — понятия и класификации, свойства на двоичните, обхождане и рекурсивни алгоритми върху тях. Оттам следват сортировките, а после и групата за подходите: разделяй и владей, динамичното програмиране в два въпроса, постъпателните алгоритми с техните приложения и връщането назад, включително при игри. Финалната група е за графите — общи понятия, представяне, топологично сортиране, най-къс път, пропускателна способност и минимално обхващащо дърво. Особено ценни са деветдесет и трите чертежа. При такова сгъстяване те носят голяма част от обяснението — дървета, графи, схеми и таблици, вмъкнати направо между редовете. Материалът е готов за печат в този вид. Не се нуждае от преформатиране, а разположението е съобразено с разрязване на отделни ленти. Преподавателят може да го използва като бърз преглед какво влиза в изпита. Студентът получава целия материал в най-сбит възможен вид. Годен е за преговор в последните часове преди изпит, когато е нужно освежаване, а не четене.

1 кредит

Проектиране на техническо изделие – основни проблеми, видове методи, функционален метод. Алгоритъм в шест стъпки

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

1 кредит

Графи (мрежови структури) – учебен материал по структури от данни: понятия, статично и динамично представяне, операции и аксиоми, алгоритми с код и решени примери

Осем страници, в които една структура от данни е разгледана от определението до три готови алгоритъма с код – точно каквото трябва за изпит по програмиране. Материалът е конспектен, но не е сбит до неразбираемост. Всяко понятие е въведено с определение и онагледено с пример, а алгоритмите не са само описани – дадени са с реален код и с проследено числено изпълнение. Първата част е терминологична и обхваща в плътна последователност всичко, което се пита: определението за граф, разликата спрямо дървото, видовете дъги и графи, инцидентност и съседство, степен на връх с отделните ѝ разновидности при ориентиран граф, път, дължина, прост път, цикъл, свързаност и подграфи. Означенията са въведени поред и се използват последователно нататък. Втората част е за представянето в паметта и е разделена на три подхода. Статичните са три на брой, всеки с приложена схема. Динамичното е дадено с готови структури, а комбинираното – с още една декларация. Тук е и бележката кога кой подход е за предпочитане. Следва списък с осемте основни операции, а веднага след него – деветте аксиоми, при които те са определени. Последната аксиома важи само за единия вид графи и това е изрично уточнено. Такова изброяване рядко се среща събрано на едно място. Средището са трите алгоритъма и всеки е разгърнат по един и същи начин. Първият е за най-къс път и е представен с постановка, с описание на работата чрез поддържане на множество, с числен пример и с масивите, използвани в него, а после и с пълен програмен код. Накрая е дадена сложността при двата начина на представяне. Вторият е за топологично сортиране. Тук е обяснено защо резултатът рядко е единствен, приведени са няколко възможни подредби, дадени са трите стъпки и е посочен обратният вариант на същия алгоритъм. Третият е за най-дълъг път и започва с практическа задача от разработването на програмен продукт, преведена в термините на графа. След трите стъпки и сложността следва напълно проследено числено изпълнение по стъпки, а накрая – указание как алгоритъмът се реализира рекурсивно. За преподавателя това е готова опора за няколко учебни часа, която не изисква подготовка. Трите алгоритъма вършат работа и поединично – като материал за упражнение или като тема за самостоятелна работа. За студента ползата е ясна: целият изпитен въпрос е събран на едно място, а програмният код и проследените числени примери спестяват търсенето по няколко източника. Материалът се преговаря непосредствено преди изпит и върши работа при курсова задача.

1 кредит

Протокол по Програмиране и използване на компютри: едномерни масиви на езика С. Три задачи с готов код – търсене на максимум, обработка по условие и обръщане на масива

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

1 кредит