otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad...

22
9.5 大規模農地流域からの土砂流出抑制技術に関する研究 - 1 - 9.5 大規模農地流域からの土砂流出抑制技術に関する研究 研究予算:運営費交付金(一般勘定) 研究期間:平 23~平 27 担当チーム:水利基盤チーム 研究担当者:中村和正、鵜木啓二、高須賀俊之 【要旨】 農地からの土砂流出は、農地の生産力低下や土砂堆積による排水路の機能低下を引き起こす。また、河川に流 入した土砂は下流の湖沼等に流出し、土砂に含まれる栄養塩類とともに水環境を悪化させ、水生生物の生育環境 や漁業への影響が問題となる。以上の背景より、本研究では、排水路の機能保全と水環境の保全のために、農地 からの土砂流出抑制技術を提案する。平成 27 年度までに以下の成果を得た。 (1)流域からの土砂流出に対する抑制対策を実施するためには、土砂流出量の予測技術を開発する必要がある。こ の予測技術の精度確認のためには、現地データを取得しなければならない。本研究では、大規模農地流域の下端 に整備されている沈砂池において堆積土砂量と流入・流出土砂量の調査を行い、流域から流出する土砂量を把握 した。 (2)農業農村整備事業で利用されている土砂流出モデルの USLE(Universal Soil Loss Equation)について、GIS を利用した広域解析に利用可能なように係数の設定方法を示した。また、気候変動適応研究推進プログラム(RECCA) の研究成果である降水量の予測値を利用し、USLE により北海道における将来の土壌流亡量を予測した。 (3)土砂流出抑制対策の効果予測に利用可能な分布型物理モデルの WEPP(Water Erosion Prediction Project) について、パラメータの設定方法を示すとともに、積雪寒冷地の大規模農地流域に適用可能であることを示した。 (4)農業農村整備事業で実施可能な土砂流出抑制対策として、畑地流域河畔緩衝林帯と傾斜改良による土砂流出 抑制効果を WEPP で評価した。その結果、5m 幅の河畔緩衝林帯は、流域からの土砂流出を 50%程度抑制可能なこ と、急傾斜地の勾配を緩傾斜に区分される 8 度まで緩くしても効果は限定的であることを明らかにした。また、 沈砂地は緩衝林帯や傾斜改良で対応できない範囲を補完するために設置することなど、農地流域からの土砂流出 抑制技術の提案を行った。 キーワード:土砂流出、USLE、WEPP 1.はじめに 農地からの土砂流出は、肥沃な土壌の流出による農地の 生産力低下や土砂堆積による排水路の機能低下を引き起 こす。また、排水路に流入した土砂は下流の湖沼等に流出 し、土砂に含まれる栄養塩類とともに水環境を悪化させ、 水生生物の生育環境や漁業への影響が問題となる。北海道 の畑地は、圃場の大規模化で降雨や融雪水が集中しやすい こと、受食性の比較的高い火山性土壌等が分布している地 域があること、収穫後に地表面が被覆されていない裸地状 態で融雪出水があること、傾斜圃場が広く分布することな どから、水食の危険性が高いと考えられる。一部の湖沼で は土砂の堆積による生態系への影響が顕在化している。流 域からの土砂流出に対する抑制対策を実施するためには、 土砂流出量の予測技術を開発する必要がある。 この予測技術の精度確認のためには、現地データを取得 しなければならない。河道を流下する土砂の形態はウォッ シュロード、浮遊砂、掃流砂に大別されるが、農地からの 土壌流亡のみを対象とするのであれば、観測対象はウォッ シュロードと浮遊砂のみで十分と考えられる。しかし、流 域面積が数 km 2 の農地流域を対象とした場合、流出土砂発 生箇所は農地だけでなく、林地や林道、河道等が想定され、 掃流砂も流下している。そのため、土砂流出対策施設の規 模決定には、掃流砂も含めた土砂流出量を把握する必要が ある。なお、本稿では、ウォッシュロードと浮遊砂を合わ せて浮遊砂と記す。 本研究では、大規模農地流域から流出する土砂量を二つ の方法で観測した結果を報告する。一つは、流域末端に整 備された沈砂池を利用し、沈砂池の堆積土砂量と流出土砂 量を観測する方法である。しかし、流域の下端に沈砂池が あることは稀であるため、この土砂量観測方法では観測可 能な箇所が限られる。大規模農地からの土砂流出状況を把 握するには、土地利用状況や地形、気候条件等の異なる地

Upload: others

