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 />
работи, но да е грешен.