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.

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 />

Всъщност може да се окаже, че няма нужда да си отговаряте на този въпрос.

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

Saved successfully!

Ooh no, something went wrong!