Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
esepter&teoria.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
13.77 Mб
Скачать

20.Шелл сұрыптауы (Shell_sort) және оның ерекшеліктері.

Айырбастаумен сұрыптайтын алгоритм/. Бұл сұрыптау алгоритм/ң классының өкілдері ретінде бұдан бұрын қарастырылған көпіршікпен сұрыптау, сонымен қатар Шеллдың сұрыптау алгоритмі, тез реттеу алгоритмі, т.б. алгоритм/ мыссал бола алады. Шеллдың реттеу алгоритмін қарастырсақ. Шеллдың реттеу алгоритмі көпіршіктік сұрыптау алгоритмін жалпылайды. Салыстырылатын бастапқы массивтің екі жақын орналасқан элементтерін ғана емес, бекітілген d қашақтықта орналасқан элементтерді де салыстырады. Бірінші қадамда массивтің жарты ұзындығына орналасқан элементтерді салыстырады, яғни тең. Келесі қадамда деп есептелінеді., ары қарай қашықтықтағы элементтер салыстырылып қажет жерде алмастырылып отырады. Осы процедураның соңғы кезеңдерінде элемент/ арасында қашақтық болған кезде алмастыру қажет етпеуі мүмкін, себебі алғашқы кезеңдерде салыстырылып ж/е алмастырылған элементтер өз орындарында орналасқанынан болады. Яғни кезеңдердің айналуына байланысты алмастыру саны төмендей береді екен. Шеллдың реттеу алгоритмінің жұмысын мысалмен көрсетсек:

Шеллдың реттеу алгоритмінің модификацияланған нұсқасы:

Procedure q.Shellsort(a,n);

……

begin

k:=n div 2;

while k 1 do

begin for i:=k+1 to n do

if a[i-k]>a[i] then

begin

r:=a[i]; j:=i-k;

L: a[j+k]:=a[j];

if a[j-k]>r then

begin

j:=j-k; goto L;

end; end;

a[j]:=r;

end;

k:=k div 2;

end; end;

Тәжірибе жүзінде қарастырылған бастапқы массив үшін Шеллдың реттеу алгоритмі үш қадамнан кейін реттелген массив құрады:

Тәжірибе жүзінде Шеллдың модификацияланған сұрыптау алгоритмін басқа сұрыптау алгоритмдерімен салыстыру нәтижесінде, оның өнімділігінің есептелінген бағасы жоғары екендігіне көз жеткізуге болады. Программадағы қолданылған L белгісіне қатысты оператор аз өзгерістерге ұшырайды. L белгісінен кейін орналасқан 2 ішкі шарт/ды процедураның модификацияланған вариантында жекелеп жазуға болады және go to операторын қолданбай өзгертуге болады. Кез келген жағдайда шартымен шартты операторды while операторымен алмастыруға болады. Алмастырған кезде 2ші шарт өзгермейді.

Shellsort процедурасы үшін d мән/ң тізбегін тандау өте маңызды және алгоритмнің эффективтілігін атнықтайды. Айтылып отырған эффективтілігін бағалау салыстыруларына тең. боолған жағдайда стандартты Шелл сұрыптау процедурасының бағасы O(n3/2) салыстыруға тең болады. Осы баға процедураның шапшаңдығының бағасы ретінде анықталады[2].

21.Quick_sort сұрыптауы оның ерекшеліктері.

A. Hoar ұсынған шапшаң сұрыптау алгоритмін қарастырайық. QuickSort алгоритмінің күрделілігі орташалап алғанда O(n*log2 n) жақын болады. QuickSort алгоритмінің идеясына тоқталайық. Бастапқы берілген массивтің қандай да бір элементі таңдалып бекітіледі, әдетте массивтің ортаңғы немесе шеткі элементтерін осы тіректік элементпен кезекпен салыстырады. Салыстыру нәтижесінде кезекті элемент тіректік элементтен үлкен болса, онда оны тіректік элементтің оң жағына орналастырады. Кері жағдайда тіректік элементтің сол жағына алмасады. Осы тіректік элемент массивтің қалған барлық элементтерімен салыстырылғаннан кейін өзінің массивтегі түпкілікті орнын анықтайды. Сөйтіп, бұл элемент жаңа массивтегі орнына жайғасып массивті 2 бөлікке бөледі. Ол бөліктердің әрқайсысына да ұқсас процедура қолданылады, егер бөліктегі элемент саны бірден артық болса. Ал егер массивтің барлық элементтері осы процедурадан өтсе, соңында барлық элементтер өзінің орынын тауып реттелген массив түзіледі. Әрине әлі де массив элементтерін қандай тәртіппен таңдап салыстыру қажетті екенін анықтамадық. Салыстырудан кейін кезекті тексеруге келетін массив элементі осы массивтің қандай бөлігіне орналасатыны және оны қалай жүзеге асыратыны ашық сұрақ. QuickSort алгоритмінің жұмысын мысалмен көрсетейік.