Post on 03-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Otsimispuud on ühed paljudest andmestruktuuridest, mis� on mõeldud mingi kirjete hulga hoidmiseks;� Kirjed peavad sisaldama võtit, suvalised kaks võtitpeavad võrreldavad olema.� toetab järgmisi operatsioone� (otsimispuu loomine,)� kirje lisamine puusse,� kirje otsimine puust võtme järgi,� kirje kustutamine puust.Otsimispuid on mitut sorti, erinevates puudes on operat-sioonide keerukused erinevad.Keerukused pole üldiselt paremad kui �(logn), kus n onkirjete arv puus.

Page 2: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

(Juurega) puu T on üks järgmistest variantidest:� tühi puu;� tipp x ja mittetühjad juurega puud T1; : : : ; Tm, kusm > 0.

Page 3: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

xT1 T2 T3 T4

Page 4: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

ülemusalluvad

eellased

järglasedlehed

sisemised tipud

kolleegid

Page 5: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Kahendpuu T on üks järgmistest variantidest:� tühi puu;� üksainus tipp x;� tipp x ning kahendpuud Tvasak ja Tparem.Kahendpuu ei ole samaväärne puuga � kui kahendpuumingil tipul on ainult üks alluv, siis on ta kas vasak võiparem alluv. Puu tipu ainsa alluva korral vasak/parem-erisust ei ole.

Page 6: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Lause. Mittetühjas kahendpuus, kus ühegi tipu aste ei ole1, on lehti ühe võrra rohkem kui sisemisi tippe.

Tõestus. Induktsiooniga üle kahendpuu struktuuri.Ühetipulises puus olev ainus tipp on leht.Kui puus T on juurtipp x ja selle alluvatest koosnevadmittetühjad kahendpuud Tv ja Tp, siis olgu lv ja lp lehtedearvud nendes. Puus T on siis lehti lv + lp ja sisemisi tippelv � 1 + lp � 1+ (puudes Tv ja Tp vastavalt induktsioonile)+ 1 = (tipp x)= lv + lp � 1 :

Page 7: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Kahendpuud võime arvuti põhimälus kujutada struktuu-rina, kus igale tipule vastab kirjeAndmed:vasak :parem

kus väli :vasak viitab vasakule ning :parem paremale al-luvale.Teatavad algoritmid võivad nõuda täiendavate väljade ole-masolu kas osa �Andmed� sees või väljaspool seda.(kahendpuu naturaalesitus)

Page 8: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Puud võime arvuti põhimälus kujutada struktuurina, kusigale tipule vastab kirjeAndmed:alluv :kolleeg

kus väli :alluv viitab vasakpoolseimale alluvale ning :kolleegparemalt järgmisele kolleegile.(puu naturaalesitus)

Page 9: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

viidad: alluv / kolleegpuuduvad viidad � NIL

Kui loeme alluv�vasak jakolleeg�parem, siis saamepuu naturaalesitusele vas-tava kahendpuu.

Page 10: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Olgu meil antud mingi protseduur P , mida me puu igaltipul rakendada tahame.Mis järjekorras rakendada?Järjestust, kus kõigepealt on puu juur ja seejärel samalviisil järjestatult juure vahetute alampuude tipud, nimeta-takse eesjärjestuseks .Järjestust, kus kõigepealt on samal viisil järjestatult juurevahetute alampuude tipud ja lõpuks puu juur, nimetatakselõppjärjestuseks .

Page 11: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

2221

184

36

517

87 14

9 1210 1113

1615

212019

L~oppjärjestus123

45

67

89

1011 12

13 1415 1617

1819

212220

Eesjärjestus

Page 12: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Kahendpuu tippude järjestust, kus kõigepealt on samal vii-sil järjestatult juure vasaku vahetu alampuu tipud, seejärelpuu juur ja lõpuks samal viisil järjestatult juure vahetu pa-rema alampuu tipud, nimetatakse keskjärjestuseks .

Page 13: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

12

34

56

78

910

1112

13

Page 14: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Kahendotsimise puu on kahendpuu, kus igal tipul on täien-dav väli :v~oti (kuulub ossa �Andmed�), mille väärtustel onde�neeritud täielik järjestus, ning kui puu ei ole tühi, siis� juure välja :v~oti väärtus pole väiksem kui tema vasakualampuu mistahes tipu välja :v~oti väärtus;� juure välja :v~oti väärtus pole suurem kui tema paremaalampuu mistahes tipu välja :v~oti väärtus;� juure vasak ja parem alampuu on mõlemad kahendot-simise puud.

