Maǵlıwmatlar strukturası hám algoritmler
.pdf
begin
i := L; j := r;
x := a[(L + r) div 2]; repeat
while a[i] < x do i := i + 1;
while a[j] > x do j := j - 1;
if i <= j then begin
y := a[i]; a[i] := a[j]; a[j] := y;
i := i + 1; j := j - 1
end; until i > j;
if L < j then sort (L, j); if i < r then sort (i, r); end;
procedure QuickSort; begin
sort (1, n); end;
Algoritm effektivligi:
O(n log n) – eń effektiv usıl.
Shell saralawı (qısqarıp barıwshı adımlar arqalı saralaw)
Tuwrı qosıw usılın 1959 jılı D. Shell tárepinen jetilistiriw usınıs e tilgen. Tómendegi sızılmada usı usıl kórsetilgen:
Basında bir – birinen 4 adımda jaylasqan elementler óz – ara toparǵa bólinip saralaw ámelge asırıladı. Bunday prosess tórtlik saralaw dep ataladı. Birinshi ótiwden keyin elementler qayta toparǵa bólinip, endi hár eki adımdaǵı elementler salıstırıladı. Bul bolsa ekilik saralaw dep ataladı. Hám aqırında, úshinshi ótiwde ápiwayı yaki jekkelik saralaw ámelge asırıladı.
Bir qarawda usı usıl menen saralaw ámelge asırılǵanda saralaw prosessi kemeyiw ornına artıp baratırǵanday túyilse, elementlerdiń orın almastırıwları salıstırmalı kem ámelge asırıladı.
Kórinip turıptı, bul usıl nátiyjesinde tártiplestirilgen massiv payda bolıp, hár bir ótiwden keyin saralawlar kemeyip baradı. Eń jaman jaǵdayda aqırǵı jumıstı jekkelik saralaw ámelge asıradı.
Barer usılınan paydalanılǵanda hár bir saralaw óziniń barerine iye bolıwı kerek hámde programma onıń ornın anıqlawı ushın onı ilajı barınsha ańsatlastırıw kerek. Sonıń ushın massivti [-h1..N] ge shekem keńeytiriw kerek boladı.
51
h[1..t] – adımlar ólshemi massivi a[1..n] - saralanıp atırǵan massivk – saralaw adımı
x – qosılıp atırǵan element mánisi
Subroutine ShellSort const t = 3;
h(1) = 5;
h(2) = 3;
h(3) = 1;
var
h:array [1..t] of integer;
a:array [1..n] of integer; k, x, m, t, i, j: integer; begin
for m = 1 to t do begin
k:= h(m);
for i = k + 1 to n do begin
x:= a(i);
for j = i-k downto k do begin
if x < a(j ) then a(j+k):= a(j); else
goto 1; end ; end; end;
1:a(j+1) = x ;
end; end .
Ulıwma alǵanda, qanday adımlar tańlanǵanda eń jaqsı nátiyje alınıwı dálillenbegen bolsada, lekin bul adımlar biri ekinshisiniń kóbeytiwshileri bolmawı kerekligi anıqlanǵan.
D. Knut adımlardıń tómendegishe izbe-izligin usınıs etken (keri tártipte): 1,3,7,15,31,…,yaǵnıy: hm-1=2hm+1, ht=1, t = [log2n] - 1. Eger adımlar usı kóriniste anıqlansa, algoritm effektivligi tártibi O(n1.2).
Qadaǵalaw sorawları
1.Saralaw degende neni túsinesiz?
2.Saralawdıń tiykarǵı usılların aytıp beriń.
3.Saralawdıń qaysı usıları qatań usılǵa tiyisli?
4.Saralawdıń jaqsılaǵan usılların aytıp beriń.
5.Qanday saralaw turaqlı delinedi?
6.Tuwrıdan-tuwrı qosıw usılı ideyası neden ibarat?
7.Tuwrıdan-tuwrı tańlaw usılı ideyası neden ibarat?
8.Tuwrıdan-tuwrı almastırıw usılı ideyası neden ibarat?
9.Joqarıdaǵı usıllarning bir biridan parqın aytıp beriń.
10.Qaysı saralaw usılı eń effektiv bolıp esaplanadı?
11.Shell usılı qaysı tiykarǵı saralaw usılına tiyisli?
52
9-leksiya. Giltlerdi sáwlelendiriw (jaylastırıw) (2 saat)
Reje
1.Giltlerdi sáwlelendiriw.
2.Sáwlelendiriw funksiyasini tańlaw.
3.Tosqınlıqtı sheshiw algoritmleri
Jaylastırıw usılı (xeshlashtirish) maǵlıwmatlar strukturasında element jaylasqan orındı tez anıqlawǵa baǵdarlanǵan usıl. Jaylastırıw usılında maǵlıwmatlar ápiwayı massiv sıpatında ańlatılǵan boladı. Usı usılda maǵlıwmatlar giltleri N sáwlelendiriw járdeminde massiv indekslerine sáwlelendiriledi. Sol sebepli usı sáwlelendiriw «giltlerdi sáwlelendiriw» dep ataladı.
Elementti kestege qosıwdan aldın onıń adresi xesh-funksiya arqalı anıqlanadı: A
= h(K), bul jerde K – gilt, A – kestedegi element adresi bolıp, 0 A N-1, shárt orınlı boladı.
Usı usıldan kóbinese tereklerde hámde onı qollanıw tabıs keltiriwshi máselelerde paydalanıladı. Giltlerdi sáwlelendiriw menen baylanıslı bolǵan tiykarǵı mashqala bul giltlerdiń qabıl etiwi
múmkin bolǵan mánisler toplamınıń yad adresi (massiv indeksleri) qabıl etiliwi múmkin bolǵan toplamnan bir qansha keńliginde. Tómendegishe mısal kórip shıǵayıq. 1000 adam bar dep oylayıq. Hár bir adamdı anıqlaw (identifikasiya qılıw) ushın gilt sıpatında atların qarayıq. Hár bir at 16 ǵa shekemgi háripten ibarat bolsın. Ol jaǵdayda biz bolıwı múmkin bolǵan gilt mánisleri toplamın (bul jerde bolıwı múmkin bolǵan giltler toplamı 2616 elmentten ibarat boladı, eger álipbe 26 háripten ibarat bolsa), 103 indeksli massivke sáwlelendiriw kerek boladı. Joqarıdaǵı mısaldan kórinip turıptı, N funksiya ishine sáwlelendiriwshi sáwlelendiriw boladı, yaǵnıy «kópshilik mánis bir mániske sáwlelendiriledi». Eger qandayda bir gilt berilgen bolsa, ol jaǵdayda izlew ámeliniń birinshi adımı - gilt penen baylanısqan indeksti esaplaw, yaǵnıy h = H(k), ekinshi hám tiykarǵısı – tekseriw bolıp esaplanadı, yaǵnıy bunda haqıyqattan da h funksiya T massivte (kestede) k giltli elementtiń identifikasiya qılınıp atırǵanı tekseriledi.
Sáwlelendiriw funksiyasın tańlaw
Óz-ózinen belgili, sáwlelendiriwdiń qálegen jaqsı funksiyası giltlerdi berilgen indeksler aralıǵına ilajı barınsha teń bólistiredi. Egerde usı talap orınlı bolsa, ol jaǵdayda qosımsha shárt hám shekleniwler bolmaydı. Egerde sáwlelendiriw pútkilley tosınarlı bolsa jáne de jaqsıraq boladı. Usı usılga ―maydalaw‖ (xeshirlew), yaǵnıy argumentti bóleklew dep ataladı. N funksiya bolsa ―jaylastırıw funksiyası‖ dep ataladı. N funksiya ilajı barınsha effektivli esaplanıwı kerek, yaǵnıy onsha kóp bolmaǵan tiykarǵı arifmetikalıq ámellerden quralǵan bolıwı kerek.
k gilt tártip nomerin barlıq múmkin bolǵan giltler toplamında ańlatıwshı ORD(k) funksiya berilgen bolsın. Bunnan tısqarı, i massiv indeksi 0 ... N — 1 aralıqte jaylasqan dep oylayıq, bul jerde N — massiv ólshemi. Bunday jaǵdayda ―jaylastırıw funksiyası‖ sıpatındatómendegi funksiyanı alıw múmkin:
H(k) = ORD(k) MOD N
Egerde ―jaylastırıw funksiyası‖ joqarıdaǵı sıyaqlı anıqlanatuǵın bolsa, ol jaǵdayda gilt mánisleri indeksler ózgeriwi aralıǵına tegis bólistiriledi. Sol sebepli, giltlerdi sáwlelendiriw ámelge asırılıp atırǵan waqıtta kóbinese onı tiykar qılıp aladı. Bunnan tısqarı, eger massiv uzınlıǵı N ekiniń qandayda bir dárejesine teń bolsa, ol jaǵdayda funksiya effektiv esaplanadı. Lekin, eger gilt háripler izbe-izliginen quralǵan bolsa, ol jaǵdayda tap usınday funksiyadan waz keshiwge tuwrı keledi. Sebebi, bunday jaǵdayda barlıq giltler teń itimallıqqa iye dep qaraw natuwǵrı boladı. Nátiyjede, tek ǵana bir neshe belgiler menen parqlanıwshı sózlerdi bir indekske sáwlelendiriw itimallıǵı joqarı boladı, bul bolsa giltlerdiń tegis emes bólistiriliwine alıp keliwi múmkin. Sol sebepli, ámeliy máseleler sheshilip atırǵanda N sıpatında túp sanlardı alıw usınıs etiledi.
53
Tosqınlıqtı sheshiw algoritmleri
Eger berilgen giltke sáykes keste qatarı kerekli (izlenip atırǵan) elementke iye emesligi belgili bolsa, ol jaǵdayda tosqınlıq (―konflikt‖) júzege keldi delinedi. Bunday jaǵday, egerde bir neshe element bir indekske sáwlelendiriletuǵın giltlerge iye bolsa júzege keledi. Bunday jaǵdayda usı berilgen gilt arqalı tolıq anıqlanıwshı indeks boyınsha ekinshi urınıw ámelge asırıladı (Alternativ indeks qáliplestiriw arqalı). Ekinshi indeksti qáliplestiriwdiń bir qansha usılları bar. Eń ápiwayı jollarınan biri bul – birinshi H(k) indeksleri bir qıylı bolǵan barlıq qatardı bir-birine baylanıstırıw, yaǵnıy baylanısqan dizim sıyaqlı. Bunday usılǵa tuwrıdan-tuwrı baylanıstırıw (direct chaining) dep ataladı. Payda bolǵan dizim elementleri tiykarǵı kestede jaylasıwı da jaylaspawı da múmkin.
Bunday jaǵdayda dizim elementleri jaylasqan yad tolıqlıq (tolıp-tasıw, perepolnenie) tarawı delinedi. Usı usıldıń kemshiligi, ekilemshi dizimlerdi gúzetip barıw hámde tosqınlıqqa barıwshı elementler dizimi hár bir qatarında múráját ushın orın ajıratıw kerek boladı.
Qarama-qarsılıqtı sheshiwdiń jáne bir usılında bolsa berilgen kesteniń berilgen qatarında kerekli element bar bolmasa, kerekli element tabılǵanǵa shekem yaki bos qatarǵa barǵansha basqa qatarlardı kórip shıǵadı. Eger qarap shıǵıw bos qatarǵa shekem barıp jetse, ol jaǵdayda kórsetilgen gilt berilgen kestede joq dep esaplanadı. Qarama-qarsılıqtı bunday sheshiw usılına ashıq adresli dep ataladı. Tábiiy, qálegen berilgen gilt ushın indeksler izbeizligi ekinshi urınıwda bir qıylı bolıwı lazım. Bunday jaǵdayda qarap (kórip) shıǵıwalgoritmi tómendegi sxemada isleydi:
h = H(k) i = 0 repeat
if T(h) = k
then element tabıldı else if T(h) = free
then element kestede joq else {tosqınlıq}i :=
i + 1
h := H(k) + G(i)
endif
endif
until tabıldı, yaki kestede joq.
Qadaǵalaw sorawları
1.Giltlerdi almastırıw ne?
2.Sáwlelendiriw funksiyası wazıypası neden ibarat?
3.Qanday jaǵdaylarda tosqınlıq júzege keledi?
4.Qarama-qarsılıqtı sheshiwdiń qanday usılların bilesiz?
54
