Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
954 Въведение в програмирането със C#<br />
производителността. Нашия алгоритъм ще работи супер бързо за 52<br />
карти.<br />
Въпреки че в реалността рядко играем с повече от 1 или 2 тестета карти,<br />
нека се замислим колко време ще отнеме да разбъркаме голям брой карти,<br />
да кажем 50 000? Ще имаме 50 000 единични размествания по 4 операции<br />
за всяко от тях или общо 200 000 операции, които ще се изпълнят на<br />
момента, без да се усети каквото и да е забавяне.<br />
Ефективността е въпрос на компромис<br />
В крайна сметка правим извода, че алгоритъмът, който сме измислили е<br />
ефективен и ще работи добре дори при голям брой карти. Имахме<br />
късмет. Обикновено нещата не са толкова прости и трябва да се прави<br />
компромис между бързодействие на алгоритъма и усилията, които влагаме,<br />
за да го измислим и имплементираме. Например ако сортираме числа,<br />
можем да го направим за 5 минути с първия алгоритъм, за който се сетим,<br />
но можем да го направим и много по-ефективно, за което ще употребим<br />
много повече време (да търсим и да четем из дебелите книги и в Интернет).<br />
В този момент трябва да се прецени струва ли си усилията. Ако ще сортираме<br />
20 числа, няма значение как ще го направим, все ще е бързо, дори с<br />
най-глупавия алгоритъм. Ако сортираме 20 000 числа вече алгоритъмът има<br />
значение, а ако сортираме 20 000 000 числа, задачата придобива съвсем<br />
друг характер. Времето, необходимо да реализираме ефективно сортиране<br />
на 20 000 000 числа е далеч повече от времето да сортираме 20 числа, така<br />
че трябва да помислим струва ли си.<br />
Ефективността е въпрос на компромис – понякога не си<br />
струва да усложняваме алгоритъма и да влагаме време и<br />
усилия, за да го направим по-бърз, а друг път бързината е<br />
ключово изискване и трябва да й обърнем сериозно<br />
внимание.<br />
Сортиране на числа – оценяване на ефективността<br />
Видяхме, че подходът към въпроса с ефективността силно зависи от<br />
изискванията за бързодействие. Нека се върнем сега на задачата за<br />
сортирането на числа, защото искаме да покажем, че ефективността е<br />
пряко свързана с избора на структури от данни.<br />
Да се върнем отново на въпроса за избор на структура от данни за<br />
съхранение на числата, които трябва да сортираме по големина в нарастващ<br />
ред. Дали да изберем List или SortedDictionary? Не е ли подобре<br />
да ползваме някаква проста структура, която добре познаваме,<br />
отколкото някоя сложна, която изглежда, че ще ни свърши работата малко<br />
по-добре. Вие познавате ли добре червено-черните дървета (вътрешната<br />
имплементация на SortedDictionary)? С какво са по-добри от List?<br />
Всъщност може да се окаже, че няма нужда да си отговаряте на този въпрос.