Page 15: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

710

1216

2025

3237

4043

5056

62

Page 16: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Lause. Võttes kahendotsimise puu tipud keskjärjestuses,on nende väljade :v~oti väärtused mittekahanevas järjekor-ras.

Tõestus. Induktsiooniga üle puu struktuuri. (vt. Kiho kons-pektist)

Page 17: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Kahendotsimise puust etteantud võtmeväärtusega tipu ot-simine. Olgu p viit puu juurtipule ning a otsitav võtme-väärtus. Kui tippu ei leita, siis tagastatakse NIL.Algoritm: otsi(p; a), kus otsi(p; x) on1 if p = NIL then2 return NIL3 if p:v~oti = x then4 return p5 if x < p:v~oti then6 return otsi(p:vasak; x)7 else --- x > p:v~oti8 return otsi(p:parem; x)

Page 18: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Otsimisteed, kui otsitavaks võtmeks on 15, 40 või 52.

710

1216

2025

3237

4043

5056

62

Page 19: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Uue kirje (samade väljadega kui osas �Andmed�) lisaminekahendotsimise puusse. Olgu p viit puu juurtipule ja Rlisatav kirje. Tagastatakse lisatud tipp.Algoritm: lisa(p;R), kus lisa(p;R) on1 if R:x < p:x then2 if p:vasak = NIL then3 q := new(tipukirje); q:Andmed := R; p:vasak := q4 return q5 else6 return lisa(p:vasak;R)7 else8 if p:parem = NIL then9 q := new(tipukirje); q:Andmed := R; p:parem := q10 return q11 else12 return lisa(p:parem;R)

Page 20: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Tipu võtmeväärtusega 15 lisamine kahendotsimise puusse.

15

710

1216

2025

3237

4043

5056

62

Page 21: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Tipu eemaldamine kahendotsimise puust.Olgu tippudel väli :�ulem (ei kuulu ossa �Andmed�), misviitab käesoleva tipu ülemusele.Lisamisalgoritmis tuleb siis uue tipu väli :�ulem ka initsia-liseerida, s.t. 3. ja 9. rida tuleb täiendada omistamisegaq:�ulem := p.Olgu p viit vaadeldava kahendpuu juurtipule ja q viit eemal-datavale tipule. Algoritm eemalda(p; q) kustutab puust kir-je q:Andmed. Ta tagastab väärtuste paari: viida muudetudpuu juurtipule ning viida tegelikult eemaldatud tipule.

Page 22: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Kui tipul q pole alluvaid, siis lihtsalt kustutame ta.

15

710

1216

2025

3237

4043

5056

62

Page 23: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

eemalda(p; q) on1 if q:vasak = NIL and q:parem = NIL then2 if q:�ulem = NIL3 return (NIL; q)4 else if q:�ulem:vasak = q5 q:�ulem:vasak := NIL6 else7 q:�ulem:parem := NIL8 return (p; q). . .

Page 24: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Kui tipul q on üks alluv, siis paneme q ülemuse viitamasellele alluvale.

15

710

1216

2025

3237

4043

5056

62

Page 25: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

9 else if �q:vasak = NIL and q:parem 6= NIL�or �q:vasak 6= NIL and q:parem = NIL� then10 r := q:vasak = NIL ? q:parem : q:vasak11 if q:�ulem = NIL12 return (r; q)13 else if q:�ulem:vasak = q14 q:�ulem:vasak := r15 else16 q:�ulem:parem := r17 return (p; q). . .

Page 26: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Kui tipul q on mõlemad alluvad, siis leiame q-st keskjär-jestuses järgmise tipu r, kopeerime tema andmed tippu qja kustutame hoopis r-i.15

710

1216

2025

3237

4043

5056

62

Keskjärjestuses järgmine tipp: parempoolse alampuu va-sakpoolseim tipp.

Page 27: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

18 else19 r := q:parem20 while r:vasak 6= NIL do21 r := r:vasak22 q:Andmed := r:Andmed23 return eemalda(p; r).

Page 28: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Kahendotsimise puu operatsioonide ajaline keerukus on�(h), kus h on puu kõrgus.Puus kõrgusega h on vähemalt h ja ülimalt 2h � 1 tippu.Seega on kahendpuu operatsioonide ajaline keerukus hal-vimal juhul O(n), kus n on tippude arv.Tahaksime keerukust O(logn). Selleks tuleb puud pealemuutmist tasakaalustada.

