Maǵlıwmatlar strukturası hám algoritmler
.pdf
6-Leksiya. Rekursiv maǵlıwmatlar strukturası (4 saat)
Reje:
1.Rekursiya haqqında túsinik.
2.Terekler. Olardı súwretlew.
3.Binar terekler.
4.Kóp ólshemli terekti binar kóriniske keltiriw.
5.Terekler ústindegi ámeller.
Rekursiv algoritm hám rekursiv maǵlıwmatlar strukturaların kórip shıǵayıq.
Rekursiya – sonday prosess, bunda prosesstiń barıwı ózine múráját qılıw menen baylanıslı
boladı..
Rekursiv maǵlıwmatlar strukturasına mısal qılıp sonday strukturalardı alıw múmkin, usı strukturalardıń elementleriniń ózi de tap sonday struktura boladı (qarań, sızılma).
Terekler
Terek |
– |
bul |
sızıqlı |
emes |
baylanısqan |
maǵlıwmatlar |
strukturası |
(qarań, sızılma). |
|
|
|
|
|
|
|
Terek wzining tómendegi belgileri menen klassifikasiyalanadı:
-terekte sonday bir element bar, oǵan basqa elementlerden múráját joq. Usı elementke terek tamırı delinedi;
-terekte qálegen elementke shekli sandaǵı kórsetkishler járdeminde múráját qılıw múmkin;
-terektiń hár bir elementi tek ǵana ózinen aldıńǵı kelgen bir element penen baylanısqan. Terektiń hár bir túyini aralıq yaki terminal (japıraq) bolıwı múmkin. Joqarıdaǵı sızılmada M1, M2 - aralıq, A, B, C, D, E - japıraqlar. Terminal túyinniń ózine tán klassifikasiyası onıń shaqaları joqlıǵında.
Bálentlik – bul terek basqıshı sanı. Joqarıdaǵı sızılmadaǵı terek bálentligi ekige
teń.
Terek túyinlerinen shıǵıp atırǵan shaqalar sanı túyinnen shıǵıw dárejesi delinedi (Keltirilgen sızılmada M1 ushın shıǵıw dárejesi 2, M2 ushın bolsa 3 ke teń). Terekler shıǵıwdárejesi boyınsha klasslarǵa ajıratıladı:
1)eger maksimal shıǵıw dárejesi m bolsa, ol jaǵdayda bunday terek m-shi tártipli terekdelinedi;
2)eger shıǵıw dárejesi 0 yaki m bolsa, ol jaǵdayda tolıq m-shi tártipli terek boladı;
3)eger maksimal shıǵıw dárejesi 2 bolsa, ol jaǵdayda bunday terek binar terek delinedi;
4)eger shıǵıw dárejesi 0 yaki 2 bolsa, ol jaǵdayda tolıq binar terek delinedi.
31
Túyinler arasındaǵı baylanıslılıqtı klassifikasiyalaw ushın jáne tómendegishe terminnen paydalanıladı: M1 – A hám V elementler ushın ―ata‖ . A hám V – bolsa M1 túyin ―balaları‖.
Tereklerdi súwretlew
Terektiń grafikalıq formadaǵı hám onıń sızıqlı emes dizim formasındaǵı ańlatılıwı EEM yadında
terekti ańlatıwdıń e ń qolay usılı bul onı baylanısqan dizimler
kórinisinde ańlatıw bolıp esaplanadı. Dizim elementi túyin mánisi hám shıǵıw dárejesin óz ishine alıwshı informasiyalıq maydanǵa hámde shıǵıw dárejesine teń bolǵan kórsetkishler maydanına iye bolıwı lazım (joqarıdaǵı sızılma), yaǵnıy elementiniń hár bir kórsetkishi usı elementti túyin balaları bolǵan túyinlerge baǵdarın anıqlaydı.
Binar terekler
Binar terekler eń kóp paydalanılatuǵın terekler túri esaplanadı.
Tereklerdiń EEM yadında súwretleniwine kóre hár bir element tórt maydanǵa iye jazıw esaplanadı. Usı maydanlar mánisi sáykes túrde jazıw gilti bolıp, basqa elementlerge múrájátti ańlatadı, yaǵnıy shepke-tómenge, ońǵa-tómenge hám jazıw tekstine.
Sonı este tutıw kerek, terek payda etilip atırǵanda, ataǵa salıstırǵanda shep táreptegi bala mánisi kishi giltke, oń táreptegi bala bolsa úlken mánisli giltke iye boladı. Máselen, tómendegi elementlerden binar terek quramız: 50, 46, 61, 48, 29, 55, 79. Ol tómendegi kóriniske iye boladı:
Nátiyjede, oń hám shep bólim terekleri birdey basqıshlı tártiplestirilgen binar terek payda ettik.
Eger terektiń oń hám shep bólim terekleri basqıshlarınıń parqı birden kishi bolsa, bunday terek ideal teń salmaqtaǵı terek delinedi. Joqarıda payda etilgen binar teregimiz ideal teń salmaqtaǵı terekke mısal boladı.
Binar terekti payde etiw ushın EEM yadında elementler tómendegi túrde bolıwı kerek:
V = MakeTree(Key, Rec) ámeli eki kórsetkishli (gilt) hám eki maydanli (informasiyalıq) element jaratadı (terek túyini)
MakeTree prosedurası kórinisi:
Paskal
New(p); p^.r := rec;
32
p^.k := key; v := p; p^.left := nil;
p^.right := nil;
Basında gilt birinshi mánisi kiritiledi. Onnan soń elementtiń ózin maketree prosedurası arqalı payda etemiz. Keyin bolsa kórsetkish bos mánisti kórsetkenshe cikldı dawam etemiz.
READ(key,rec)
tree=maketree(key,rec) WHILE not eof DO READ(key,rec) V=maketree(key,rec) WHILE P<>nil DO
Q=P
IF key=k(P) THEN P=left(P) ELSE P=right(P)
END IF
END WHILE IF P=nil
THEN WRITELN(' Bul tamır'); tree=V
ELSE IF key<k(q) THEN left(P)=V ELSE right(P)=V END IF
END IF END WHILE
m-ólshemli terekti binar kóriniske keltiriw
Formal emes algoritm:
1.Terektiń hár bir túyininde úlken balaǵa sáykes shetki shep shaqadan tısqarı barlıqshaqaları kesip taslanadı.
2.Bir atanıń barlıq balaları gorizontal sızıq penen baylanısadı.
3.Payda e tilgen strukturanıń hár bir túyininde úlken bala usı túyinniń tómenindeturǵan túyin esaplanadı (eger ol bar bolsa).
Algoritm ámeller izbe-izligi tómende keltirilgen.
yaki
33
m-ólshemli terekti binar kóriniske keltiriw.
Terekler ústinde orınlanatuǵın ámeller
1.Terekti aylanıp shıǵıw (Obxod dereva).
2.Bólim terekti óshiriw.
3.Bólim terek qosıw.
Terekti aylanıp shıǵıwdı ámelge asırıw ushın tómendegi úsh proseduranı orınlaw
lazım:
1.Tamırdı qayta islew.
2.Shep tarmaq(shaqa)tı qayta islew.
3.Oń tarmaq(shaqa)tı qayta islew.
Joqarıdaǵı prosedura qanday izbe-izlikte ámelge asırılıwına qarap aylanıpshıǵıwdı úsh kóriniske ajıratıladı.
1. Joqarıdan tómenge. Prosedura tómendegi izbe-izlikte orınlanadıA-B-C. 2.Shepten ońǵa. Prosedura tómendegi izbe-izlikte orınlanadıB-A-C.
3. Tómennen joqarıǵa. Prosedura tómendegi izbe-izlikte orınlanadıB-C-A.
Máselen tómendegi terekte aylanıp shıǵıwdı ótkereyik.
34
Terek aylanıp shıǵıw tártibi: Joqarıdan tómenge: A,B,C,D,E,F,G.Sherten ońǵa: C,D,B,E,F,A,G. Tómennen joqarıǵa: D,C,F,E,B,G,A.
Terek kóriginiń rekursiv prosedurları:
1) PROCEDURE pretrave (tree) {joqarıdan tómenge kórik}IF tree<>nil
THEN PRINT info (tree) pretrave (left (tree)) pretrave (right (tree))
END IF
RETURN
2) PROCEDURE intrave (tree)
IF tree<>nil
THEN intrave (left (tree)) PRINT info (tree) intrave (right (tree))
END IF RETURN
3) PROCEDURE postrave (tree)
IF tree<>nil
THEN postrave (left (tree)) postrave (right (tree)) PRINT info (tree)
END IF RETURN
Binar terek boyınsha izlew prosedurası
Usı proseduranıń wazıypası sonnan ibarat, ol berilgen gilt boyınsha terek túyinin izlewdi ámelge asıradı. Izlew operasiyasınıń dawamlılıǵı terek strukturasına baylanıslı boladı. Haqıyqattan, eger elementler terekke gilt mánisleri ósiw (kemeyiw) tártibinde kelip túsken bolsa, ol jaǵdayda terek bir tárepke baǵdarlanǵan dizim payda etedi (shıǵıw dárejesi bir boladı, yaǵnıy jalǵız shaqaǵa iye), máselen:
Bul jaǵdayda terekte izlew waqtı, bir tárepleme baǵdarlanǵan dizimdegi kibi bolıp,ortasha
qarap shıǵıwlar sanı N/2 boladı.
35
Eger terek teń salmaqlı bolsa, ol jaǵdayda izlew e ń ónimli nátiyje beredi. Bul jaǵdayda izlew log2 N den kóp bolmaǵan elementlerdi kórip shıǵadı.
Izlew prosedurasın kórip shıǵamız. search ózgeriwshisine tabılǵan buwın kórsetkishiózlestiriledi:
p=tree
WHILE p<>nil DO IF key=k (p)
THEN search=p RETURN
END IF
IF key<>k (p) THEN p=left (p) ELSE p=right (p)
END IF
END WHILE search=nil RETURN
Terekke jańa element qosıw prosedurası
Terekke qandayda bir elementti qosıwdan aldın terekte berilgen gilt boyınsha izlewdi ámelge asırıw kerek boladı. Eger berilgen giltke teń gilt bar bolsa, ol jaǵdayda programma óz jumısın juwmaqlaydı, keri jaǵdayda terekke element qosıw ámelge asırıladı.
Terekke jańa jazıwdı kiritiw ushın, aldın terektiń sonday túyinin tabıw kerek, nátiyjede usı túyinge jańa element qosıw múmkin bolsın. Kerekli túyindi izlew algoritmi de tap berilgen gilt boyınsha túyindi tabıw algoritmi kibi boladı. Biraq berilgen gilt boyınsha izlew prosedurasınan tuwrıdan-tuwrı paydalanıp bolmaydı, sebebi, izlew prosedurasında, qaysı túyinde múráját NIL (search = nil) bolǵanı fiksirlenbeydi.
Izlew prosedurasın sonday modifikasiya qılamız, qosımsha effekt sıpatında jańa proseduramız berilgen gilt turǵan túyindi fiksirlesin (izlew tabıslı bolsa), yaki usı túyindi qayta islegennen keyin izlew juwmaqlansın (izlew tabıslı bolsa).
Terekte qosılıp atırǵan element giltine teń giltli element joq bolǵan jaǵdayda elementti qosıw prosedurasın keltirip ótemiz.
q=nil
p=tree
WHILE p<>nil DO q=p
IF key=k (p) THEN search=p RETURN
END IF
IF key<k (p) THEN p=left (p) ELSE p=right (p) END IF
END WHILE
{Berilgen giltke teń túyin tabılmadı, element qosıw talap qılınadı. Ata bolıwı múmkintúyinge q kórsetkish beriledi.}
V=maketree (key, rec)
{Qoyılıp atırǵan V element shep yaki oń bala bolıwın anıqlaw lazım.}IF key<k (q)
THEN left (q)=V ELSE right (q)=V END IF
search=V RETURN
Binar terekten elementti óshiriw prosedurası
36
Túyindi óshirip taslaw nátiyjesinde terektiń tártiplengenligi buzılmawı kerek. Túyin terekte óshirilip atırǵanda 3 qıylı variant bolıwı múmkin:
1)Tabılǵan túyin terminal (japıraq). Bul jaǵdayda túyin óshirip taslanadı.
2)Tabılǵan túyin tek ǵana bir balaǵa iye. Ol jaǵdayda bala ata ornına jaylastırıladı.
3)Óshirilip atırǵan túyin eki balaǵa iye. Bunday jaǵdayda sonday bólim terekler zvenosın tabıw kerek, sebebi onı óshirilip atırǵan túyin ornına qosıw múmkin bolsın. Bunday zveno hár dayım bar boladı:
- bul yaki shep bólim terektiń eń oń táreptegi elementi (usı zvenoǵa erisiw ushın keyingi ushına shep shaqa arqalı ótip, náwbettegi ushlarına bolsa, múráját NIL bolmaǵansha, tek ǵana oń shaqaları arqalı ótiw zárúr).
- yaki oń bólim terektiń eń shep elementi (usı zvenoǵa erisiw ushın keyingi ushına oń shaqa arqalı ótip, náwbettegi ushlarına bolsa, múráját NIL bolmaǵansha, tek ǵana shep shaqaları arqalı ótiw zárúr).
Óshirilip atırǵan elementtiń shep bólim tereginiń eń ońındaǵı element óshirilip atırǵan element ushın ―Aldıńǵısı‖ boladı (12 ushın – 11 boladı). Miyrasxor bolsa oń bólim terektiń eń shebindegi túyini (12 ushın - 13).
Miyrasxordı tabıw algoritmin islep shıǵayıq (5.9 sızılma).p – jumısshı kórsetkish;
q - r dan bir adım arqadaǵı kórsetkish;
v – óshirilip atırǵan túyin miyrasxorın kórsetedi;t - v bir adım arqada júredi;
s - v dan bir adım aldında júredi (shep balanı yaki bos orında kórsetip baradı).
Joqarıdaǵı terek boyınsha qaraytuǵın bolsaq, aqırında, v kórsetkish 13 túyindi, sbolsa bos orında kórsetiwi kerek.
1)Elementti izlew prosedurası arqalı óshirilip atırǵan elementti tabamız. r kórsetkishóshirilip atırǵan elementti kórsetedi.
2)Óshiriletuǵın elementtiń ornına qoyılıwshı túyinge v kórsetkish qoyamız.IF left
(p)=nil
THEN v=right (p) ELSE IF right (p)=nil
THEN v=left (p) ELSE t=p
v=right (p) s=left (v)
WHILE s<>nil t=v
37
v=s s=left (v)
END WHILE IF t<>p
THEN WRITE (v element p nıń balası emes)left (t)=right (v)
right (v)=right (p) END IF
left (v)=left (p) IF q=nil
THEN WRITE (v tamır) tree=v
RETURN END IF
IF p=left (q) THEN left (q)=v ELSE right (q)=v END IF
END IF END IF
FREENODE (p) (usı prosedura bos túyin payda etedi, yaǵnıy óshirilgen element jaylasqan yad yacheykasın tazalaydı.)
RETURN
Qadaǵalaw sorawları
1.Rekursiya ne?
2.Terek ne? Onıń ózine tán qásiyetlerin aytıp beriń.
3.Tolıq terek degende neni túsinesiz?
4.Terekti aylanıp shıǵıw neden ibarat?
5.Hár qanday terekti binar kóriniske keltiriw múmkinbe?
6.Terek túyini qanday payda etiledi?
7.Terekte qanday ámellerdi orınlaw múmkin?
38
7-Leksiya. Izlew (6 saat)
Reje:
1.Izbe-iz izlew
2.Indeksli izbe-iz izlew
3.Izbe-iz izlewdiń effektivligi
4.Indeksli izbe-iz izlewdiń effektivligi
5.Izlewdi jetilistiriw usılları
6.Tabılǵan elementti dizim basına qosıw arqalı kesteni qayta tártiplestiriw
7.Transpozisiya usılı
8.Jetilisken izlew teregi
9.Binar izlew (teń ekige bóliw usılı)
EEMde maǵlıwmatlardı qayta islewde izlew tiykarǵı ámellerden biri bolıp esaplanadı. Onıń wazıypası berilgen argument boyınsha massiv maǵlıwmatları ishinen usı argumentke sáykes maǵlıwmatlardı tabıwdan ibarat.
Qálegen maǵlıwmatlar jıyındısı keste yaki fayl dep ataladı. Qálegen maǵlıwmat (yaki struktura elementi) basqa maǵlıwmattan qandayda bir belgisi arqalı parq qıladı. Usı belgi gilt dep ataladı. Gilt hasıl bolıwı, yaǵnıy usı giltke iye maǵlıwmat kestede jalǵız bolıwı múmkin. Bunday hasıl giltke baslaǵısh (birinshi) gilt delinedi. Ekinshi gilt bir kestede takirarlansada ol arqalı da izlewdi ámelge asırıw múmkin. Maǵlıwmatlar giltin bir jerge jıynaw (basqa kestege) yaki jazıw sıpatında ańlatıp bir maydanǵa giltlerdi jazıw múmkin. Eger giltler maǵlıwmatlar kestesinen ajıratıp alınıp óz aldına fayl sıpatında saqlansa, ol jaǵdayda bunday giltler sırtqı giltler delinedi. Keri jaǵdayda, yaǵnıy jazıwdıń bir maydanı sıpatında kestede saqlansa ishki gilt delinedi.
Gilttiń berilgen argument penen sáykesligin anıqlawshı algoritmge berilgen argument boyınsha izlew dep ataladı. Izlew algoritmi wazıypası kerekli maǵlıwmattı kestede tabıw yaki joq ekenligin anıqlawdan ibarat. Eger kerekli maǵlıwmat joq bolsa, ol jaǵdayda eki jumıstı ámelge asırıw múmkin:
1.maǵlıwmat joq ekenligin indikasiya (belgilew) qılıw
2.kestege maǵlıwmattı qosıw.
Oylayıq, k – giltler massivi. Hár bir k(i) ushın r(i) – maǵlıwmat bar. Key – izlew argumenti. Oǵan rec - informasiyalıq jazıw sáykes qoyıladı. Kestedegi maǵlıwmatlardıń strukturasına qarap izlewdiń bir neshe túrleri bar.
1. Izbe-iz izlew
Usı kórinistegi izlew eger maǵlıwmatlar tártipsiz yaki olar strukturası anıq emes bolǵanda qollanıladı. Bunda maǵlıwmatlar pútin keste boyınsha operativ yadta kishi adresten baslap, úlken adreske shekem izbe-iz qarap shıǵıladı.
Massivte izbe-iz izlew (search ózgeriwshi tabılǵan element nomerin saqlaydı).
Paskal tilinde programma tómendegishe boladı:for i:=1 to n do
if k[i] = key then begin
search = i; exit;
end;
39
search = 0; exit;
Massivte izbe-iz izlew algoritm effektivligin orınlaǵan salıstırıwlar sanı M menen anıqlaw múmkin. Mmin = 1, Mmax = n. Eger maǵlıwmatlar massiv yacheykasında bir qıylı itimallıq penen
bólistirilgen bolsa, ol jaǵdayda Msr (n + 1)/2 boladı.
Eger kerekli element kestede bolmasa hám usı elementti kestege qosıw kerek bolsa, ol jaǵdayda joqarıdaǵı programmadaǵı aqırǵı eki operator tómendegige almastırıladı.
Paskalda n:=n+1; k[n]:=key; r[n]:=rec; search:=n; exit;
Eger maǵlıwmatlar kestesi bir baǵıtlı dizim kórinisinde berilgen bolsa, ol jaǵdayda izbe-iz izlew dizimde ámelge asırıladı.
Algoritmler variantı:
Paskalda: q:=nil; p:=table;
while (p <> nil) do begin
if p^.k = key then begin
search = p; exit;
end; q := p;
p := p^.nxt; end; New(s); s^.k:=key; s^.r:=rec; s.^nxt:= nil;
if q = nil then table = s else q.^nxt = s;
search:= s; exit
Dizimli strukturanıń artıqmashlıǵı sonnan ibarat, dizimge elementti qosıw yaki óshiriw tez ámelge asadı, bunda qosıw yaki óshiriw element sanına baylanıslı bolmaydı, massivte bolsa elementti qosıw yaki óshiriw shama menen barlıq elementlerdiń yarımın jıljıtıwın talap etedi. Dizimde izlewdiń effektivligi shama menen massiv penen bir qıylı boladı.
Ulıwma alǵanda izbe-iz izlew effektivligin asırıw múmkin.
Oylayıq, kún dawamında maǵlıwmatlar jıynalıp, keyin ala olar qayta islensin. Maǵlıwmatlar toplanǵannan keyin olar saralanadı.
2. Indeksli izbe-iz izlew
Usı kórinistegi izlew ámelge asırılıp atırǵanda eki keste payda boladı: óz giltine iye maǵlıwmatlar kestesi (ósiw tártibinde tártiplestirilgen) hám indeksler kestesi, bul da
40