25,31,7,4,10,18,13,5,21,11,9 массиві берілсін. Тіректік элемент ретінде ең шеткі сол элемент таңдалатын нұсқаны қарастырайық. Алгоритмнің жұмысына қажетті оң жақ (←) және сол жақ (→) сілтемелерді енгізейік. Сол жақ сілтеме сол жақтан массивтің шеткі элементінен бастап оңға қарай жылжиды. Бірінші қадамда бұл x1 элементі. Оң жақ сілтеме сол жаққа қарай жылжиды, массивтің оң жақ шетіндегі элемент xn –нен бастап жылжиды. Сол жақ сілтеме тіректік элемент xi1 бастап, бірінші қадамда xi1= x1 болады, xi элементін іздейді. Бұл элемент xi1< x1 қасиетке ие болу керек. Егер ондай элемент табылса, онда сілтеме осы элементке тоқталады. Ал егер ондай элемент табылмаса, онда бастапқы массив кемімелі болғаны болып шығады. Оң жақ сілтеме тіректік элемент xk1 –дан бастап жылжиды. Бірінші қадамда xk1= xn тең. Сілтеме массивтен xk < xi1 қасиетке ие xk элементін іздейді, Егер ондай элемент табылса, онда сілтеме сол элементке тоқталады. Егер табылмаса, онда сол жақ сілтемеге дейін массивтің бөлігі өспелі болғаны болады. Екі сілтеме екі әртүрлі массив элементтерде тоқталды. Яғни xi , xk элементтері i ≠ k. Осы элементтердің орынын ауыстырамыз.

Келтірген амалдарды қайталаймыз. Сітемелер массивтің 6ip элементінде кездессе, тіректік xi1 элемент сілтемелер кездескен элементке «дейін» немесе «кейін» орнын ауыстырады. Жаңа этаптың басында бектілген элемент массивтегі екі бөлікке беліп, реттелінетін массивтің өзінің түпкілікті орынын табады. Жаңа этапта алгоритм массивтің кай бөлігінде сұрыптаманы жүргізуді шешеді. Процедураны жалғастыру ушін қай массив бөлігін таңдау қажетілігі маңызды кағидалық сұрақ. Теориялық негізделген кағида б/ша массивтің 2 бөлік/ң кішісі таңдалады деп жауап береді. Мысалымызға оралсақ, бұл жағдайдың шешімін анық байқауға болады. *-мен түпкілікті орны анықталатын элемент/ белгіленген, кейбip 6ip типті қадам/ көрсетілмеген:

25.31.7.4.10.18.13.5.21.11.9

25.31.7.4.10.18.13.5.21.11.9

25,9,7,4,10,18,13, 5,21,11,31

.....................................

25,9,7,4,10,18,13, 5,21,11,31

9, 7, 4, 10,18, 13, 5, 21, Ц, 25*, 3i*

9, 7,4,10,18,13, 5,21,11,...

9, 7,4,10,18,13, 5,21,11,...

9, 7,4,5,18,13, 10,21,11,...

....................................

9, 7,4,5,18,13, 10,21,11,...

7, 4,5,9*,18,13, 10,21,11,...

7,4,5,...

7,4,5,...

4*, 5*, 7*, 9*, 18, 13,10,21,11,...

...18,13,10, 21,11,...

...18,13,10,11,21,...

...18,13,10,11,21,...

...13,10, 11, 18*,21*,.:.

...13,10,11,...

...13,10,11,...

...10*, 11*, 13*, ...

4*, 5*, 7*, 9*, 10*, 11*, 13*, 18*, 21* 25*, 31*

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]