Page 29: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

AVL-puu on kahendotsimise puu, kus iga tipu vasaku japarema alampuu kõrgus erineb ülimalt ühe võrra.Lühend �AVL� tuleb autorite nimedest.Olgu Ah minimaalne tippude arv AVL-puus kõrgusega h.Siis A1 = 1, A2 = 2 ja Ah = Ah�1 + Ah�2 + 1.Fibona i arvud: F0 = 0, F1 = 1, Fh = Fh�1 + Fh�2. SeegaAh = Fh+2 � 1. (tõestus induktsiooniga üle h)

Kuna Fh = 24 1p5 1 +p52 !h35, kus [�℄ tähistab ümarda-

mist täisarvuni, siis Ah = 2�(h) ja AVL-puu kõrgus on alati�(logn), kus n on tippude arv.

Page 30: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

AVL-puus on tippudel täiendav väli :k~orgus (ei kuulu ossa�Andmed�), kuhu salvestatakse sellest tipust algava alam-puu kõrgus.Peale tipu lisamist või eemaldamist tuleb nende väljadeväärtusi parandada.Peale lisamist võivad valed kõrgused olla tippudel, mis asu-vad ahelal lisatud tipust juureni.Peale eemaldamist võivad valed kõrgused olla tippudel, misasuvad ahelal eemaldatud tipu (endisest) ülemusest juure-ni.Kõrguste parandamine toimub samaaegselt puu tasakaa-lustamisega.

Page 31: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Tasakaalustamisoperatsioonid: pööre_vasakule ja pööre_paremale.pööre_paremale(p; x), kus p on viit puu juurtipule ja xviit mingile tipule, mille korral x:vasak 6= NIL, muudabalampuud, mille juureks on x, järgmiselt:xy

yx

T1 T2 T3 T1 T2 T3pööre_paremale tagastab muudetud puu juurtipu.

Page 32: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

pööre_paremale(p; x) on1 y := x:vasak; u := x:�ulem2 T1 := y:vasak; T2 := y:parem; T3 := x:parem3 y:vasak := T1; y:parem := x; x:vasak := T2; x:parem := T34 if u = NIL then5 return y6 else7 �u:vasak = x ? u:vasak : u:parem� := y8 return p

Page 33: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

pööre_vasakule on vastupidine operatsioon.

xy

T1 T2 T3

yT1 T2 T3

x

pööre_vasakule tagastab muudetud puu juurtipu.

Page 34: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

pööre_vasakule(p; x) on1 y := x:parem; u := x:�ulem2 T1 := x:vasak; T2 := y:vasak; T3 := y:parem3 y:vasak := x; y:parem := T3; x:vasak := T1; x:parem := T24 if u = NIL then5 return y6 else7 �u:vasak = x ? u:vasak : u:parem� := y8 return p

Page 35: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Tipu lisamisel AVL-puusse teeme kõigepealt tavalise lisa-mise ja hakkame lisatud tipust alates kõrgusi parandama,kuni jõuame tasakaalustamata tipuni. . .lisaAVL(p;R), mis tagastab paari uuest puu juurest ja li-satud tipust, on1 q := lisa(p;R)2 r := q3 while r 6= NIL do4 hv := r:vasak = NIL ? 0 : r:vasak:k~orgus5 hp := r:parem = NIL ? 0 : r:parem:k~orgus6 if jhv � hpj = 2 then break7 r:k~orgus := max(hv; hp) + 18 r := r:�ulem9 if r = NIL then return (p; q). . .

Page 36: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

r viitab tasakaalustamata tipule. Vaatame juhtu, kus temaparempoolne alampuu on kõrgem kui vasakpoolne (teist-pidine juht on sümmeetriline).sh h+ 2r r-i kõrgus: h+ 3(enne lisamist: h+ 2)

10 if hp > hv then11 s := r:parem. . .

Page 37: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Uus tipp lisati paremasse alampuusse. Kui s-i vasak ja pa-rem alampuu oleks peale lisamist võrdse kõrgusega, siisoleks üks alampuudest juba enne lisamist selle kõrgusegaolnud ja s-i kõrgus poleks muutunud. Seega oleks r jubaenne lisamist tasakaalustamata olnud. Järelikult on kaksvarianti:h h h+ 1

sr1. variant

h h+ 1 hsr

2. variant12 hsv := s:vasak = NIL ? 0 : s:vasak:k~orgus13 hsp := s:parem = NIL ? 0 : s:parem:k~orgus. . .

Page 38: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

1. variandil pöörame r-i vasakule.

h h+ 1h hh h+ 1

sr r s

Kogu vaadeldava alampuu kõrgus on nüüd h + 2 � sa-ma, mis enne uue tipu lisamist. Kõrgemalasuvate tippudekõrgused seega ei muutunud � puu on tasakaalus.

Page 39: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

2. variandil pöörame s-i paremalehhh h h h

sh� 1

r rh� 1

s

saame 1. variandi (s.t. pöörame r-i vasakule).hh h

rh� 1

s

Page 40: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

14 if hsv > hsp then15 p := pööra_paremale(p; s); s:k~orgus := hv + 116 p := pööra_vasakule(p; r)17 r:k~orgus := hv + 1; r:�ulem:k~orgus := hv + 218 return (p; q)19 else --- hv > hp20 s := r:vasak21 hsv := s:vasak = NIL ? 0 : s:vasak:k~orgus22 hsp := s:parem = NIL ? 0 : s:parem:k~orgus23 if hsv < hsp then24 p := pööra_vasakule(p; s); s:k~orgus := hp + 125 p := pööra_paremale(p; r)26 r:k~orgus := hp + 1; r:�ulem:k~orgus := hp + 227 return (p; q)

Page 41: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Tipu eemaldamisel AVL-puust teeme kõigepealt tavaliseeemaldamise, seejärel teeme tasakaalustamisi teel eemal-datud tipust juureni.eemaldaAVL(p; q) on1 (p; q) := eemalda(p; q)2 r := q:�ulem3 while r 6= NIL do4 hv := r:vasak = NIL ? 0 : r:vasak:k~orgus5 hp := r:parem = NIL ? 0 : r:parem:k~orgus6 if jhv � hpj = 2 then break7 r:k~orgus := max(hv; hp) + 18 r := r:�ulem9 if r = NIL then return (p; q). . .

Page 42: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

r viitab tasakaalustamata tipule. Vaatame juhtu, kus temaparempoolne alampuu on kõrgem kui vasakpoolne (teist-pidine juht on sümmeetriline).sh h+ 2r r-i kõrgus: h+ 3(enne eemaldamist: h+ 3)

10 if hp > hv then11 s := r:parem. . .

Page 43: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

Tipp eemaldati vasakust alampuust. Kolm varianti:

h h h+ 1sr

1. variant

h h+ 1 hsr

2. variant

h h+ 1sr

3. variant12 hsv := s:vasak = NIL ? 0 : s:vasak:k~orgus13 hsp := s:parem = NIL ? 0 : s:parem:k~orgus. . .

Page 44: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

1. variandil pöörame r-i vasakule.

h h+ 1h hh h+ 1

sr r s

Kogu vaadeldava alampuu kõrgus on nüüd h+2� vähenesühe võrra. Seega peame me jätkame juure pool asuvatetippude tasakaalustamisi.

Page 45: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

2. variandil pöörame s-i paremalehhh h h h

sh� 1

r rh� 1

s

saame 1. variandi (s.t. pöörame r-i vasakule).hh h

rh� 1

s

Page 46: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

3. variandil pöörame r-i vasakule.

h h h+ 1h+ 1 h+ 1

sr r s

Kogu vaadeldava alampuu kõrgus on nüüd h+ 3 � sama,mis enne eemaldamist. Seega on nüüd juurepoolsed tipudtasakaalus.

Page 47: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

14 if hsv = hsp then15 p := pööra_vasakule(p; r)16 r:k~orgus := hv + 2; s:k~orgus := hv + 317 return (p; q)18 if hsv > hsp then19 p := pööra_paremale(p; s); s:k~orgus := hv + 120 p := pööra_vasakule(p; r)21 r:k~orgus := hv + 1; r:�ulem:k~orgus := hv + 222 r := r:�ulem:�ulem; goto 3. . .

Page 48: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh

23 else --- hv > hp24 s := r:vasak25 hsv := s:vasak = NIL ? 0 : s:vasak:k~orgus26 hsp := s:parem = NIL ? 0 : s:parem:k~orgus27 if hsv = hsp then28 p := pööra_paremale(p; r)29 r:k~orgus := hp + 2; s:k~orgus := hp + 330 return (p; q)31 if hsv < hsp then32 p := pööra_vasakule(p; s); s:k~orgus := hp + 133 p := pööra_paremale(p; r)34 r:k~orgus := hp + 1; r:�ulem:k~orgus := hp + 235 r := r:�ulem:�ulem; goto 3