25.07.2017 Views

Intro-CSharp-Book-v2015

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

944 Въведение в програмирането със C#<br />

две по-малки: "изтриване на елемент от дадена позиция в масив" и<br />

"вмъкване на елемент в масив на дадена позиция").<br />

- Поредна нова идея, която се базира на коренно различен подход: да<br />

разделим масива на две части с приблизително равен брой елементи,<br />

след което да сортираме първата част, да сортираме втората част и<br />

накрая да обединим двете части. Можем да приложим същото<br />

рекурсивно за всяка от частите докато не достигнем до част с<br />

големина един елемент, който очевидно е сортиран. При този подход<br />

пак имаме разделяне на сложната задача на няколко по-прости подзадачи:<br />

разделяне на масив на две равни (или почти равни) части;<br />

сливане на сортирани масиви.<br />

Няма нужда да продължаваме повече, нали?. Всеки може да измисли още<br />

много идеи за решаване на задачата или да ги прочете в някоя книга<br />

по алгоритми. Показахме ви, че винаги сложната задача може да се раздели<br />

на няколко по-малки и по-прости задачки. Това е правилният подход при<br />

решаване на задачи по програмиране – да мислим за големия проблем като<br />

за съвкупност от няколко по-малки и по-прости проблема. Това е техника,<br />

която се усвоява бавно с времето, но рано или късно ще трябва да свикнете<br />

с нея.<br />

Проверете идеите си!<br />

Изглежда не остана нищо повече за измисляне. Имаме идея. Тя изглежда,<br />

че работи. Остава да проверим дали наистина работи или само така си<br />

мислим и след това да се ориентираме към имплементация.<br />

Как да проверим идеята си? Обикновено това става с един или с няколко<br />

примера. Трябва да подберете такива примери, които в пълнота покриват<br />

различните случаи, които вашият алгоритъм трябва да преодолее.<br />

Примерите трябва хем да не са лесни за вашия алгоритъм, хем да са<br />

достатъчно прости, за да ги разпишете бързо и лесно. Такива примери<br />

наричаме "добри представители на общия случай".<br />

Например ако реализираме алгоритъм за сортиране на масив в нарастващ<br />

ред, удачно е да вземем пример с 5-6 числа, сред които има 2 еднакви, а<br />

останалите са различни. Числата трябва първоначално да са подредени в<br />

случаен ред. Това е добър пример, понеже покрива много голяма част от<br />

случаите, в които нашият алгоритъм трябва да работи.<br />

За същата задача за сортиране има множество неподходящи примери, с<br />

които няма да можете ефективно да проверите дали вашата идея за<br />

решение работи коректно. Например можем да вземем пример само с 2<br />

числа. За него алгоритъмът може да работи, но по идея да е грешен. Можем<br />

да вземем пример само с еднакви числа. При него всеки алгоритъм за<br />

сортиране ще работи. Можем да вземем пример с числа, които са<br />

предварително подредени по големина. И за него алгоритъмът може да<br />

работи, но да е грешен.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!