Добавил:
bagiwow
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
ѓ« ў 12. Њ®¦Ґбвў Ё ¤ҐаҐўмп.
12.1. ЏаҐ¤бв ў«ҐЁҐ ¬®¦Ґбвў б Ї®¬®ймо ¤ҐаҐўмҐў.
Џ®«®Ґ ¤ў®Ёз®Ґ ¤ҐаҐў®. T-¤ҐаҐўмп.
Ќ аЁб㥬 в®зЄг. €§ ҐҐ Їа®ўҐ¤Ґ¬ ¤ўҐ бв५ЄЁ (ў«Ґў® ўўҐае Ё
ўЇа ў® ўўҐае) ў ¤ўҐ ¤агЈЁҐ в®зЄЁ. €§ Є ¦¤®© Ё§ нвЁе в®зҐЄ Їа®ўҐ-
¤Ґ¬ Ї® ¤ўҐ бв५ЄЁ Ё в Є ¤ «ҐҐ. Џ®«гзҐго Є авЁЄг (ў n-®¬ б«®Ґ
Ўг¤Ґв (2 ў б⥯ҐЁ (n - 1)) в®зҐЄ) §лў ов Ї®«л¬ ¤ў®Ёзл¬ ¤Ґ-
ॢ®¬. ЌЁ¦оо в®зЄг §лў ов Є®аҐ¬. “ Є ¦¤®© ўҐаиЁл Ґбвм ¤ў
бл (¤ўҐ ўҐаиЁл, ў Є®в®алҐ Ё¤гв бв५ЄЁ) - «Ґўл© Ё Їа ўл©. “
ўбпЄ®© ўҐаиЁл, Єа®¬Ґ Є®ап, Ґбвм Ґ¤ЁбвўҐл© ®вҐж.
Џгбвм ўлЎа ® ҐЄ®в®а®Ґ Є®Ґз®Ґ ¬®¦Ґбвў® ўҐаиЁ Ї®«®Ј®
¤ў®Ёз®Ј® ¤ҐаҐў , ᮤҐа¦ 饥 ў¬ҐбвҐ б Є ¦¤®© ўҐаиЁ®© Ё ўбҐе ҐҐ
ЇаҐ¤Є®ў. Џгбвм Є ¦¤®© ўҐаиЁҐ нв®Ј® ¬®¦Ґбвў ЇЁб ® § зҐ-
ЁҐ дЁЄбЁа®ў ®Ј® вЁЇ T (в® Ґбвм § ¤ ® ®в®Ўа ¦ҐЁҐ ¬®¦Ґбвў
ўҐаиЁ ў ¬®¦Ґбвў® § 票© вЁЇ T). ’®, зв® Ї®«гзЁвбп, Ўг¤Ґ¬
§лў вм T-¤ҐаҐў®¬. Њ®¦Ґбвў® ўбҐе T-¤ҐаҐўмҐў ®Ў®§ зЁ¬ Tree(T).
ђҐЄгабЁў®Ґ ®ЇаҐ¤Ґ«ҐЁҐ. ‚бпЄ®Ґ ҐЇгб⮥ T-¤ҐаҐў® а §ЎЁў -
Ґвбп ваЁ з бвЁ: Є®аҐм (ҐбгйЁ© Ї®¬ҐвЄг Ё§ T), «Ґў®Ґ Ё Їа ў®Ґ
Ї®¤¤ҐаҐўмп (Є®в®алҐ ¬®Јгв Ўлвм Ё Їгбвл¬Ё). ќв® а §ЎЁҐЁҐ гбв -
ў«Ёў Ґв ў§ Ё¬® ®¤®§ 箥 ᮮ⢥вбвўЁҐ ¬Ґ¦¤г ¬®¦Ґбвў®¬ Ґ-
Їгбвле T-¤ҐаҐўмҐў Ё Їа®Ё§ўҐ¤ҐЁҐ¬ T * Tree (T) * Tree (T). ЋЎ®§-
зЁў зҐаҐ§ empty Їгб⮥ ¤ҐаҐў®, ¬®¦® ЇЁб вм
Tree (T) = {empty} + T * Tree (T) * Tree (T).
Џ®¤¤ҐаҐўмп. ‚лб®в .
”ЁЄбЁа㥬 ҐЄ®в®а®Ґ T-¤ҐаҐў®. „«п Є ¦¤®© ҐЈ® ўҐаиЁл x ®Ї-
।Ґ«Ґ® ҐҐ «Ґў®Ґ Ї®¤¤ҐаҐў® («Ґўл© бл ўҐаиЁл x Ё ўбҐ ҐЈ® Ї®-
⮬ЄЁ), Їа ў®Ґ Ї®¤¤ҐаҐў® (Їа ўл© бл ўҐаиЁл x Ё ўбҐ ҐЈ® Ї®в®¬-
ЄЁ) Ё Ї®¤¤ҐаҐў® б Є®аҐ¬ ў x (ўҐаиЁ x Ё ўбҐ ҐҐ Ї®в®¬ЄЁ). ‹Ґў®Ґ
Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп ўҐаиЁл x ¬®Јгв Ўлвм Їгбвл¬Ё, Ї®¤¤ҐаҐў® б
Є®аҐ¬ ў x ўбҐЈ¤ ҐЇгбв® (ᮤҐа¦Ёв Ї® Єа ©Ґ© ¬ҐаҐ x). ‚лб®в®©
Ї®¤¤ҐаҐў Ўг¤Ґ¬ бзЁв вм ¬ ЄбЁ¬ «мго ¤«Ёг 楯Ё y[1]..y[n] ҐЈ®
ўҐаиЁ, ў Є®в®а®© y [i+1] - бл y [i] ¤«п ўбҐе i. (‚лб®в Їгбв®-
Ј® ¤ҐаҐў а ў г«о, ўлб®в ¤ҐаҐў Ё§ ®¤®Ј® Є®ап - Ґ¤ЁЁжҐ.)
“Ї®а冷зҐлҐ T-¤ҐаҐўмп.
Џгбвм ¬®¦Ґб⢥ § 票© вЁЇ T дЁЄбЁа®ў Ї®а冷Є. Ќ -
§®ўҐ¬ T-¤ҐаҐў® гЇ®а冷зҐл¬, Ґб«Ё ўлЇ®«Ґ® в Є®Ґ бў®©бвў®: ¤«п
«оЎ®© ўҐаиЁл x ўбҐ Ї®¬ҐвЄЁ ў ҐҐ «Ґў®¬ Ї®¤¤ҐаҐўҐ ¬ҐмиҐ Ї®¬ҐвЄЁ
ў x, ўбҐ Ї®¬ҐвЄЁ ў ҐҐ Їа ў®¬ Ї®¤¤ҐаҐўҐ Ў®«миҐ Ї®¬ҐвЄЁ ў x.
12.1.1. „®Є § вм, зв® ў гЇ®а冷祮¬ ¤ҐаҐўҐ ўбҐ Ї®¬ҐвЄЁ
а §«Ёзл.
“Є § ЁҐ. €¤гЄжЁп Ї® ўлб®вҐ ¤ҐаҐў .
ЏаҐ¤бв ў«ҐЁҐ ¬®¦Ґбвў б Ї®¬®ймо ¤ҐаҐўмҐў.
Љ ¦¤®Ґ ¤ҐаҐў® Ўг¤Ґ¬ бзЁв вм ЇаҐ¤бв ў«ҐЁҐ¬ ¬®¦Ґбвў ўбҐе
Ї®¬Ґв®Є ҐЈ® ўҐаиЁ е. ЏаЁ н⮬ ®¤® Ё в® ¦Ґ ¬®¦Ґбвў® ¬®¦Ґв
Ё¬Ґвм а §«ЁзлҐ ЇаҐ¤бв ў«ҐЁп.
Ѓ« Ј®¤ ап гЇ®а冷祮бвЁ Є ¦¤л© н«Ґ¬Ґв «ҐЈЄ® ¬®¦Ґв " ©вЁ
бў®Ґ ¬Ґбв®" ў ¤ҐаҐўҐ: ЇаЁ¤п ў Є Єго-в® ўҐаиЁг Ё ба ўЁў ᥡп б
⥬, Єв® в ¬ 室Ёвбп, н«Ґ¬Ґв аҐи Ґв, Ё¤вЁ Ґ¬г «Ґў® Ё«Ё Ї-
а ў®. Ќ з ў б Є®ап Ё ¤ўЁЈ пбм Ї® нв®¬г Їа ўЁ«г, ® «ЁЎ® ®Ў аг-
¦Ёв, зв® в Є®© н«Ґ¬Ґв 㦥 Ґбвм, «ЁЎ® ©¤Ґв ¬Ґбв®, ў Є®в®а®¬ ®
¤®«¦Ґ Ўлвм. ‚бо¤г ¤ «ҐҐ ¬л ЇаҐ¤Ї®« Ј Ґ¬, зв® § 票пе вЁЇ
T § ¤ Ї®а冷Є, Ё а бб¬ ваЁў Ґ¬ в®«мЄ® гЇ®а冷зҐлҐ ¤ҐаҐўмп.
•а ҐЁҐ ¤ҐаҐўмҐў ў Їа®Ја ¬¬Ґ.
Њ®¦® Ўл«® Ўл б®Ї®бв ўЁвм ўҐаиЁл Ї®«®Ј® ¤ў®Ёз®Ј® ¤ҐаҐў
б зЁб« ¬Ё 1, 2, 3,... (бзЁв п, зв® «Ґўл© бл (n) = 2n, Їа ўл©
бл (n) = 2n + 1) Ё еа Ёвм Ї®¬ҐвЄЁ ў ¬ ббЁўҐ val [1...]. Ћ¤ Є®
нв®в бЇ®б®Ў ҐнЄ®®¬Ґ, Ї®бЄ®«мЄг ва вЁвбп ¬Ґбв® еа ҐЁҐ
Їгбвле ў Є бЁ© ў Ї®«®¬ ¤ў®Ёз®¬ ¤ҐаҐўҐ.
Ѓ®«ҐҐ нЄ®®¬Ґ в Є®© бЇ®б®Ў. ‚ўҐ¤Ґ¬ ваЁ ¬ ббЁў
val: array [1..n] of T;
left, right: array [1..n] of 0..n;
(n - ¬ ЄбЁ¬ «м®Ґ ў®§¬®¦®Ґ зЁб«® ўҐаиЁ ¤ҐаҐў ) Ё ЇҐаҐ¬Ґго
root: 0..n. Љ ¦¤ п ўҐаиЁ еа Ё¬®Ј® T-¤ҐаҐў Ўг¤Ґв Ё¬Ґвм ®¬Ґа
- зЁб«® ®в 1 ¤® n. ђ §лҐ ўҐаиЁл Ўг¤гв Ё¬Ґвм а §лҐ ®¬Ґа . Џ®-
¬ҐвЄ ў ўҐаиЁҐ б ®¬Ґа®¬ x а ў val [x]. Љ®аҐм Ё¬ҐҐв ®¬Ґа
root. …б«Ё ўҐаиЁ б ®¬Ґа®¬ i Ё¬ҐҐв бл®ўҐ©, в® Ёе ®¬Ґа а ўл
left [i] Ё right [i]. ЋвбгвбвўгойЁ¬ бл®ўмп¬ б®®вўҐвбвўгҐв зЁб«®
0. Ђ «®ЈЁзл¬ ®Ўа §®¬ § 票Ґ root = 0 ᮮ⢥вбвўгҐв Їгб⮬г
¤ҐаҐўг.
„«п еа ҐЁп ¤ҐаҐў ЁбЇ®«м§гҐвбп «Ёим з бвм ¬ ббЁў ; ¤«п
вҐе i, Є®в®алҐ бў®Ў®¤л - в.Ґ. Ґ пў«повбп ®¬Ґа ¬Ё ўҐаиЁ -
§ 票п val [i] ЎҐ§а §«Ёзл. Ќ ¬ Ўг¤Ґв 㤮Ў®, зв®Ўл ўбҐ бў®-
Ў®¤лҐ зЁб« Ўл«Ё "бўп§ л ў бЇЁб®Є": ЇҐаў®Ґ еа Ёвбп ў бЇҐжЁ-
«м®Ґ ЇҐаҐ¬Ґ®© free: 0..n, б«Ґ¤го饥 § i бў®Ў®¤®Ґ зЁб«®
еа Ёвбп ў left [i], в Є зв® бў®Ў®¤л зЁб«
free, left [free], left [left[free]],...
„«п Ї®б«Ґ¤ҐЈ® бў®Ў®¤®Ј® зЁб« i § 票Ґ left [i] = 0. ђ -
ўҐбвў® free = 0 ®§ з Ґв, зв® бў®Ў®¤ле зЁбҐ« Ў®«миҐ Ґв. (‡ -
¬Ґз ЁҐ. Њл ЁбЇ®«м§®ў «Ё ¤«п бўп§лў Ёп бў®Ў®¤ле ўҐаиЁ ¬ ббЁў
left, ®, Є®Ґз®, б ⥬ ¦Ґ гᯥ宬 ¬®¦® Ўл«® ЁбЇ®«м§®ў вм ¬ б-
бЁў right.)
‚¬Ґбв® § 票п 0 (®Ў®§ з о饣® ®вбгвбвўЁҐ ўҐаиЁл) ¬®¦®
Ўл«® Ўл ў®бЇ®«м§®ў вмбп «оЎл¬ ¤агЈЁ¬ зЁб«®¬ ўҐ 1..n. —в®Ўл Ї®¤-
зҐаЄгвм нв®, Ўг¤Ґ¬ ў¬Ґбв® 0 ЁбЇ®«м§®ў вм Є®бв вг null = 0.
12.1.2. ‘®бв ўЁвм Їа®Ја ¬¬г, ®ЇаҐ¤Ґ«пойго, ᮤҐа¦Ёвбп «Ё
н«Ґ¬Ґв t: T ў гЇ®а冷祮¬ ¤ҐаҐўҐ (еа Ё¬®¬ в Є, Є Є в®«мЄ®
зв® ®ЇЁб ®).
ђҐиҐЁҐ.
if root = null then begin
| ..Ґ ЇаЁ ¤«Ґ¦Ёв
end else begin
| x := root;
| {Ёў аЁ в: ®бв Ґвбп Їа®ўҐаЁвм «ЁзЁҐ t ў ҐЇгб⮬ Ї®¤¤Ґ-
| ॢҐ б Є®аҐ¬ x}
| while ((t < val [x]) and (left [x] <> null)) or
| | ((t > val [x]) and (right [x] <> null)) do begin
| | if t < val [x] then begin {left [x] <> null}
| | | x := left [x];
| | end else begin {t > val [x], right [x] <> null}
| | | x := right [x];
| | end;
| end;
| {«ЁЎ® t = val [x], «ЁЎ® t ®вбгвбвўгҐв ў ¤ҐаҐўҐ}
| ..®вўҐв = (t = val [x])
end;
12.1.3. “Їа®бвЁвм аҐиҐЁҐ, ЁбЇ®«м§гп б«Ґ¤гойЁ© ваоЄ. ђ биЁ-
аЁ¬ ®Ў« бвм ®ЇаҐ¤Ґ«ҐЁп ¬ ббЁў val, ¤®Ў ўЁў п祩Єг б ®¬Ґа®¬
null Ё Ї®«®¦Ё¬ val [null] = t.
ђҐиҐЁҐ.
val [null] := t;
x := root;
while t <> val [x] do begin
| if t < val [x] then begin
| | x := left [x];
| end else begin
| | x := right [x];
| end;
end;
..®вўҐв: (x <> null).
12.1.4. ‘®бв ўЁвм Їа®Ја ¬¬г ¤®Ў ў«ҐЁп н«Ґ¬Ґв t ў ¬®-
¦Ґбвў®, ЇаҐ¤бв ў«Ґ®Ґ гЇ®а冷зҐл¬ ¤ҐаҐў®¬ (Ґб«Ё н«Ґ¬Ґв t 㦥
Ґбвм, ЁзҐЈ® ¤Ґ« вм Ґ ¤®).
ђҐиҐЁҐ. ЋЇаҐ¤Ґ«Ё¬ Їа®жҐ¤гаг get_free (var i: integer), ¤ -
ойго бў®Ў®¤®Ґ (Ґ пў«по饥бп ®¬Ґа®¬) зЁб«® i Ё ᮮ⢥вбвўгойЁ¬
®Ўа §®¬ Є®а४вЁагойго бЇЁб®Є бў®Ў®¤ле зЁбҐ«.
procedure get_free (var i: integer);
begin
| {free <> null}
| i := free;
| free := left [free];
end;
‘ ҐҐ ЁбЇ®«м§®ў ЁҐ¬ Їа®Ја ¬¬ ЇаЁ®ЎаҐв Ґв ўЁ¤:
if root = null then begin
| get_free (root);
| left [root] := null; right [root] := null;
| val [root] := t;
end else begin
| x := root;
| {Ёў аЁ в: ®бв «®бм ¤®Ў ўЁвм t Є ҐЇгб⮬㠯®¤¤ҐаҐўг б
| Є®аҐ¬ ў x}
| while ((t < val [x]) and (left [x] <> null)) or
| | ((t > val [x]) and (right [x] <> null)) do begin
| | if t < val [x] then begin
| | | x := left [x];
| | end else begin {t > val [x]}
| | | x := right [x];
| | end;
| end;
| if t <> val [x] then begin {t Ґв ў ¤ҐаҐўҐ}
| | get_free (i);
| | left [i] := null; right [i] := null;
| | val [i] := t;
| | if t < val [x] then begin
| | | left [x] := i;
| | end else begin {t > val [x]}
| | | right [x] := i;
| | end;
| end;
end;
12.1.5. ‘®бв ўЁвм Їа®Ја ¬¬г г¤ «ҐЁп н«Ґ¬Ґв t Ё§ ¬®-
¦Ґбвў , ЇаҐ¤бв ў«Ґ®Ј® гЇ®а冷зҐл¬ ¤ҐаҐў®¬ (Ґб«Ё ҐЈ® в ¬ Ґв,
ЁзҐЈ® ¤Ґ« вм Ґ ¤®).
ђҐиҐЁҐ.
if root = null then begin
| {¤ҐаҐў® Їгбв®, ЁзҐЈ® ¤Ґ« вм Ґ ¤®}
end else begin
| x := root;
| {®бв «®бм г¤ «Ёвм t Ё§ Ї®¤¤ҐаҐў б Є®аҐ¬ ў x; Ї®бЄ®«мЄг
| нв® ¬®¦Ґв Ї®вॡ®ў вм Ё§¬ҐҐЁ© ў ®вжҐ x, ўўҐ¤Ґ¬
| ЇҐаҐ¬ҐлҐ father: 1..n Ё direction: (l, r);
| Ї®¤¤Ґа¦Ёў Ґ¬ в Є®© Ёў аЁ в: Ґб«Ё x Ґ Є®аҐм, в® father
| - ҐЈ® ®вҐж, direction а ў® l Ё«Ё r ў § ўЁбЁ¬®бвЁ ®в
| в®Ј®, «Ґўл¬ Ё«Ё Їа ўл¬ б뮬 пў«пҐвбп x}
| while ((t < val [x]) and (left [x] <> null)) or
| | ((t > val [x]) and (right [x] <> null)) do begin
| | if t < val [x] then begin
| | | father := x; direction := l;
| | | x := left [x];
| | end else begin {t > val [x]}
| | | father := x; direction := r;
| | | x := right [x];
| | end;
| end;
| {t = val [x] Ё«Ё t Ґв ў ¤ҐаҐўҐ}
| if t = val [x] then begin
| | ..г¤ «ҐЁҐ ўҐаиЁл x б ®в殬 father Ё Їа ў«ҐЁҐ¬
| | direction
| end;
end;
“¤ «ҐЁҐ ўҐаиЁл x Їа®Ёб室Ёв Ї®-а §®¬г ў а §ле б«гз пе. ЏаЁ
н⮬ ЁбЇ®«м§гҐвбп Їа®жҐ¤га
procedure make_free (i: integer);
begin
| left [i] := free;
| free := i;
end;
® ўЄ«оз Ґв зЁб«® i ў бЇЁб®Є бў®Ў®¤ле. ђ §«Ёз овбп 4 б«гз п ў
§ ўЁбЁ¬®бвЁ ®в «ЁзЁп Ё«Ё ®вбгвбвўЁп бл®ўҐ© г г¤ «пҐ¬®© ўҐаиЁ-
л.
if (left [x] = null) and (right [x] = null) then begin
| {x - «Ёбв, в.Ґ. Ґ Ё¬ҐҐв бл®ўҐ©}
| make_free (x);
| if x = root then begin
| | root := null;
| end else if direction = l then begin
| | left [father] := null;
| end else begin {direction = r}
| | right [father] := null;
| end;
end else if (left[x]=null) and (right[x] <> null) then begin
| {x г¤ «пҐвбп, right [x] § Ё¬ Ґв ¬Ґбв® x}
| make_free (x);
| if x = root then begin
| | root := right [x];
| end else if direction = l then begin
| | left [father] := right [x];
| end else begin {direction = r}
| | right [father] := right [x];
| end;
end else if (left[x] <> null) and (right[x]=null) then begin
| ..бЁ¬¬ҐваЁз®
end else begin {left [x] <> null, right [x] <> null}
| ..г¤ «Ёвм ўҐаиЁг б ¤ўг¬п бл®ўмп¬Ё
end;
“¤ «ҐЁҐ ўҐаиЁл б ¤ўг¬п бл®ўмп¬Ё Ґ«м§п ᤥ« вм Їа®бв® в Є, ®
ҐҐ ¬®¦® ЇаҐ¤ў аЁвҐ«м® Ї®¬Ґпвм б ўҐаиЁ®©, Ї®¬ҐвЄ Є®в®а®©
пў«пҐвбп ҐЇ®б।б⢥® б«Ґ¤гойЁ¬ (ў Ї®ап¤ЄҐ ў®§а бв Ёп) н«Ґ-
¬Ґв®¬ § Ї®¬ҐвЄ®© x.
y := right [x];
father := x; direction := r;
{⥯Ґам father Ё direction ®в®бпвбп Є ўҐаиЁҐ y}
while left [y] <> null do begin
| father := y; direction := r;
| y := left [y];
end;
{val [y] - ¬ЁЁ¬ «м п Ё§ Ї®¬Ґв®Є, Ў®«миЁе val [x],
y Ґ Ё¬ҐҐв «Ґў®Ј® бл }
val [x] := val [y];
..г¤ «Ёвм ўҐаиЁг y (Є Є г¤ «пвм ўҐаиЁг, г Є®в®а®© Ґв «Ґ-
ў®Ј® бл , ¬л 㦥 § Ґ¬)
12.1.6. “Їа®бвЁвм Їа®Ја ¬¬г г¤ «ҐЁп, § ¬ҐвЁў, зв® ҐЄ®в®-
алҐ б«гз Ё ( ЇаЁ¬Ґа, ЇҐаўлҐ ¤ў Ё§ зҐвлаҐе) ¬®¦® ®ЎкҐ¤ЁЁвм.
12.1.7. €бЇ®«м§®ў вм гЇ®а冷зҐлҐ ¤ҐаҐўмп ¤«п ЇаҐ¤бв ў«Ґ-
Ёп дгЄжЁ©, ®Ў« бвм ®ЇаҐ¤Ґ«ҐЁп Є®в®але - Є®ҐзлҐ ¬®¦Ґбвў
§ 票© вЁЇ T, § зҐЁп Ё¬Ґов ҐЄ®в®ал© вЁЇ U. ЋЇҐа жЁЁ: ўл-
зЁб«ҐЁҐ § зҐЁп ¤ ®¬ аЈг¬ҐвҐ, Ё§¬ҐҐЁҐ § 票п
¤ ®¬ аЈг¬ҐвҐ, ¤®®ЇаҐ¤Ґ«ҐЁҐ дгЄжЁЁ ¤ ®¬ аЈг¬ҐвҐ,
ЁбЄ«о票Ґ н«Ґ¬Ґв Ё§ ®Ў« бвЁ ®ЇаҐ¤Ґ«ҐЁп дгЄжЁЁ.
ђҐиҐЁҐ. „Ґ« Ґ¬ Є Є а миҐ, ¤®Ў ўЁў ҐйҐ ®¤Ё ¬ ббЁў
func_val: array [1..n] of U;
Ґб«Ё val [x] = t, func_val [x] = u, в® § 票Ґ еа Ё¬®© дгЄжЁЁ
t а ў® u.
ЋжҐЄ Є®«ЁзҐбвў ¤Ґ©бвўЁ©.
„«п Є ¦¤®© Ё§ ®ЇҐа жЁ© (Їа®ўҐаЄЁ, ¤®Ў ў«ҐЁп Ё ЁбЄ«о票п)
Є®«ЁзҐбвў® ¤Ґ©бвўЁ© Ґ ЇаҐў®б室Ёв C * (ўлб®в ¤ҐаҐў ). „«п
"а®ў® Ї®¤бваЁ¦Ґ®Ј®" ¤ҐаҐў (Є®Ј¤ ўбҐ «Ёбвмп ®¤®© ўлб®вҐ)
ўлб®в Ї® Ї®ап¤Єг ўҐ«ЁзЁл а ў «®Ј аЁд¬г зЁб« ўҐаиЁ. Ћ¤ Є®
¤«п ЄаЁў®Ў®Є®Ј® ¤ҐаҐў ўбҐ ¬®¦Ґв Ўлвм Ј®а §¤® е㦥: ў Ёег¤иҐ¬
б«гз Ґ ўбҐ ўҐаиЁл ®Ўа §гов жҐЇм Ё ўлб®в а ў зЁб«г ўҐаиЁ.
’ Є б«гзЁвбп, Ґб«Ё н«Ґ¬Ґвл ¬®¦Ґбвў ¤®Ў ў«повбп ў ў®§а бв о饬
Ё«Ё гЎлў о饬 Ї®ап¤ЄҐ. Њ®¦® ¤®Є § вм, ®¤ Є®, зв® ЇаЁ ¤®Ў ў«Ґ-
ЁЁ н«Ґ¬Ґв®ў "ў б«гз ©®¬ Ї®ап¤ЄҐ" б।пп ўлб®в ¤ҐаҐў Ўг¤Ґв
Ґ Ў®«миҐ C * («®Ј аЁд¬ зЁб« ўҐаиЁ). …б«Ё нв®© ®жҐЄЁ "ў б।-
Ґ¬" ¬ «®, Ґ®Ўе®¤Ё¬л ¤®Ї®«ЁвҐ«млҐ ¤Ґ©бвўЁп Ї® Ї®¤¤Ґа¦ Ёо
"бЎ « бЁа®ў ®бвЁ" ¤ҐаҐў . ЋЎ н⮬ б¬. ў б«Ґ¤го饬 ЇгЄвҐ.
12.1.8. ЏаҐ¤Ї®«®¦Ё¬, зв® Ґ®Ўе®¤Ё¬® 㬥вм в Є¦Ґ ®влбЄЁў вм
k-л© н«Ґ¬Ґв ¬®¦Ґбвў (ў Ї®ап¤ЄҐ ў®§а бв Ёп), ЇаЁзҐ¬ Є®«Ё-
зҐбвў® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ґ Ў®«ҐҐ C*(ўлб®в ¤ҐаҐў ). Љ Єго
¤®Ї®«ЁвҐ«мго Ёд®а¬ жЁо ¤® еа Ёвм ў ўҐаиЁ е ¤ҐаҐў ?
ђҐиҐЁҐ. ‚ Є ¦¤®© ўҐаиЁҐ Ўг¤Ґ¬ еа Ёвм зЁб«® ўбҐе ҐҐ Ї®-
⮬Є®ў. „®Ў ў«ҐЁҐ Ё ЁбЄ«о票Ґ ўҐаиЁл вॡгҐв Є®а४樨 «Ёим
ЇгвЁ ®в Є®ап Є нв®© ўҐаиЁҐ. ‚ Їа®жҐбᥠЇ®ЁбЄ k-®© ўҐаиЁл
Ї®¤¤Ґа¦Ёў Ґвбп в Є®© Ёў аЁ в: ЁбЄ®¬ п ўҐаиЁ пў«пҐвбп s-®©
ўҐаиЁ®© Ї®¤¤ҐаҐў б Є®аҐ¬ ў x (§¤Ґбм s Ё x - ЇҐаҐ¬ҐлҐ).)
12.2. ‘Ў « бЁа®ў лҐ ¤ҐаҐўмп.
„ҐаҐў® §лў Ґвбп бЎ « бЁа®ў л¬ (Ё«Ё Ђ‚‹-¤ҐаҐў®¬ ў зҐбвм
Ё§®ЎаҐв ⥫Ґ© нв®Ј® ¬Ґв®¤ ѓ.Њ.Ђ¤Ґ«мб® -‚Ґ«мбЄ®Ј® Ё ….Њ.‹ ¤Ё-
б ), Ґб«Ё ¤«п «оЎ®© ҐЈ® ўҐаиЁл ўлб®вл «Ґў®Ј® Ё Їа ў®Ј® Ї®¤¤Ґ-
ॢ쥢 нв®© ўҐаиЁл ®в«Ёз овбп Ґ Ў®«ҐҐ 祬 1. (‚ з бв®бвЁ,
Є®Ј¤ ®¤®Ј® Ё§ бл®ўҐ© Ґв, ¤агЈ®© - Ґб«Ё ® Ґбвм - ®Ўп§ Ўлвм
«Ёб⮬.)
12.2.1. Ќ ©вЁ ¬ЁЁ¬ «м®Ґ Ё ¬ ЄбЁ¬ «м®Ґ ў®§¬®¦®Ґ Є®«Ё-
зҐбвў® ўҐаиЁ ў бЎ « бЁа®ў ®¬ ¤ҐаҐўҐ ўлб®вл n.
ђҐиҐЁҐ. Њ ЄбЁ¬ «м®Ґ зЁб«® ўҐаиЁ а ў® (2 ў б⥯ҐЁ n) -
1. …б«Ё m (n) - ¬ЁЁ¬ «м®Ґ зЁб«® ўҐаиЁ, в®, Є Є «ҐЈЄ® ўЁ¤Ґвм,
m (n + 2) = 1 + m (n) + m (n+1),
®вЄг¤
m (n) = fib (n+1) - 1
(fib(n) - n-®Ґ зЁб«® ”ЁЎ® ззЁ, fib(0)=1, fib(1)=1, fib(n+2) =
fib(n) + fib(n+1)).
12.2.2. „®Є § вм, зв® бЎ « бЁа®ў ®Ґ ¤ҐаҐў® б n ўҐаиЁ ¬Ё
Ё¬ҐҐв ўлб®вг Ґ Ў®«миҐ C * (log n) ¤«п ҐЄ®в®а®© Є®бв вл C, Ґ
§ ўЁбп饩 ®в n.
ђҐиҐЁҐ. €¤гЄжЁҐ© Ї® n «ҐЈЄ® ¤®Є § вм, зв® fib [n+1] >= (a
ў б⥯ҐЁ n), Ј¤Ґ a - Ў®«миЁ© Є®аҐм Єў ¤а в®Ј® га ўҐЁп a*a =
1 + a, в® Ґбвм a = (sqrt(5) + 1)/2. Ћбв Ґвбп ў®бЇ®«м§®ў вмбп
ЇаҐ¤л¤г饩 § ¤ 祩.
‚а 饨п.
Њл е®вЁ¬ ў®ббв ў«Ёў вм бЎ « бЁа®ў ®бвм ¤ҐаҐў Ї®б«Ґ
ўЄ«озҐЁп Ё г¤ «ҐЁп н«Ґ¬Ґв®ў. „«п нв®Ј® Ґ®Ўе®¤Ё¬л Є ЄЁҐ-в®
ЇаҐ®Ўа §®ў Ёп ¤ҐаҐў , Ґ ¬ҐпойЁҐ ¬®¦Ґбвў Ї®¬Ґв®Є ҐЈ® ўҐа-
иЁ е Ё Ґ аги ойЁҐ гЇ®а冷祮бвЁ, ® бЇ®б®ЎбвўгойЁҐ «гз襩
бЎ « бЁа®ў ®бвЁ. ЋЇЁиҐ¬ ҐбЄ®«мЄ® в ЄЁе ЇаҐ®Ўа §®ў Ё©.
Џгбвм ўҐаиЁ a Ё¬ҐҐв Їа ў®Ј® бл b. ЋЎ®§ зЁ¬ зҐаҐ§ P «Ґ-
ў®Ґ Ї®¤¤ҐаҐў® ўҐаиЁл a, зҐаҐ§ Q Ё R - «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп
ўҐаиЁл b.
“Ї®а冷祮бвм ¤ҐаҐў вॡгҐв, зв®Ўл P < a < Q < b < R
(в®зҐҐ б«Ґ¤®ў «® Ўл бЄ § вм "«оЎ п Ї®¬ҐвЄ P ¬ҐмиҐ Ї®¬ҐвЄЁ
a", "Ї®¬ҐвЄ a ¬ҐмиҐ «оЎ®© Ї®¬ҐвЄЁ Q" Ё в.¤., ® ¬л
Ї®§ў®«Ё¬ ᥡҐ нв®Ј® Ґ ¤Ґ« вм). ’®з® в®Ј® ¦Ґ вॡгҐв гЇ®а冷-
祮бвм ¤ҐаҐў б Є®аҐ¬ b, ҐЈ® «Ґўл¬ б뮬 a, ў Є®в®а®¬ P Ё Q -
«Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп a, R - Їа ў®Ґ Ї®¤¤ҐаҐў® b. Џ®н⮬г
ЇҐаў®Ґ ¤ҐаҐў® ¬®¦® ЇаҐ®Ўа §®ў вм ў® ўв®а®Ґ, Ґ аги п гЇ®а冷-
祮бвЁ. ’ Є®Ґ ЇаҐ®Ўа §®ў ЁҐ §®ўҐ¬ ¬ «л¬ Їа ўл¬ ўа 饨Ґ¬
(Їа ўл¬ - Ї®бЄ®«мЄг бгйҐбвўгҐв бЁ¬¬ҐваЁз®Ґ, «Ґў®Ґ, ¬ «л¬ - Ї®б-
Є®«мЄг Ґбвм Ё Ў®«м讥, Є®в®а®Ґ ¬л ᥩз б ®ЇЁиҐ¬).
Џгбвм b - Їа ўл© бл a, c - «Ґўл© бл b, P -«Ґў®Ґ Ї®¤¤ҐаҐў®
a, Q Ё R -«Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп c, S - Їа ў®Ґ Ї®¤¤ҐаҐў® b.
’®Ј¤ P < a < Q < c < R < b < S.
’ Є®© ¦Ґ Ї®а冷Є ᮮ⢥вбвўгҐв ¤ҐаҐўг б Є®аҐ¬ c, Ё¬ҐойЁ¬ «Ґў®Ј®
бл a Ё Їа ў®Ј® бл b, ¤«п Є®в®а®Ј® P Ё Q - Ї®¤¤ҐаҐўмп ўҐаиЁл
a, R Ё S - Ї®¤¤ҐаҐўмп ўҐаиЁл b. ‘®®вўҐвбвўго饥 ЇаҐ®Ўа §®ў -
ЁҐ Ўг¤Ґ¬ §лў вм Ў®«миЁ¬ Їа ўл¬ ўа 饨Ґ¬. (Ђ «®ЈЁз® ®ЇаҐ¤Ґ-
«пҐвбп бЁ¬¬ҐваЁз®Ґ Ґ¬г Ў®«м讥 «Ґў®Ґ ўа 饨Ґ.)
12.2.3. „ ® ¤ҐаҐў®, бЎ « бЁа®ў ®Ґ ўбо¤г, Єа®¬Ґ Є®ап, ў
Є®в®а®¬ а §Ёж ўлб®в а ў 2 (в.Ґ. «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп
Є®ап бЎ « бЁа®ў л Ё Ёе ўлб®вл ®в«Ёз овбп 2). „®Є § вм, зв®
®® ¬®¦Ґв Ўлвм ЇаҐўа 饮 ў бЎ « бЁа®ў ®Ґ ®¤Ё¬ Ё§ зҐвлаҐе
®ЇЁб ле ЇаҐ®Ўа §®ў Ё©, ЇаЁзҐ¬ ўлб®в ҐЈ® ®бв Ґвбп ЇаҐ¦Ґ©
Ё«Ё 㬥миЁвбп 1.
ђҐиҐЁҐ. Џгбвм Ў®«ҐҐ Ё§ЄЁ¬ пў«пҐвбп, ЇаЁ¬Ґа, «Ґў®Ґ Ї®¤-
¤ҐаҐў®, Ё ҐЈ® ўлб®в а ў k. ’®Ј¤ ўлб®в Їа ў®Ј® Ї®¤¤ҐаҐў
а ў k+2. ЋЎ®§ зЁ¬ Є®аҐм зҐаҐ§ a, ҐЈ® Їа ў®Ј® бл (® ®Ўп-
§ вҐ«м® Ґбвм) зҐаҐ§ b. ђ бᬮваЁ¬ «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп
ўҐаиЁл b. Ћ¤® Ё§ Ёе ®Ўп§ вҐ«м® Ё¬ҐҐв ўлб®вг k+1, ¤агЈ®Ґ
¬®¦Ґв Ё¬Ґвм ўлб®вг k Ё«Ё k+1 (¬ҐмиҐ k Ўлвм Ґ ¬®¦Ґв, в Є Є Є
Ї®¤¤ҐаҐўмп бЎ « бЁа®ў л). …б«Ё ўлб®в «Ґў®Ј® Ї®¤¤ҐаҐў а ў
k+1, Їа ў®Ј® - k, ¤® Ї®вॡгҐвбп Ў®«м讥 Їа ў®Ґ ўа 饨Ґ; ў
®бв «мле б«гз пе Ї®¬®Ј Ґв ¬ «®Ґ.
------------------------------------
------------------------------------
------------------------------------
ўлб®в 㬥миЁ« бм 1
------------------------------------
------------------------------------
------------------------------------
ўлб®в Ґ Ё§¬ҐЁ« бм
k-1 Ё«Ё k (ў ®¤®¬ Ё§ б«гз Ґў k)
------------------------------------
------------------------------------
------------------------------------
ўлб®в 㬥миЁ« бм 1
’аЁ б«гз п Ў « бЁа®ўЄЁ ¤ҐаҐў .
12.2.4. ‚ бЎ « бЁа®ў ®Ґ ¤ҐаҐў® ¤®Ў ўЁ«Ё Ё«Ё Ё§ ҐЈ® г¤ -
«Ё«Ё «Ёбв. „®Є § вм, зв® ¬®¦® ў®ббв ®ўЁвм бЎ « бЁа®ў ®бвм б
Ї®¬®ймо ҐбЄ®«мЄЁе ўа 饨©, ЇаЁзҐ¬ Ёе зЁб«® Ґ Ў®«миҐ ўлб®вл
¤ҐаҐў .
ђҐиҐЁҐ. Ѓг¤Ґ¬ ¤®Є §лў вм Ў®«ҐҐ ®ЎйЁ© д Єв:
‹Ґ¬¬ . …б«Ё ў бЎ « бЁа®ў ®¬ ¤ҐаҐўҐ X ®¤® Ё§ ҐЈ® Ї®¤¤Ґ-
ॢ쥢 Y § ¬ҐЁ«Ё бЎ « бЁа®ў ®Ґ ¤ҐаҐў® Z, ЇаЁзҐ¬ ўлб®в Z
®в«Ёз Ґвбп ®в ўлб®вл Y Ґ Ў®«ҐҐ 祬 1, в® Ї®«г祮Ґ в Є®©
"ЇаЁўЁўЄ®©" ¤ҐаҐў® ¬®¦® ЇаҐўа вЁвм ў бЎ « бЁа®ў ®Ґ ўа 饨-
п¬Ё (ЇаЁзҐ¬ Є®«ЁзҐбвў® ўа 饨© Ґ ЇаҐў®б室Ёв ўлб®вл, Є®в®-
а®© ¤Ґ« Ґвбп ЇаЁўЁўЄ ).
— бвл¬ б«гз Ґ¬ ЇаЁўЁўЄЁ пў«пҐвбп § ¬Ґ Їгбв®Ј® Ї®¤¤ҐаҐў
«Ёбв Ё«Ё ®Ў®а®в, в Є зв® ¤®бв в®з® ¤®Є § вм нвг «Ґ¬¬г.
„®Є § ⥫мбвў® «Ґ¬¬л. €¤гЄжЁп Ї® ўлб®вҐ, Є®в®а®© ¤Ґ« -
Ґвбп ЇаЁўЁўЄ . …б«Ё ® Їа®Ёб室Ёв ў Є®аҐ (§ ¬ҐпҐвбп ўбҐ ¤ҐаҐ-
ў® 楫ЁЄ®¬), в® ўбҐ ®зҐўЁ¤® ("ЇаЁў®©" бЎ « бЁа®ў Ї® гб«®-
ўЁо). Џгбвм § ¬ҐпҐвбп ҐЄ®в®а®Ґ Ї®¤¤ҐаҐў®, ЇаЁ¬Ґа, «Ґў®Ґ Ї®¤-
¤ҐаҐў® ҐЄ®в®а®© ўҐаиЁл x. ‚®§¬®¦л ¤ў б«гз п.
(1) Џ®б«Ґ ЇаЁўЁўЄЁ бЎ « бЁа®ў ®бвм ў ўҐаиЁҐ x Ґ аг-
иЁ« бм (е®вп, ў®§¬®¦®, агиЁ« бм бЎ « бЁа®ў ®бвм ў ЇаҐ¤Є е
x: ўлб®в Ї®¤¤ҐаҐў б Є®аҐ¬ ў x ¬®Ј« Ё§¬ҐЁвмбп). ’®Ј¤ ¬®¦®
б®б« вмбп ЇаҐ¤Ї®«®¦ҐЁҐ Ё¤гЄжЁЁ, бзЁв п, зв® ¬л ЇаЁўЁў «Ё
楫ЁЄ®¬ Ї®¤¤ҐаҐў® б Є®аҐ¬ ў x.
(2) ‘Ў « бЁа®ў ®бвм ў x агиЁ« бм. ЏаЁ н⮬ а §Ёж ўл-
б®в а ў 2 (Ў®«миҐ ® Ўлвм Ґ ¬®¦Ґв, в Є Є Є ўлб®в Z ®в«Ёз -
Ґвбп ®в ўлб®вл Y Ґ Ў®«ҐҐ 祬 1). ђ §ЎҐаҐ¬ ¤ў ў аЁ в .
(2 ) ‚лиҐ Їа ў®Ґ (Ґ § ¬ҐпўиҐҐбп) Ї®¤¤ҐаҐў® ўҐаиЁл x.
Џгбвм ўлб®в «Ґў®Ј® (в.Ґ. Z) а ў k, Їа ў®Ј® - k+2. ‚лб®в бв -
а®Ј® «Ґў®Ј® Ї®¤¤ҐаҐў ўҐаиЁл x (в.Ґ. Y) Ўл« а ў k+1. Џ®¤¤Ґ-
ॢ® б Є®аҐ¬ x Ё¬Ґ«® ў Ёб室®¬ ¤ҐаҐўҐ ўлб®вг k+3, Ё нв ўлб®в
Ґ Ё§¬ҐЁ« бм Ї®б«Ґ ЇаЁўЁўЄЁ.
Џ® ЇаҐ¤л¤г饩 § ¤ зҐ ўа 饨Ґ ЇаҐ®Ўа §гҐв Ї®¤¤ҐаҐў® б Є®а-
Ґ¬ ў x ў бЎ « бЁа®ў ®Ґ Ї®¤¤ҐаҐў® ўлб®вл k+2 Ё«Ё k+3. ’® Ґбвм
ўлб®в Ї®¤¤ҐаҐў б Є®аҐ¬ x - ў ба ўҐЁЁ б ҐЈ® ЇаҐ¦Ґ© ўлб®в®©
- Ґ Ё§¬ҐЁ« бм Ё«Ё 㬥миЁ« бм 1, Ё ¬л ¬®¦Ґ¬ ў®бЇ®«м§®ў вмбп
ЇаҐ¤Ї®«®¦ҐЁҐ¬ Ё¤гЄжЁЁ.
------------- ----------------
------------- ----------------
-------------k ----------------k
2 2Ў
(2Ў) ‚лиҐ «Ґў®Ґ Ї®¤¤ҐаҐў® ўҐаиЁл x. Џгбвм ўлб®в «Ґў®Ј®
(в.Ґ. Z) а ў k+2, Їа ў®Ј® - k. ‚лб®в бв а®Ј® «Ґў®Ј® Ї®¤¤ҐаҐў
(в.Ґ. Y) Ўл« а ў k+1. Џ®¤¤ҐаҐў® б Є®аҐ¬ x ў Ёб室®¬ ¤ҐаҐўҐ
X Ё¬Ґ«® ўлб®вг k+2, Ї®б«Ґ ЇаЁўЁўЄЁ ® бв « а ў k+3. Џ®б«Ґ
Ї®¤е®¤п饣® ўа 饨п (б¬. ЇаҐ¤л¤гйго § ¤ зг) Ї®¤¤ҐаҐў® б Є®аҐ¬
ў x бв Ґв бЎ « бЁа®ў л¬, ҐЈ® ўлб®в Ўг¤Ґв а ў k+2 Ё«Ё k+3,
в Є зв® Ё§¬ҐҐЁҐ ўлб®вл Ї® ба ўҐЁо б ўлб®в®© Ї®¤¤ҐаҐў б Є®а-
Ґ¬ x ў ¤ҐаҐўҐ X Ґ ЇаҐў®б室Ёв 1 Ё ¬®¦® б®б« вмбп ЇаҐ¤Ї®«®-
¦ҐЁҐ Ё¤гЄжЁЁ.
12.2.5. ‘®бв ўЁвм Їа®Ја ¬¬л ¤®Ў ў«ҐЁп Ё г¤ «ҐЁп н«Ґ¬Ґ-
в®ў, б®еа пойЁҐ бЎ « бЁа®ў ®бвм. —Ёб«® ¤Ґ©бвўЁ© Ґ ¤®«¦®
ЇаҐў®б室Ёвм C*(ўлб®в ¤ҐаҐў ). ђ §аҐи Ґвбп еа Ёвм ў ўҐаиЁ е
¤ҐаҐў ¤®Ї®«ЁвҐ«мго Ёд®а¬ жЁо, Ґ®Ўе®¤Ё¬го ЇаЁ Ў « бЁа®ўЄҐ.
ђҐиҐЁҐ. Ѓг¤Ґ¬ еа Ёвм ¤«п Є ¦¤®© ўҐаиЁл а §Ёжг ¬Ґ¦¤г
ўлб®в®© ҐҐ Їа ў®Ј® Ё «Ґў®Ј® Ї®¤¤ҐаҐўмҐў:
diff [i] = (ўлб®в Їа ў®Ј® Ї®¤¤ҐаҐў ўҐаиЁл б ®¬Ґа®¬ i) -
(ўлб®в «Ґў®Ј® Ї®¤¤ҐаҐў ўҐаиЁл б ®¬Ґа®¬ i).
Ќ ¬ Ї®вॡговбп зҐвлॠЇа®жҐ¤гал, ᮮ⢥вбвўгойЁҐ Ў®«миЁ¬ Ё ¬ -
«л¬ Їа ўл¬ Ё «Ґўл¬ ўа 饨ﬨ. Ќ® ў з «Ґ ¤ў § ¬Ґз Ёп.
(1) Ќ ¬ 㦮, зв®Ўл ЇаЁ ўа 饨Ё Ї®¤¤ҐаҐў ®¬Ґа ҐЈ® Є®ап
Ґ ¬Ґп«бп. (‚ Їа®вЁў®¬ б«гз Ґ Ї®вॡ®ў «®бм Ўл Є®а४вЁа®ў вм
Ёд®а¬ жЁо ў ®вжҐ Є®ап, зв® Ґ¦Ґ« ⥫м®.) ќв®Ј® ¬®¦® ¤®бвЁзм,
в Є Є Є ®¬Ґа ўҐаиЁ ¤ҐаҐў ¬®¦® ўлЎЁа вм Ґ§ ўЁбЁ¬® ®в Ёе
§ 票©. (Ќ Є авЁЄ е ®¬Ґа гЄ § бЎ®Єг ®в ўҐаиЁл, § зҐ-
ЁҐ - ўгваЁ.)
Њ «®Ґ Їа ў®Ґ ўа 饨Ґ
Ѓ®«м讥 Їа ў®Ґ ўа 饨Ґ
(2) Џ®б«Ґ ЇаҐ®Ўа §®ў Ё© ¬л ¤®«¦л в Є¦Ґ Ё§¬ҐЁвм б®®в-
ўҐвб⢥® § зҐЁп ў ¬ ббЁўҐ diff. „«п нв®Ј® ¤®бв в®з® § вм
ўлб®вл ¤ҐаҐўмҐў P, Q, ... б в®з®бвмо ¤® Є®бв вл, Ї®н⮬㠬®¦-
® ЇаҐ¤Ї®« Ј вм, зв® ®¤ Ё§ ўлб®в а ў г«о.
‚®в Їа®жҐ¤гал ўа 饨©:
procedure SR (a:integer); {¬ «®Ґ Їа ў®Ґ ўа 饨Ґ б Є®аҐ¬ a}
| var b: 1..n; val_a,val_b: T; h_P,h_Q,h_R: integer;
begin
| b := right [a]; {b <> null}
| val_a := val [a]; val_b := val [b];
| h_Q := 0; h_R := diff[b]; h_P := (max(h_Q,h_R)+1)-diff[a];
| val [a] := val_b; val [b] := val_a;
| right [a] := right [b] {Ї®¤¤ҐаҐў® R}
| right [b] := left [b] {Ї®¤¤ҐаҐў® Q}
| left [b] := left [a] {Ї®¤¤ҐаҐў® P}
| left [a] := b;
| diff [b] := h_Q - h_P;
| diff [a] := h_R - (max (h_P, h_Q) + 1);
end;
procedure BR (a:integer);{Ў®«м讥 Їа ў®Ґ ўа 饨Ґ б Є®аҐ¬ a}
| var b,c: 1..n; val_a,val_b,val_c: T;
| h_P,h_Q,h_R,h_S: integer;
begin
| b := right [a]; c := left [b]; {b,c <> null}
| val_a := val [a]; val_b := val [b]; val_c := val [c];
| h_Q := 0; h_R := diff[c]; h_S := (max(h_Q,h_R)+1)+diff[b];
| h_P := 1 + max (h_S, h_S-diff[b]) - diff [a];
| val [a] := val_c; val [c] := val_a;
| left [b] := right [c] {Ї®¤¤ҐаҐў® R}
| right [c] := left [c] {Ї®¤¤ҐаҐў® Q}
| left [c] := left [a] {Ї®¤¤ҐаҐў® P}
| left [a] := c;
| diff [b] := h_S - h_R;
| diff [c] := h_Q - h_P;
| diff [a] := max (h_S, h_R) - max (h_P, h_Q);
end;
‹ҐўлҐ ўа 饨п (Ў®«м讥 Ё ¬ «®Ґ) § ЇЁблў овбп бЁ¬¬ҐваЁз®.
Џа®жҐ¤гал ¤®Ў ў«ҐЁп Ё г¤ «ҐЁп н«Ґ¬Ґв®ў ЇЁигвбп Є Є
а миҐ, ® в®«мЄ® ¤®Ў ў«ҐЁҐ Ё г¤ «ҐЁҐ ¤®«¦® б®Їа®ў®¦¤ вмбп
Є®а४樥© ¬ ббЁў diff Ё ў®ббв ®ў«ҐЁҐ¬ бЎ « бЁа®ў ®бвЁ.
ЏаЁ н⮬ ЁбЇ®«м§гҐвбп Їа®жҐ¤га б в ЄЁ¬Ё бў®©бвў ¬Ё:
¤ ®: «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп ўҐаиЁл б ®¬Ґа®¬ a бЎ « -
бЁа®ў л, ў б ¬®© ўҐаиЁҐ а §Ёж ўлб®в Ґ Ў®«миҐ 2, ў
Ї®¤¤ҐаҐўҐ б Є®аҐ¬ a ¬ ббЁў diff § Ї®«Ґ Їа ўЁ«м®;
¤®: Ї®¤¤ҐаҐў® б Є®аҐ¬ a бЎ « бЁа®ў ® Ё ¬ ббЁў diff б®-
®вўҐвб⢥® Ё§¬ҐҐ, d - Ё§¬ҐҐЁҐ ҐЈ® ўлб®вл (а ў® 0
Ё«Ё -1); ў ®бв «м®© з бвЁ ўбҐ ®бв «®бм Є Є Ўл«®}
procedure balance (a: integer; var d: integer);
begin {-2 <= diff[a] <= 2}
| if diff [a] = 2 then begin
| | b := right [a];
| | if diff [b] = -1 then begin
| | | BR (a); d := -1;
| | end else if diff [b] = 0 then begin
| | | SR (a); d := 0;
| | end else begin {diff [b] = 1}
| | | SR (a); d := - 1;
| | end;
| end else if diff [a] = -2 then begin
| | b := left [a];
| | if diff [b] = 1 then begin
| | | BL (a); d := -1;
| | end else if diff [b] = 0 then begin
| | | SL (a); d := 0;
| | end else begin {diff [b] = -1}
| | | SL (a); d := - 1;
| | end;
| end else begin {-2 < diff [a] < 2, ЁзҐЈ® ¤Ґ« вм Ґ ¤®}
| | d := 0;
| end;
end;
‚®ббв ®ў«ҐЁҐ бЎ « бЁа®ў ®бвЁ вॡгҐв ¤ўЁ¦ҐЁп ®в
«Ёбв쥢 Є Є®ао, Ї®н⮬㠡㤥¬ еа Ёвм ў б⥪Ґ Їгвм ®в Є®ап Є
а бб¬ ваЁў Ґ¬®© ў ¤ л© ¬®¬Ґв ўҐаиЁҐ. ќ«Ґ¬Ґв ¬Ё б⥪ Ўг¤гв
Ї ал (ўҐаиЁ , Їа ў«ҐЁҐ ¤ўЁ¦ҐЁп Ё§ ҐҐ), в.Ґ. § 票п вЁЇ
record
| vert: 1..n; {ўҐаиЁ }
| direction : (l, r); {l - «Ґў®Ґ, r- Їа ў®Ґ}
end;
Џа®Ја ¬¬ ¤®Ў ў«ҐЁп н«Ґ¬Ґв t ⥯Ґам ўлЈ«п¤Ёв в Є:
if root = null then begin
| get_free (root);
| left [root] := null; right [root] := null; diff[root] := 0;
| val [root] := t;
end else begin
| x := root; ..ᤥ« вм б⥪ Їгбвл¬
| {Ёў аЁ в: ®бв «®бм ¤®Ў ўЁвм t Є ҐЇгб⮬㠯®¤¤ҐаҐўг б
| Є®аҐ¬ ў x; б⥪ ᮤҐа¦Ёв Їгвм Є x}
| while ((t < val [x]) and (left [x] <> null)) or
| | ((t > val [x]) and (right [x] <> null)) do begin
| | if t < val [x] then begin
| | | ..¤®Ў ўЁвм ў б⥪ Ї аг <x, l>
| | | x := left [x];
| | end else begin {t > val [x]}
| | | ..¤®Ў ўЁвм ў б⥪ Ї аг <x, r>
| | | x := right [x];
| | end;
| end;
| if t <> val [x] then begin {t Ґв ў ¤ҐаҐўҐ}
| | get_free (i); val [i] := t;
| | left [i] := null; right [i] := null; diff [i] := 0;
| | if t < val [x] then begin
| | | ..¤®Ў ўЁвм ў б⥪ Ї аг <x, l>
| | | left [x] := i;
| | end else begin {t > val [x]}
| | | ..¤®Ў ўЁвм ў б⥪ Ї аг <x, r>
| | | right [x] := i;
| | end;
| | d := 1;
| | {Ёў аЁ в: б⥪ ᮤҐа¦Ёв Їгвм Є Ё§¬ҐЁўиҐ¬гбп Ї®¤¤ҐаҐўг,
| | ўлб®в Є®в®а®Ј® 㢥«ЁзЁ« бм Ї® ба ўҐЁо б ўлб®в®© ў
| | Ёб室®¬ ¤ҐаҐўҐ d (=0 Ё«Ё 1); нв® Ї®¤¤ҐаҐў® бЎ « -
| | бЁа®ў ®; § 票п diff ¤«п ҐЈ® ўҐаиЁ Їа ўЁ«мл; ў ®б-
| | ⠫쮬 ¤ҐаҐўҐ ўбҐ ®бв «®бм Є Є Ўл«® - ў з бв®бвЁ,
| | § 票п diff}
| | while (d <> 0) and ..б⥪ ҐЇгбв do begin {d = 1}
| | | ..ў§пвм Ё§ б⥪ Ї аг ў <v, direct>
| | | if direct = l then begin
| | | | if diff [v] = 1 then begin
| | | | | c := 0;
| | | | end else begin
| | | | | c := 1;
| | | | end;
| | | | diff [v] := diff [v] - 1;
| | | end else begin {direct = r}
| | | | if diff [v] = -1 then begin
| | | | | c := 0;
| | | | end else begin
| | | | | c := 1;
| | | | end;
| | | | diff [v] := diff [v] + 1;
| | | end;
| | | {c = Ё§¬ҐҐЁҐ ўлб®вл Ї®¤¤ҐаҐў б Є®аҐ¬ ў v Ї® ба ўҐ-
| | | Ёо б Ёбе®¤л¬ ¤ҐаҐў®¬; ¬ ббЁў diff ᮤҐа¦Ёв Їа ўЁ«м-
| | | лҐ § зҐЁп ¤«п нв®Ј® Ї®¤¤ҐаҐў ; ў®§¬®¦® аг襨Ґ
| | | бЎ « бЁа®ў ®бвЁ ў v}
| | | balance (v, d1); d := c + d1;
| | end;
| end;
end;
‹ҐЈЄ® Їа®ўҐаЁвм, зв® § 票Ґ d ¬®¦Ґв Ўлвм а ў® в®«мЄ® 0 Ё«Ё 1
(® Ґ -1): Ґб«Ё c = 0, в® diff [v] = 0 Ё Ў « бЁа®ўЄ Ґ Їа®Ё§-
ў®¤Ёвбп.
Џа®Ја ¬¬ г¤ «ҐЁп бва®Ёвбп «®ЈЁз®. …Ґ ®б®ў®© да Ј-
¬Ґв в Є®ў:
{Ёў аЁ в: б⥪ ᮤҐа¦Ёв Їгвм Є Ё§¬ҐЁўиҐ¬гбп Ї®¤¤ҐаҐўг,
ўлб®в Є®в®а®Ј® Ё§¬ҐЁ« бм Ї® ба ўҐЁо б ўлб®в®© ў
Ёб室®¬ ¤ҐаҐўҐ d (=0 Ё«Ё -1); нв® Ї®¤¤ҐаҐў®
бЎ « бЁа®ў ®; § 票п diff ¤«п ҐЈ® ўҐаиЁ Їа ўЁ«мл;
ў ®б⠫쮬 ¤ҐаҐўҐ ўбҐ ®бв «®бм Є Є Ўл«® -
ў з бв®бвЁ, § 票п diff}
while (d <> 0) and ..б⥪ ҐЇгбв do begin
| {d = -1}
| ..ў§пвм Ё§ б⥪ Ї аг ў <v, direct>
| if direct = l then begin
| | if diff [v] = -1 then begin
| | | c := -1;
| | end else begin
| | | c := 0;
| | end;
| | diff [v] := diff [v] + 1;
| end else begin {direct = r}
| | if diff [v] = 1 then begin
| | | c := -1;
| | end else begin
| | | c := 0;
| | end;
| | diff [v] := diff [v] - 1;
| end;
| {c = Ё§¬ҐҐЁҐ ўлб®вл Ї®¤¤ҐаҐў б Є®аҐ¬ ў v Ї® ба ў-
| ҐЁо б Ёбе®¤л¬ ¤ҐаҐў®¬; ¬ ббЁў diff ᮤҐа¦Ёв
| Їа ўЁ«млҐ § зҐЁп ¤«п нв®Ј® Ї®¤¤ҐаҐў ;
| ў®§¬®¦® аг襨Ґ бЎ « бЁа®ў ®бвЁ ў v}
| balance (v, d1);
| d := c + d1;
end;
‹ҐЈЄ® Їа®ўҐаЁвм, зв® § 票Ґ d ¬®¦Ґв Ўлвм а ў® в®«мЄ® 0 Ё«Ё -1
(® Ґ -2): Ґб«Ё c = -1, в® diff [v] = 0 Ё Ў « бЁа®ўЄ Ґ Їа®-
Ё§ў®¤Ёвбп.
Ћв¬ҐвЁ¬ в Є¦Ґ, зв® «ЁзЁҐ б⥪ ¤Ґ« Ґв Ё§«ЁиЁ¬Ё ЇҐаҐ¬Ґ-
лҐ father Ё direction (Ёе а®«м ⥯Ґам ЁЈа Ґв ўҐаиЁ б⥪ ).
12.2.6. „®Є § вм, зв® ЇаЁ ¤®Ў ў«ҐЁЁ н«Ґ¬Ґв
( ) ўв®а®© Ё§ ваҐе б«гз Ґў Ў « бЁа®ўЄЁ (б¬. аЁбг®Є ўлиҐ)
Ґў®§¬®¦Ґ;
(Ў) Ї®« п Ў « бЁа®ўЄ вॡгҐв Ґ Ў®«ҐҐ ®¤®Ј® ўа 饨п
(Ї®б«Ґ 祣® ўбҐ ¤ҐаҐў® бв ®ўЁвбп бЎ « бЁа®ў л¬),
ў в® ўаҐ¬п Є Є ЇаЁ г¤ «ҐЁЁ н«Ґ¬Ґв ¬®¦Ґв Ї® ¤®ЎЁвмбп
¬®Ј® ўа 饨©.
‡ ¬Ґз ЁҐ. Њл бв а «Ёбм § ЇЁб вм Їа®Ја ¬¬л ¤®Ў ў«ҐЁп Ё
г¤ «ҐЁп в Є, зв®Ўл ®Ё Ўл«Ё Є Є ¬®¦® Ў®«ҐҐ Ї®е®¦Ё¬Ё ¤агЈ
¤агЈ . €бЇ®«м§гп бЇҐжЁдЁЄг Є ¦¤®© Ё§ Ёе, ¬®¦® ¬®Ј®Ґ гЇа®б-
вЁвм.
‘гйҐбвўгов Ё ¤агЈЁҐ бЇ®б®Ўл ЇаҐ¤бв ў«ҐЁп ¬®¦Ґбвў, Ј а -
вЁагойЁҐ зЁб«® ¤Ґ©бвўЁ© Ї®ап¤Є log n Є ¦¤го ®ЇҐа жЁо. ЋЇЁиҐ¬
®¤Ё Ё§ Ёе ( §лў Ґ¬л© Ѓ-¤ҐаҐўмп¬Ё).
„® бЁе Ї®а Є ¦¤ п ўҐаиЁ б®¤Ґа¦ « ®¤Ё н«Ґ¬Ґв еа Ё¬®Ј®
¬®¦Ґбвў . ќв®в н«Ґ¬Ґв б«г¦Ё« Ја ЁжҐ© ¬Ґ¦¤г «Ґўл¬ Ё Їа ўл¬
Ї®¤¤ҐаҐў®¬. Ѓг¤Ґ¬ ⥯Ґам еа Ёвм ў ўҐаиЁҐ k >= 1 н«Ґ¬Ґв®ў ¬®-
¦Ґбвў (зЁб«® k ¬®¦Ґв ¬Ґпвмбп ®в ўҐаиЁл Є ўҐаиЁҐ, в Є¦Ґ ЇаЁ
¤®Ў ў«ҐЁЁ Ё г¤ «ҐЁЁ ®ўле н«Ґ¬Ґв®ў, б¬. ¤ «ҐҐ). ќвЁ k н«Ґ¬Ґ-
в®ў б«г¦ в а §¤Ґ«ЁвҐ«п¬Ё ¤«п k+1 Ї®¤¤ҐаҐў . Џгбвм дЁЄбЁа®ў ®
ҐЄ®в®а®Ґ зЁб«® n >= 1. Ѓг¤Ґ¬ а бб¬ ваЁў вм ¤ҐаҐўмп, ®Ў« ¤ ойЁҐ
в ЄЁ¬Ё бў®©бвў ¬Ё:
(1) Љ ¦¤ п ўҐаиЁ б®¤Ґа¦Ёв ®в n ¤® 2n н«Ґ¬Ґв®ў (§ ЁбЄ«о-
票Ґ¬ Є®ап, Є®в®ал© ¬®¦Ґв ᮤҐа¦ вм «оЎ®Ґ зЁб«® н«Ґ¬Ґв®ў ®в 0
¤® 2n).
(2) ‚ҐаиЁ б k н«Ґ¬Ґв ¬Ё «ЁЎ® Ё¬ҐҐв k+1 бл , «ЁЎ® Ґ
Ё¬ҐҐв бл®ўҐ© ў®®ЎйҐ (в ЄЁҐ ўҐаиЁл §лў овбп «Ёбвмп¬Ё).
(3) ‚ᥠ«Ёбвмп 室пвбп ®¤®© Ё в®© ¦Ґ ўлб®вҐ.
„®Ў ў«ҐЁҐ н«Ґ¬Ґв Їа®Ёб室Ёв в Є. …б«Ё «Ёбв, ў Є®в®ал© ®
Ї®Ї ¤ Ґв, ҐЇ®«® (в.Ґ. ᮤҐа¦Ёв ¬ҐҐҐ 2n н«Ґ¬Ґв®ў), в® Ґв
Їа®Ў«Ґ¬. …б«Ё ® Ї®«®, в® 2n+1 н«Ґ¬Ґв (ўбҐ н«Ґ¬Ґвл «Ёбв Ё
®ўл© н«Ґ¬Ґв) а §ЎЁў Ґ¬ ¤ў «Ёбв Ї® n н«Ґ¬Ґв®ў Ё а §¤Ґ«п-
ойЁ© Ёе бҐаҐ¤Ёл© н«Ґ¬Ґв. ќв®в бҐаҐ¤Ёл© н«Ґ¬Ґв ¤® ¤®Ў -
ўЁвм ў ўҐаиЁг ЇаҐ¤л¤г饣® га®ўп. ќв® ў®§¬®¦®, Ґб«Ё ў Ґ© ¬Ґ-
ҐҐ 2n н«Ґ¬Ґв®ў. …б«Ё Ё ® Ї®« , в® ҐҐ а §ЎЁў ов ¤ўҐ, ўл-
¤Ґ«пов бҐаҐ¤Ёл© н«Ґ¬Ґв Ё в.¤. …б«Ё ў Є®жҐ Є®ж®ў ¬л § е®вЁ¬
¤®Ў ўЁвм н«Ґ¬Ґв ў Є®аҐм, ® ®Є ¦Ґвбп Ї®«л¬, в® Є®аҐм а б-
饯«пҐвбп ¤ўҐ ўҐаиЁл, ўлб®в ¤ҐаҐў 㢥«ЁзЁў Ґвбп 1.
“¤ «ҐЁҐ н«Ґ¬Ґв . “¤ «ҐЁҐ н«Ґ¬Ґв , 室п饬бп Ґ ў «Ёб-
вҐ, бў®¤Ёвбп Є г¤ «ҐЁо ҐЇ®б।б⢥® б«Ґ¤го饣® § Ё¬, Є®в®-
ал© е®¤Ёвбп ў «ЁбвҐ. Џ®н⮬㠤®бв в®з® гзЁвмбп г¤ «пвм н«Ґ-
¬Ґв Ё§ «Ёбв . …б«Ё «Ёбв ЇаЁ н⮬ бв ®ўЁвбп ҐЇ®«л¬, в® ҐЈ®
¬®¦® Ї®Ї®«Ёвм § бзҐв б®бҐ¤ҐЈ® «Ёбв - Ґб«Ё в®«мЄ® Ё ® Ґ
Ё¬ҐҐв ¬ЁЁ¬ «м® ў®§¬®¦л© а §¬Ґа n. …б«Ё ¦Ґ ®Ў «Ёбв Ё¬Ґов
а §¬Ґа n, в® Ёе ў¬Ґб⥠2n н«Ґ¬Ґв®ў, ў¬Ґб⥠б а §¤Ґ«ЁвҐ«Ґ¬ -
2n+1. Џ®б«Ґ г¤ «ҐЁп ®¤®Ј® н«Ґ¬Ґв ®бв Ґвбп 2n н«Ґ¬Ґв®ў - Є Є
а § ®¤Ё «Ёбв. …б«Ё ЇаЁ н⮬ ўҐаиЁ ЇаҐ¤л¤г饣® га®ўп бв -
®ўЁвбп ¬ҐмиҐ ®а¬л, Їа®жҐбб Ї®ўв®апҐвбп Ё в.¤.
12.2.7. ђҐ «Ё§®ў вм ®ЇЁб го б奬г еа ҐЁп ¬®¦Ґбвў, гЎҐ-
¤ЁўиЁбм, зв® ® в Є¦Ґ Ї®§ў®«пҐв ®Ў®©вЁбм C*log(n) ¤Ґ©бвўЁ© ¤«п
®ЇҐа жЁ© ўЄ«о票п, ЁбЄ«озҐЁп Ё Їа®ўҐаЄЁ ЇаЁ ¤«Ґ¦®бвЁ.
12.2.8. Њ®¦® ®ЇаҐ¤Ґ«пвм бЎ « бЁа®ў ®бвм ¤ҐаҐў Ё зҐ:
вॡ®ў вм, зв®Ўл ¤«п Є ¦¤®© ўҐаиЁл ҐҐ «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп
Ё¬Ґ«Ё Ґ б«ЁиЄ®¬ бЁ«м® ®в«Ёз ойЁҐбп Є®«ЁзҐбвў ўҐаиЁ. (ЏаҐЁ¬г-
йҐбвў® в Є®Ј® ®ЇаҐ¤Ґ«ҐЁп б®бв®Ёв ў ⮬, зв® ЇаЁ ўа 饨пе Ё§¬Ґ-
пҐвбп бЎ « бЁа®ў ®бвм в®«мЄ® ў ®¤®© ўҐаиЁҐ.) ђҐ «Ё§®ў вм
®б®ўҐ нв®© Ё¤ҐЁ бЇ®б®Ў еа ҐЁп ¬®¦Ґбвў, Ј а вЁагойЁ©
®жҐЄг ў C*log(n) ¤Ґ©бвўЁ© ¤«п ўЄ«о票п, г¤ «ҐЁп Ё Їа®ўҐаЄЁ
ЇаЁ ¤«Ґ¦®бвЁ. (“Є § ЁҐ. Ћ в Є¦Ґ ЁбЇ®«м§гҐв Ў®«миЁҐ Ё ¬ «лҐ
ўа 饨п. Џ®¤а®Ў®бвЁ б¬. ў ЄЁЈҐ ђҐ©Ј®«м¤ , ЌЁўҐаЈҐ«мв Ё „Ґ®
"Љ®¬ЎЁ в®алҐ «Ј®аЁв¬л".)
12.1. ЏаҐ¤бв ў«ҐЁҐ ¬®¦Ґбвў б Ї®¬®ймо ¤ҐаҐўмҐў.
Џ®«®Ґ ¤ў®Ёз®Ґ ¤ҐаҐў®. T-¤ҐаҐўмп.
Ќ аЁб㥬 в®зЄг. €§ ҐҐ Їа®ўҐ¤Ґ¬ ¤ўҐ бв५ЄЁ (ў«Ґў® ўўҐае Ё
ўЇа ў® ўўҐае) ў ¤ўҐ ¤агЈЁҐ в®зЄЁ. €§ Є ¦¤®© Ё§ нвЁе в®зҐЄ Їа®ўҐ-
¤Ґ¬ Ї® ¤ўҐ бв५ЄЁ Ё в Є ¤ «ҐҐ. Џ®«гзҐго Є авЁЄг (ў n-®¬ б«®Ґ
Ўг¤Ґв (2 ў б⥯ҐЁ (n - 1)) в®зҐЄ) §лў ов Ї®«л¬ ¤ў®Ёзл¬ ¤Ґ-
ॢ®¬. ЌЁ¦оо в®зЄг §лў ов Є®аҐ¬. “ Є ¦¤®© ўҐаиЁл Ґбвм ¤ў
бл (¤ўҐ ўҐаиЁл, ў Є®в®алҐ Ё¤гв бв५ЄЁ) - «Ґўл© Ё Їа ўл©. “
ўбпЄ®© ўҐаиЁл, Єа®¬Ґ Є®ап, Ґбвм Ґ¤ЁбвўҐл© ®вҐж.
Џгбвм ўлЎа ® ҐЄ®в®а®Ґ Є®Ґз®Ґ ¬®¦Ґбвў® ўҐаиЁ Ї®«®Ј®
¤ў®Ёз®Ј® ¤ҐаҐў , ᮤҐа¦ 饥 ў¬ҐбвҐ б Є ¦¤®© ўҐаиЁ®© Ё ўбҐе ҐҐ
ЇаҐ¤Є®ў. Џгбвм Є ¦¤®© ўҐаиЁҐ нв®Ј® ¬®¦Ґбвў ЇЁб ® § зҐ-
ЁҐ дЁЄбЁа®ў ®Ј® вЁЇ T (в® Ґбвм § ¤ ® ®в®Ўа ¦ҐЁҐ ¬®¦Ґбвў
ўҐаиЁ ў ¬®¦Ґбвў® § 票© вЁЇ T). ’®, зв® Ї®«гзЁвбп, Ўг¤Ґ¬
§лў вм T-¤ҐаҐў®¬. Њ®¦Ґбвў® ўбҐе T-¤ҐаҐўмҐў ®Ў®§ зЁ¬ Tree(T).
ђҐЄгабЁў®Ґ ®ЇаҐ¤Ґ«ҐЁҐ. ‚бпЄ®Ґ ҐЇгб⮥ T-¤ҐаҐў® а §ЎЁў -
Ґвбп ваЁ з бвЁ: Є®аҐм (ҐбгйЁ© Ї®¬ҐвЄг Ё§ T), «Ґў®Ґ Ё Їа ў®Ґ
Ї®¤¤ҐаҐўмп (Є®в®алҐ ¬®Јгв Ўлвм Ё Їгбвл¬Ё). ќв® а §ЎЁҐЁҐ гбв -
ў«Ёў Ґв ў§ Ё¬® ®¤®§ 箥 ᮮ⢥вбвўЁҐ ¬Ґ¦¤г ¬®¦Ґбвў®¬ Ґ-
Їгбвле T-¤ҐаҐўмҐў Ё Їа®Ё§ўҐ¤ҐЁҐ¬ T * Tree (T) * Tree (T). ЋЎ®§-
зЁў зҐаҐ§ empty Їгб⮥ ¤ҐаҐў®, ¬®¦® ЇЁб вм
Tree (T) = {empty} + T * Tree (T) * Tree (T).
Џ®¤¤ҐаҐўмп. ‚лб®в .
”ЁЄбЁа㥬 ҐЄ®в®а®Ґ T-¤ҐаҐў®. „«п Є ¦¤®© ҐЈ® ўҐаиЁл x ®Ї-
।Ґ«Ґ® ҐҐ «Ґў®Ґ Ї®¤¤ҐаҐў® («Ґўл© бл ўҐаиЁл x Ё ўбҐ ҐЈ® Ї®-
⮬ЄЁ), Їа ў®Ґ Ї®¤¤ҐаҐў® (Їа ўл© бл ўҐаиЁл x Ё ўбҐ ҐЈ® Ї®в®¬-
ЄЁ) Ё Ї®¤¤ҐаҐў® б Є®аҐ¬ ў x (ўҐаиЁ x Ё ўбҐ ҐҐ Ї®в®¬ЄЁ). ‹Ґў®Ґ
Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп ўҐаиЁл x ¬®Јгв Ўлвм Їгбвл¬Ё, Ї®¤¤ҐаҐў® б
Є®аҐ¬ ў x ўбҐЈ¤ ҐЇгбв® (ᮤҐа¦Ёв Ї® Єа ©Ґ© ¬ҐаҐ x). ‚лб®в®©
Ї®¤¤ҐаҐў Ўг¤Ґ¬ бзЁв вм ¬ ЄбЁ¬ «мго ¤«Ёг 楯Ё y[1]..y[n] ҐЈ®
ўҐаиЁ, ў Є®в®а®© y [i+1] - бл y [i] ¤«п ўбҐе i. (‚лб®в Їгбв®-
Ј® ¤ҐаҐў а ў г«о, ўлб®в ¤ҐаҐў Ё§ ®¤®Ј® Є®ап - Ґ¤ЁЁжҐ.)
“Ї®а冷зҐлҐ T-¤ҐаҐўмп.
Џгбвм ¬®¦Ґб⢥ § 票© вЁЇ T дЁЄбЁа®ў Ї®а冷Є. Ќ -
§®ўҐ¬ T-¤ҐаҐў® гЇ®а冷зҐл¬, Ґб«Ё ўлЇ®«Ґ® в Є®Ґ бў®©бвў®: ¤«п
«оЎ®© ўҐаиЁл x ўбҐ Ї®¬ҐвЄЁ ў ҐҐ «Ґў®¬ Ї®¤¤ҐаҐўҐ ¬ҐмиҐ Ї®¬ҐвЄЁ
ў x, ўбҐ Ї®¬ҐвЄЁ ў ҐҐ Їа ў®¬ Ї®¤¤ҐаҐўҐ Ў®«миҐ Ї®¬ҐвЄЁ ў x.
12.1.1. „®Є § вм, зв® ў гЇ®а冷祮¬ ¤ҐаҐўҐ ўбҐ Ї®¬ҐвЄЁ
а §«Ёзл.
“Є § ЁҐ. €¤гЄжЁп Ї® ўлб®вҐ ¤ҐаҐў .
ЏаҐ¤бв ў«ҐЁҐ ¬®¦Ґбвў б Ї®¬®ймо ¤ҐаҐўмҐў.
Љ ¦¤®Ґ ¤ҐаҐў® Ўг¤Ґ¬ бзЁв вм ЇаҐ¤бв ў«ҐЁҐ¬ ¬®¦Ґбвў ўбҐе
Ї®¬Ґв®Є ҐЈ® ўҐаиЁ е. ЏаЁ н⮬ ®¤® Ё в® ¦Ґ ¬®¦Ґбвў® ¬®¦Ґв
Ё¬Ґвм а §«ЁзлҐ ЇаҐ¤бв ў«ҐЁп.
Ѓ« Ј®¤ ап гЇ®а冷祮бвЁ Є ¦¤л© н«Ґ¬Ґв «ҐЈЄ® ¬®¦Ґв " ©вЁ
бў®Ґ ¬Ґбв®" ў ¤ҐаҐўҐ: ЇаЁ¤п ў Є Єго-в® ўҐаиЁг Ё ба ўЁў ᥡп б
⥬, Єв® в ¬ 室Ёвбп, н«Ґ¬Ґв аҐи Ґв, Ё¤вЁ Ґ¬г «Ґў® Ё«Ё Ї-
а ў®. Ќ з ў б Є®ап Ё ¤ўЁЈ пбм Ї® нв®¬г Їа ўЁ«г, ® «ЁЎ® ®Ў аг-
¦Ёв, зв® в Є®© н«Ґ¬Ґв 㦥 Ґбвм, «ЁЎ® ©¤Ґв ¬Ґбв®, ў Є®в®а®¬ ®
¤®«¦Ґ Ўлвм. ‚бо¤г ¤ «ҐҐ ¬л ЇаҐ¤Ї®« Ј Ґ¬, зв® § 票пе вЁЇ
T § ¤ Ї®а冷Є, Ё а бб¬ ваЁў Ґ¬ в®«мЄ® гЇ®а冷зҐлҐ ¤ҐаҐўмп.
•а ҐЁҐ ¤ҐаҐўмҐў ў Їа®Ја ¬¬Ґ.
Њ®¦® Ўл«® Ўл б®Ї®бв ўЁвм ўҐаиЁл Ї®«®Ј® ¤ў®Ёз®Ј® ¤ҐаҐў
б зЁб« ¬Ё 1, 2, 3,... (бзЁв п, зв® «Ґўл© бл (n) = 2n, Їа ўл©
бл (n) = 2n + 1) Ё еа Ёвм Ї®¬ҐвЄЁ ў ¬ ббЁўҐ val [1...]. Ћ¤ Є®
нв®в бЇ®б®Ў ҐнЄ®®¬Ґ, Ї®бЄ®«мЄг ва вЁвбп ¬Ґбв® еа ҐЁҐ
Їгбвле ў Є бЁ© ў Ї®«®¬ ¤ў®Ёз®¬ ¤ҐаҐўҐ.
Ѓ®«ҐҐ нЄ®®¬Ґ в Є®© бЇ®б®Ў. ‚ўҐ¤Ґ¬ ваЁ ¬ ббЁў
val: array [1..n] of T;
left, right: array [1..n] of 0..n;
(n - ¬ ЄбЁ¬ «м®Ґ ў®§¬®¦®Ґ зЁб«® ўҐаиЁ ¤ҐаҐў ) Ё ЇҐаҐ¬Ґго
root: 0..n. Љ ¦¤ п ўҐаиЁ еа Ё¬®Ј® T-¤ҐаҐў Ўг¤Ґв Ё¬Ґвм ®¬Ґа
- зЁб«® ®в 1 ¤® n. ђ §лҐ ўҐаиЁл Ўг¤гв Ё¬Ґвм а §лҐ ®¬Ґа . Џ®-
¬ҐвЄ ў ўҐаиЁҐ б ®¬Ґа®¬ x а ў val [x]. Љ®аҐм Ё¬ҐҐв ®¬Ґа
root. …б«Ё ўҐаиЁ б ®¬Ґа®¬ i Ё¬ҐҐв бл®ўҐ©, в® Ёе ®¬Ґа а ўл
left [i] Ё right [i]. ЋвбгвбвўгойЁ¬ бл®ўмп¬ б®®вўҐвбвўгҐв зЁб«®
0. Ђ «®ЈЁзл¬ ®Ўа §®¬ § 票Ґ root = 0 ᮮ⢥вбвўгҐв Їгб⮬г
¤ҐаҐўг.
„«п еа ҐЁп ¤ҐаҐў ЁбЇ®«м§гҐвбп «Ёим з бвм ¬ ббЁў ; ¤«п
вҐе i, Є®в®алҐ бў®Ў®¤л - в.Ґ. Ґ пў«повбп ®¬Ґа ¬Ё ўҐаиЁ -
§ 票п val [i] ЎҐ§а §«Ёзл. Ќ ¬ Ўг¤Ґв 㤮Ў®, зв®Ўл ўбҐ бў®-
Ў®¤лҐ зЁб« Ўл«Ё "бўп§ л ў бЇЁб®Є": ЇҐаў®Ґ еа Ёвбп ў бЇҐжЁ-
«м®Ґ ЇҐаҐ¬Ґ®© free: 0..n, б«Ґ¤го饥 § i бў®Ў®¤®Ґ зЁб«®
еа Ёвбп ў left [i], в Є зв® бў®Ў®¤л зЁб«
free, left [free], left [left[free]],...
„«п Ї®б«Ґ¤ҐЈ® бў®Ў®¤®Ј® зЁб« i § 票Ґ left [i] = 0. ђ -
ўҐбвў® free = 0 ®§ з Ґв, зв® бў®Ў®¤ле зЁбҐ« Ў®«миҐ Ґв. (‡ -
¬Ґз ЁҐ. Њл ЁбЇ®«м§®ў «Ё ¤«п бўп§лў Ёп бў®Ў®¤ле ўҐаиЁ ¬ ббЁў
left, ®, Є®Ґз®, б ⥬ ¦Ґ гᯥ宬 ¬®¦® Ўл«® ЁбЇ®«м§®ў вм ¬ б-
бЁў right.)
‚¬Ґбв® § 票п 0 (®Ў®§ з о饣® ®вбгвбвўЁҐ ўҐаиЁл) ¬®¦®
Ўл«® Ўл ў®бЇ®«м§®ў вмбп «оЎл¬ ¤агЈЁ¬ зЁб«®¬ ўҐ 1..n. —в®Ўл Ї®¤-
зҐаЄгвм нв®, Ўг¤Ґ¬ ў¬Ґбв® 0 ЁбЇ®«м§®ў вм Є®бв вг null = 0.
12.1.2. ‘®бв ўЁвм Їа®Ја ¬¬г, ®ЇаҐ¤Ґ«пойго, ᮤҐа¦Ёвбп «Ё
н«Ґ¬Ґв t: T ў гЇ®а冷祮¬ ¤ҐаҐўҐ (еа Ё¬®¬ в Є, Є Є в®«мЄ®
зв® ®ЇЁб ®).
ђҐиҐЁҐ.
if root = null then begin
| ..Ґ ЇаЁ ¤«Ґ¦Ёв
end else begin
| x := root;
| {Ёў аЁ в: ®бв Ґвбп Їа®ўҐаЁвм «ЁзЁҐ t ў ҐЇгб⮬ Ї®¤¤Ґ-
| ॢҐ б Є®аҐ¬ x}
| while ((t < val [x]) and (left [x] <> null)) or
| | ((t > val [x]) and (right [x] <> null)) do begin
| | if t < val [x] then begin {left [x] <> null}
| | | x := left [x];
| | end else begin {t > val [x], right [x] <> null}
| | | x := right [x];
| | end;
| end;
| {«ЁЎ® t = val [x], «ЁЎ® t ®вбгвбвўгҐв ў ¤ҐаҐўҐ}
| ..®вўҐв = (t = val [x])
end;
12.1.3. “Їа®бвЁвм аҐиҐЁҐ, ЁбЇ®«м§гп б«Ґ¤гойЁ© ваоЄ. ђ биЁ-
аЁ¬ ®Ў« бвм ®ЇаҐ¤Ґ«ҐЁп ¬ ббЁў val, ¤®Ў ўЁў п祩Єг б ®¬Ґа®¬
null Ё Ї®«®¦Ё¬ val [null] = t.
ђҐиҐЁҐ.
val [null] := t;
x := root;
while t <> val [x] do begin
| if t < val [x] then begin
| | x := left [x];
| end else begin
| | x := right [x];
| end;
end;
..®вўҐв: (x <> null).
12.1.4. ‘®бв ўЁвм Їа®Ја ¬¬г ¤®Ў ў«ҐЁп н«Ґ¬Ґв t ў ¬®-
¦Ґбвў®, ЇаҐ¤бв ў«Ґ®Ґ гЇ®а冷зҐл¬ ¤ҐаҐў®¬ (Ґб«Ё н«Ґ¬Ґв t 㦥
Ґбвм, ЁзҐЈ® ¤Ґ« вм Ґ ¤®).
ђҐиҐЁҐ. ЋЇаҐ¤Ґ«Ё¬ Їа®жҐ¤гаг get_free (var i: integer), ¤ -
ойго бў®Ў®¤®Ґ (Ґ пў«по饥бп ®¬Ґа®¬) зЁб«® i Ё ᮮ⢥вбвўгойЁ¬
®Ўа §®¬ Є®а४вЁагойго бЇЁб®Є бў®Ў®¤ле зЁбҐ«.
procedure get_free (var i: integer);
begin
| {free <> null}
| i := free;
| free := left [free];
end;
‘ ҐҐ ЁбЇ®«м§®ў ЁҐ¬ Їа®Ја ¬¬ ЇаЁ®ЎаҐв Ґв ўЁ¤:
if root = null then begin
| get_free (root);
| left [root] := null; right [root] := null;
| val [root] := t;
end else begin
| x := root;
| {Ёў аЁ в: ®бв «®бм ¤®Ў ўЁвм t Є ҐЇгб⮬㠯®¤¤ҐаҐўг б
| Є®аҐ¬ ў x}
| while ((t < val [x]) and (left [x] <> null)) or
| | ((t > val [x]) and (right [x] <> null)) do begin
| | if t < val [x] then begin
| | | x := left [x];
| | end else begin {t > val [x]}
| | | x := right [x];
| | end;
| end;
| if t <> val [x] then begin {t Ґв ў ¤ҐаҐўҐ}
| | get_free (i);
| | left [i] := null; right [i] := null;
| | val [i] := t;
| | if t < val [x] then begin
| | | left [x] := i;
| | end else begin {t > val [x]}
| | | right [x] := i;
| | end;
| end;
end;
12.1.5. ‘®бв ўЁвм Їа®Ја ¬¬г г¤ «ҐЁп н«Ґ¬Ґв t Ё§ ¬®-
¦Ґбвў , ЇаҐ¤бв ў«Ґ®Ј® гЇ®а冷зҐл¬ ¤ҐаҐў®¬ (Ґб«Ё ҐЈ® в ¬ Ґв,
ЁзҐЈ® ¤Ґ« вм Ґ ¤®).
ђҐиҐЁҐ.
if root = null then begin
| {¤ҐаҐў® Їгбв®, ЁзҐЈ® ¤Ґ« вм Ґ ¤®}
end else begin
| x := root;
| {®бв «®бм г¤ «Ёвм t Ё§ Ї®¤¤ҐаҐў б Є®аҐ¬ ў x; Ї®бЄ®«мЄг
| нв® ¬®¦Ґв Ї®вॡ®ў вм Ё§¬ҐҐЁ© ў ®вжҐ x, ўўҐ¤Ґ¬
| ЇҐаҐ¬ҐлҐ father: 1..n Ё direction: (l, r);
| Ї®¤¤Ґа¦Ёў Ґ¬ в Є®© Ёў аЁ в: Ґб«Ё x Ґ Є®аҐм, в® father
| - ҐЈ® ®вҐж, direction а ў® l Ё«Ё r ў § ўЁбЁ¬®бвЁ ®в
| в®Ј®, «Ґўл¬ Ё«Ё Їа ўл¬ б뮬 пў«пҐвбп x}
| while ((t < val [x]) and (left [x] <> null)) or
| | ((t > val [x]) and (right [x] <> null)) do begin
| | if t < val [x] then begin
| | | father := x; direction := l;
| | | x := left [x];
| | end else begin {t > val [x]}
| | | father := x; direction := r;
| | | x := right [x];
| | end;
| end;
| {t = val [x] Ё«Ё t Ґв ў ¤ҐаҐўҐ}
| if t = val [x] then begin
| | ..г¤ «ҐЁҐ ўҐаиЁл x б ®в殬 father Ё Їа ў«ҐЁҐ¬
| | direction
| end;
end;
“¤ «ҐЁҐ ўҐаиЁл x Їа®Ёб室Ёв Ї®-а §®¬г ў а §ле б«гз пе. ЏаЁ
н⮬ ЁбЇ®«м§гҐвбп Їа®жҐ¤га
procedure make_free (i: integer);
begin
| left [i] := free;
| free := i;
end;
® ўЄ«оз Ґв зЁб«® i ў бЇЁб®Є бў®Ў®¤ле. ђ §«Ёз овбп 4 б«гз п ў
§ ўЁбЁ¬®бвЁ ®в «ЁзЁп Ё«Ё ®вбгвбвўЁп бл®ўҐ© г г¤ «пҐ¬®© ўҐаиЁ-
л.
if (left [x] = null) and (right [x] = null) then begin
| {x - «Ёбв, в.Ґ. Ґ Ё¬ҐҐв бл®ўҐ©}
| make_free (x);
| if x = root then begin
| | root := null;
| end else if direction = l then begin
| | left [father] := null;
| end else begin {direction = r}
| | right [father] := null;
| end;
end else if (left[x]=null) and (right[x] <> null) then begin
| {x г¤ «пҐвбп, right [x] § Ё¬ Ґв ¬Ґбв® x}
| make_free (x);
| if x = root then begin
| | root := right [x];
| end else if direction = l then begin
| | left [father] := right [x];
| end else begin {direction = r}
| | right [father] := right [x];
| end;
end else if (left[x] <> null) and (right[x]=null) then begin
| ..бЁ¬¬ҐваЁз®
end else begin {left [x] <> null, right [x] <> null}
| ..г¤ «Ёвм ўҐаиЁг б ¤ўг¬п бл®ўмп¬Ё
end;
“¤ «ҐЁҐ ўҐаиЁл б ¤ўг¬п бл®ўмп¬Ё Ґ«м§п ᤥ« вм Їа®бв® в Є, ®
ҐҐ ¬®¦® ЇаҐ¤ў аЁвҐ«м® Ї®¬Ґпвм б ўҐаиЁ®©, Ї®¬ҐвЄ Є®в®а®©
пў«пҐвбп ҐЇ®б।б⢥® б«Ґ¤гойЁ¬ (ў Ї®ап¤ЄҐ ў®§а бв Ёп) н«Ґ-
¬Ґв®¬ § Ї®¬ҐвЄ®© x.
y := right [x];
father := x; direction := r;
{⥯Ґам father Ё direction ®в®бпвбп Є ўҐаиЁҐ y}
while left [y] <> null do begin
| father := y; direction := r;
| y := left [y];
end;
{val [y] - ¬ЁЁ¬ «м п Ё§ Ї®¬Ґв®Є, Ў®«миЁе val [x],
y Ґ Ё¬ҐҐв «Ґў®Ј® бл }
val [x] := val [y];
..г¤ «Ёвм ўҐаиЁг y (Є Є г¤ «пвм ўҐаиЁг, г Є®в®а®© Ґв «Ґ-
ў®Ј® бл , ¬л 㦥 § Ґ¬)
12.1.6. “Їа®бвЁвм Їа®Ја ¬¬г г¤ «ҐЁп, § ¬ҐвЁў, зв® ҐЄ®в®-
алҐ б«гз Ё ( ЇаЁ¬Ґа, ЇҐаўлҐ ¤ў Ё§ зҐвлаҐе) ¬®¦® ®ЎкҐ¤ЁЁвм.
12.1.7. €бЇ®«м§®ў вм гЇ®а冷зҐлҐ ¤ҐаҐўмп ¤«п ЇаҐ¤бв ў«Ґ-
Ёп дгЄжЁ©, ®Ў« бвм ®ЇаҐ¤Ґ«ҐЁп Є®в®але - Є®ҐзлҐ ¬®¦Ґбвў
§ 票© вЁЇ T, § зҐЁп Ё¬Ґов ҐЄ®в®ал© вЁЇ U. ЋЇҐа жЁЁ: ўл-
зЁб«ҐЁҐ § зҐЁп ¤ ®¬ аЈг¬ҐвҐ, Ё§¬ҐҐЁҐ § 票п
¤ ®¬ аЈг¬ҐвҐ, ¤®®ЇаҐ¤Ґ«ҐЁҐ дгЄжЁЁ ¤ ®¬ аЈг¬ҐвҐ,
ЁбЄ«о票Ґ н«Ґ¬Ґв Ё§ ®Ў« бвЁ ®ЇаҐ¤Ґ«ҐЁп дгЄжЁЁ.
ђҐиҐЁҐ. „Ґ« Ґ¬ Є Є а миҐ, ¤®Ў ўЁў ҐйҐ ®¤Ё ¬ ббЁў
func_val: array [1..n] of U;
Ґб«Ё val [x] = t, func_val [x] = u, в® § 票Ґ еа Ё¬®© дгЄжЁЁ
t а ў® u.
ЋжҐЄ Є®«ЁзҐбвў ¤Ґ©бвўЁ©.
„«п Є ¦¤®© Ё§ ®ЇҐа жЁ© (Їа®ўҐаЄЁ, ¤®Ў ў«ҐЁп Ё ЁбЄ«о票п)
Є®«ЁзҐбвў® ¤Ґ©бвўЁ© Ґ ЇаҐў®б室Ёв C * (ўлб®в ¤ҐаҐў ). „«п
"а®ў® Ї®¤бваЁ¦Ґ®Ј®" ¤ҐаҐў (Є®Ј¤ ўбҐ «Ёбвмп ®¤®© ўлб®вҐ)
ўлб®в Ї® Ї®ап¤Єг ўҐ«ЁзЁл а ў «®Ј аЁд¬г зЁб« ўҐаиЁ. Ћ¤ Є®
¤«п ЄаЁў®Ў®Є®Ј® ¤ҐаҐў ўбҐ ¬®¦Ґв Ўлвм Ј®а §¤® е㦥: ў Ёег¤иҐ¬
б«гз Ґ ўбҐ ўҐаиЁл ®Ўа §гов жҐЇм Ё ўлб®в а ў зЁб«г ўҐаиЁ.
’ Є б«гзЁвбп, Ґб«Ё н«Ґ¬Ґвл ¬®¦Ґбвў ¤®Ў ў«повбп ў ў®§а бв о饬
Ё«Ё гЎлў о饬 Ї®ап¤ЄҐ. Њ®¦® ¤®Є § вм, ®¤ Є®, зв® ЇаЁ ¤®Ў ў«Ґ-
ЁЁ н«Ґ¬Ґв®ў "ў б«гз ©®¬ Ї®ап¤ЄҐ" б।пп ўлб®в ¤ҐаҐў Ўг¤Ґв
Ґ Ў®«миҐ C * («®Ј аЁд¬ зЁб« ўҐаиЁ). …б«Ё нв®© ®жҐЄЁ "ў б।-
Ґ¬" ¬ «®, Ґ®Ўе®¤Ё¬л ¤®Ї®«ЁвҐ«млҐ ¤Ґ©бвўЁп Ї® Ї®¤¤Ґа¦ Ёо
"бЎ « бЁа®ў ®бвЁ" ¤ҐаҐў . ЋЎ н⮬ б¬. ў б«Ґ¤го饬 ЇгЄвҐ.
12.1.8. ЏаҐ¤Ї®«®¦Ё¬, зв® Ґ®Ўе®¤Ё¬® 㬥вм в Є¦Ґ ®влбЄЁў вм
k-л© н«Ґ¬Ґв ¬®¦Ґбвў (ў Ї®ап¤ЄҐ ў®§а бв Ёп), ЇаЁзҐ¬ Є®«Ё-
зҐбвў® ¤Ґ©бвўЁ© ¤®«¦® Ўлвм Ґ Ў®«ҐҐ C*(ўлб®в ¤ҐаҐў ). Љ Єго
¤®Ї®«ЁвҐ«мго Ёд®а¬ жЁо ¤® еа Ёвм ў ўҐаиЁ е ¤ҐаҐў ?
ђҐиҐЁҐ. ‚ Є ¦¤®© ўҐаиЁҐ Ўг¤Ґ¬ еа Ёвм зЁб«® ўбҐе ҐҐ Ї®-
⮬Є®ў. „®Ў ў«ҐЁҐ Ё ЁбЄ«о票Ґ ўҐаиЁл вॡгҐв Є®а४樨 «Ёим
ЇгвЁ ®в Є®ап Є нв®© ўҐаиЁҐ. ‚ Їа®жҐбᥠЇ®ЁбЄ k-®© ўҐаиЁл
Ї®¤¤Ґа¦Ёў Ґвбп в Є®© Ёў аЁ в: ЁбЄ®¬ п ўҐаиЁ пў«пҐвбп s-®©
ўҐаиЁ®© Ї®¤¤ҐаҐў б Є®аҐ¬ ў x (§¤Ґбм s Ё x - ЇҐаҐ¬ҐлҐ).)
12.2. ‘Ў « бЁа®ў лҐ ¤ҐаҐўмп.
„ҐаҐў® §лў Ґвбп бЎ « бЁа®ў л¬ (Ё«Ё Ђ‚‹-¤ҐаҐў®¬ ў зҐбвм
Ё§®ЎаҐв ⥫Ґ© нв®Ј® ¬Ґв®¤ ѓ.Њ.Ђ¤Ґ«мб® -‚Ґ«мбЄ®Ј® Ё ….Њ.‹ ¤Ё-
б ), Ґб«Ё ¤«п «оЎ®© ҐЈ® ўҐаиЁл ўлб®вл «Ґў®Ј® Ё Їа ў®Ј® Ї®¤¤Ґ-
ॢ쥢 нв®© ўҐаиЁл ®в«Ёз овбп Ґ Ў®«ҐҐ 祬 1. (‚ з бв®бвЁ,
Є®Ј¤ ®¤®Ј® Ё§ бл®ўҐ© Ґв, ¤агЈ®© - Ґб«Ё ® Ґбвм - ®Ўп§ Ўлвм
«Ёб⮬.)
12.2.1. Ќ ©вЁ ¬ЁЁ¬ «м®Ґ Ё ¬ ЄбЁ¬ «м®Ґ ў®§¬®¦®Ґ Є®«Ё-
зҐбвў® ўҐаиЁ ў бЎ « бЁа®ў ®¬ ¤ҐаҐўҐ ўлб®вл n.
ђҐиҐЁҐ. Њ ЄбЁ¬ «м®Ґ зЁб«® ўҐаиЁ а ў® (2 ў б⥯ҐЁ n) -
1. …б«Ё m (n) - ¬ЁЁ¬ «м®Ґ зЁб«® ўҐаиЁ, в®, Є Є «ҐЈЄ® ўЁ¤Ґвм,
m (n + 2) = 1 + m (n) + m (n+1),
®вЄг¤
m (n) = fib (n+1) - 1
(fib(n) - n-®Ґ зЁб«® ”ЁЎ® ззЁ, fib(0)=1, fib(1)=1, fib(n+2) =
fib(n) + fib(n+1)).
12.2.2. „®Є § вм, зв® бЎ « бЁа®ў ®Ґ ¤ҐаҐў® б n ўҐаиЁ ¬Ё
Ё¬ҐҐв ўлб®вг Ґ Ў®«миҐ C * (log n) ¤«п ҐЄ®в®а®© Є®бв вл C, Ґ
§ ўЁбп饩 ®в n.
ђҐиҐЁҐ. €¤гЄжЁҐ© Ї® n «ҐЈЄ® ¤®Є § вм, зв® fib [n+1] >= (a
ў б⥯ҐЁ n), Ј¤Ґ a - Ў®«миЁ© Є®аҐм Єў ¤а в®Ј® га ўҐЁп a*a =
1 + a, в® Ґбвм a = (sqrt(5) + 1)/2. Ћбв Ґвбп ў®бЇ®«м§®ў вмбп
ЇаҐ¤л¤г饩 § ¤ 祩.
‚а 饨п.
Њл е®вЁ¬ ў®ббв ў«Ёў вм бЎ « бЁа®ў ®бвм ¤ҐаҐў Ї®б«Ґ
ўЄ«озҐЁп Ё г¤ «ҐЁп н«Ґ¬Ґв®ў. „«п нв®Ј® Ґ®Ўе®¤Ё¬л Є ЄЁҐ-в®
ЇаҐ®Ўа §®ў Ёп ¤ҐаҐў , Ґ ¬ҐпойЁҐ ¬®¦Ґбвў Ї®¬Ґв®Є ҐЈ® ўҐа-
иЁ е Ё Ґ аги ойЁҐ гЇ®а冷祮бвЁ, ® бЇ®б®ЎбвўгойЁҐ «гз襩
бЎ « бЁа®ў ®бвЁ. ЋЇЁиҐ¬ ҐбЄ®«мЄ® в ЄЁе ЇаҐ®Ўа §®ў Ё©.
Џгбвм ўҐаиЁ a Ё¬ҐҐв Їа ў®Ј® бл b. ЋЎ®§ зЁ¬ зҐаҐ§ P «Ґ-
ў®Ґ Ї®¤¤ҐаҐў® ўҐаиЁл a, зҐаҐ§ Q Ё R - «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп
ўҐаиЁл b.
“Ї®а冷祮бвм ¤ҐаҐў вॡгҐв, зв®Ўл P < a < Q < b < R
(в®зҐҐ б«Ґ¤®ў «® Ўл бЄ § вм "«оЎ п Ї®¬ҐвЄ P ¬ҐмиҐ Ї®¬ҐвЄЁ
a", "Ї®¬ҐвЄ a ¬ҐмиҐ «оЎ®© Ї®¬ҐвЄЁ Q" Ё в.¤., ® ¬л
Ї®§ў®«Ё¬ ᥡҐ нв®Ј® Ґ ¤Ґ« вм). ’®з® в®Ј® ¦Ґ вॡгҐв гЇ®а冷-
祮бвм ¤ҐаҐў б Є®аҐ¬ b, ҐЈ® «Ґўл¬ б뮬 a, ў Є®в®а®¬ P Ё Q -
«Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп a, R - Їа ў®Ґ Ї®¤¤ҐаҐў® b. Џ®н⮬г
ЇҐаў®Ґ ¤ҐаҐў® ¬®¦® ЇаҐ®Ўа §®ў вм ў® ўв®а®Ґ, Ґ аги п гЇ®а冷-
祮бвЁ. ’ Є®Ґ ЇаҐ®Ўа §®ў ЁҐ §®ўҐ¬ ¬ «л¬ Їа ўл¬ ўа 饨Ґ¬
(Їа ўл¬ - Ї®бЄ®«мЄг бгйҐбвўгҐв бЁ¬¬ҐваЁз®Ґ, «Ґў®Ґ, ¬ «л¬ - Ї®б-
Є®«мЄг Ґбвм Ё Ў®«м讥, Є®в®а®Ґ ¬л ᥩз б ®ЇЁиҐ¬).
Џгбвм b - Їа ўл© бл a, c - «Ґўл© бл b, P -«Ґў®Ґ Ї®¤¤ҐаҐў®
a, Q Ё R -«Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп c, S - Їа ў®Ґ Ї®¤¤ҐаҐў® b.
’®Ј¤ P < a < Q < c < R < b < S.
’ Є®© ¦Ґ Ї®а冷Є ᮮ⢥вбвўгҐв ¤ҐаҐўг б Є®аҐ¬ c, Ё¬ҐойЁ¬ «Ґў®Ј®
бл a Ё Їа ў®Ј® бл b, ¤«п Є®в®а®Ј® P Ё Q - Ї®¤¤ҐаҐўмп ўҐаиЁл
a, R Ё S - Ї®¤¤ҐаҐўмп ўҐаиЁл b. ‘®®вўҐвбвўго饥 ЇаҐ®Ўа §®ў -
ЁҐ Ўг¤Ґ¬ §лў вм Ў®«миЁ¬ Їа ўл¬ ўа 饨Ґ¬. (Ђ «®ЈЁз® ®ЇаҐ¤Ґ-
«пҐвбп бЁ¬¬ҐваЁз®Ґ Ґ¬г Ў®«м讥 «Ґў®Ґ ўа 饨Ґ.)
12.2.3. „ ® ¤ҐаҐў®, бЎ « бЁа®ў ®Ґ ўбо¤г, Єа®¬Ґ Є®ап, ў
Є®в®а®¬ а §Ёж ўлб®в а ў 2 (в.Ґ. «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп
Є®ап бЎ « бЁа®ў л Ё Ёе ўлб®вл ®в«Ёз овбп 2). „®Є § вм, зв®
®® ¬®¦Ґв Ўлвм ЇаҐўа 饮 ў бЎ « бЁа®ў ®Ґ ®¤Ё¬ Ё§ зҐвлаҐе
®ЇЁб ле ЇаҐ®Ўа §®ў Ё©, ЇаЁзҐ¬ ўлб®в ҐЈ® ®бв Ґвбп ЇаҐ¦Ґ©
Ё«Ё 㬥миЁвбп 1.
ђҐиҐЁҐ. Џгбвм Ў®«ҐҐ Ё§ЄЁ¬ пў«пҐвбп, ЇаЁ¬Ґа, «Ґў®Ґ Ї®¤-
¤ҐаҐў®, Ё ҐЈ® ўлб®в а ў k. ’®Ј¤ ўлб®в Їа ў®Ј® Ї®¤¤ҐаҐў
а ў k+2. ЋЎ®§ зЁ¬ Є®аҐм зҐаҐ§ a, ҐЈ® Їа ў®Ј® бл (® ®Ўп-
§ вҐ«м® Ґбвм) зҐаҐ§ b. ђ бᬮваЁ¬ «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп
ўҐаиЁл b. Ћ¤® Ё§ Ёе ®Ўп§ вҐ«м® Ё¬ҐҐв ўлб®вг k+1, ¤агЈ®Ґ
¬®¦Ґв Ё¬Ґвм ўлб®вг k Ё«Ё k+1 (¬ҐмиҐ k Ўлвм Ґ ¬®¦Ґв, в Є Є Є
Ї®¤¤ҐаҐўмп бЎ « бЁа®ў л). …б«Ё ўлб®в «Ґў®Ј® Ї®¤¤ҐаҐў а ў
k+1, Їа ў®Ј® - k, ¤® Ї®вॡгҐвбп Ў®«м讥 Їа ў®Ґ ўа 饨Ґ; ў
®бв «мле б«гз пе Ї®¬®Ј Ґв ¬ «®Ґ.
------------------------------------
------------------------------------
------------------------------------
ўлб®в 㬥миЁ« бм 1
------------------------------------
------------------------------------
------------------------------------
ўлб®в Ґ Ё§¬ҐЁ« бм
k-1 Ё«Ё k (ў ®¤®¬ Ё§ б«гз Ґў k)
------------------------------------
------------------------------------
------------------------------------
ўлб®в 㬥миЁ« бм 1
’аЁ б«гз п Ў « бЁа®ўЄЁ ¤ҐаҐў .
12.2.4. ‚ бЎ « бЁа®ў ®Ґ ¤ҐаҐў® ¤®Ў ўЁ«Ё Ё«Ё Ё§ ҐЈ® г¤ -
«Ё«Ё «Ёбв. „®Є § вм, зв® ¬®¦® ў®ббв ®ўЁвм бЎ « бЁа®ў ®бвм б
Ї®¬®ймо ҐбЄ®«мЄЁе ўа 饨©, ЇаЁзҐ¬ Ёе зЁб«® Ґ Ў®«миҐ ўлб®вл
¤ҐаҐў .
ђҐиҐЁҐ. Ѓг¤Ґ¬ ¤®Є §лў вм Ў®«ҐҐ ®ЎйЁ© д Єв:
‹Ґ¬¬ . …б«Ё ў бЎ « бЁа®ў ®¬ ¤ҐаҐўҐ X ®¤® Ё§ ҐЈ® Ї®¤¤Ґ-
ॢ쥢 Y § ¬ҐЁ«Ё бЎ « бЁа®ў ®Ґ ¤ҐаҐў® Z, ЇаЁзҐ¬ ўлб®в Z
®в«Ёз Ґвбп ®в ўлб®вл Y Ґ Ў®«ҐҐ 祬 1, в® Ї®«г祮Ґ в Є®©
"ЇаЁўЁўЄ®©" ¤ҐаҐў® ¬®¦® ЇаҐўа вЁвм ў бЎ « бЁа®ў ®Ґ ўа 饨-
п¬Ё (ЇаЁзҐ¬ Є®«ЁзҐбвў® ўа 饨© Ґ ЇаҐў®б室Ёв ўлб®вл, Є®в®-
а®© ¤Ґ« Ґвбп ЇаЁўЁўЄ ).
— бвл¬ б«гз Ґ¬ ЇаЁўЁўЄЁ пў«пҐвбп § ¬Ґ Їгбв®Ј® Ї®¤¤ҐаҐў
«Ёбв Ё«Ё ®Ў®а®в, в Є зв® ¤®бв в®з® ¤®Є § вм нвг «Ґ¬¬г.
„®Є § ⥫мбвў® «Ґ¬¬л. €¤гЄжЁп Ї® ўлб®вҐ, Є®в®а®© ¤Ґ« -
Ґвбп ЇаЁўЁўЄ . …б«Ё ® Їа®Ёб室Ёв ў Є®аҐ (§ ¬ҐпҐвбп ўбҐ ¤ҐаҐ-
ў® 楫ЁЄ®¬), в® ўбҐ ®зҐўЁ¤® ("ЇаЁў®©" бЎ « бЁа®ў Ї® гб«®-
ўЁо). Џгбвм § ¬ҐпҐвбп ҐЄ®в®а®Ґ Ї®¤¤ҐаҐў®, ЇаЁ¬Ґа, «Ґў®Ґ Ї®¤-
¤ҐаҐў® ҐЄ®в®а®© ўҐаиЁл x. ‚®§¬®¦л ¤ў б«гз п.
(1) Џ®б«Ґ ЇаЁўЁўЄЁ бЎ « бЁа®ў ®бвм ў ўҐаиЁҐ x Ґ аг-
иЁ« бм (е®вп, ў®§¬®¦®, агиЁ« бм бЎ « бЁа®ў ®бвм ў ЇаҐ¤Є е
x: ўлб®в Ї®¤¤ҐаҐў б Є®аҐ¬ ў x ¬®Ј« Ё§¬ҐЁвмбп). ’®Ј¤ ¬®¦®
б®б« вмбп ЇаҐ¤Ї®«®¦ҐЁҐ Ё¤гЄжЁЁ, бзЁв п, зв® ¬л ЇаЁўЁў «Ё
楫ЁЄ®¬ Ї®¤¤ҐаҐў® б Є®аҐ¬ ў x.
(2) ‘Ў « бЁа®ў ®бвм ў x агиЁ« бм. ЏаЁ н⮬ а §Ёж ўл-
б®в а ў 2 (Ў®«миҐ ® Ўлвм Ґ ¬®¦Ґв, в Є Є Є ўлб®в Z ®в«Ёз -
Ґвбп ®в ўлб®вл Y Ґ Ў®«ҐҐ 祬 1). ђ §ЎҐаҐ¬ ¤ў ў аЁ в .
(2 ) ‚лиҐ Їа ў®Ґ (Ґ § ¬ҐпўиҐҐбп) Ї®¤¤ҐаҐў® ўҐаиЁл x.
Џгбвм ўлб®в «Ґў®Ј® (в.Ґ. Z) а ў k, Їа ў®Ј® - k+2. ‚лб®в бв -
а®Ј® «Ґў®Ј® Ї®¤¤ҐаҐў ўҐаиЁл x (в.Ґ. Y) Ўл« а ў k+1. Џ®¤¤Ґ-
ॢ® б Є®аҐ¬ x Ё¬Ґ«® ў Ёб室®¬ ¤ҐаҐўҐ ўлб®вг k+3, Ё нв ўлб®в
Ґ Ё§¬ҐЁ« бм Ї®б«Ґ ЇаЁўЁўЄЁ.
Џ® ЇаҐ¤л¤г饩 § ¤ зҐ ўа 饨Ґ ЇаҐ®Ўа §гҐв Ї®¤¤ҐаҐў® б Є®а-
Ґ¬ ў x ў бЎ « бЁа®ў ®Ґ Ї®¤¤ҐаҐў® ўлб®вл k+2 Ё«Ё k+3. ’® Ґбвм
ўлб®в Ї®¤¤ҐаҐў б Є®аҐ¬ x - ў ба ўҐЁЁ б ҐЈ® ЇаҐ¦Ґ© ўлб®в®©
- Ґ Ё§¬ҐЁ« бм Ё«Ё 㬥миЁ« бм 1, Ё ¬л ¬®¦Ґ¬ ў®бЇ®«м§®ў вмбп
ЇаҐ¤Ї®«®¦ҐЁҐ¬ Ё¤гЄжЁЁ.
------------- ----------------
------------- ----------------
-------------k ----------------k
2 2Ў
(2Ў) ‚лиҐ «Ґў®Ґ Ї®¤¤ҐаҐў® ўҐаиЁл x. Џгбвм ўлб®в «Ґў®Ј®
(в.Ґ. Z) а ў k+2, Їа ў®Ј® - k. ‚лб®в бв а®Ј® «Ґў®Ј® Ї®¤¤ҐаҐў
(в.Ґ. Y) Ўл« а ў k+1. Џ®¤¤ҐаҐў® б Є®аҐ¬ x ў Ёб室®¬ ¤ҐаҐўҐ
X Ё¬Ґ«® ўлб®вг k+2, Ї®б«Ґ ЇаЁўЁўЄЁ ® бв « а ў k+3. Џ®б«Ґ
Ї®¤е®¤п饣® ўа 饨п (б¬. ЇаҐ¤л¤гйго § ¤ зг) Ї®¤¤ҐаҐў® б Є®аҐ¬
ў x бв Ґв бЎ « бЁа®ў л¬, ҐЈ® ўлб®в Ўг¤Ґв а ў k+2 Ё«Ё k+3,
в Є зв® Ё§¬ҐҐЁҐ ўлб®вл Ї® ба ўҐЁо б ўлб®в®© Ї®¤¤ҐаҐў б Є®а-
Ґ¬ x ў ¤ҐаҐўҐ X Ґ ЇаҐў®б室Ёв 1 Ё ¬®¦® б®б« вмбп ЇаҐ¤Ї®«®-
¦ҐЁҐ Ё¤гЄжЁЁ.
12.2.5. ‘®бв ўЁвм Їа®Ја ¬¬л ¤®Ў ў«ҐЁп Ё г¤ «ҐЁп н«Ґ¬Ґ-
в®ў, б®еа пойЁҐ бЎ « бЁа®ў ®бвм. —Ёб«® ¤Ґ©бвўЁ© Ґ ¤®«¦®
ЇаҐў®б室Ёвм C*(ўлб®в ¤ҐаҐў ). ђ §аҐи Ґвбп еа Ёвм ў ўҐаиЁ е
¤ҐаҐў ¤®Ї®«ЁвҐ«мго Ёд®а¬ жЁо, Ґ®Ўе®¤Ё¬го ЇаЁ Ў « бЁа®ўЄҐ.
ђҐиҐЁҐ. Ѓг¤Ґ¬ еа Ёвм ¤«п Є ¦¤®© ўҐаиЁл а §Ёжг ¬Ґ¦¤г
ўлб®в®© ҐҐ Їа ў®Ј® Ё «Ґў®Ј® Ї®¤¤ҐаҐўмҐў:
diff [i] = (ўлб®в Їа ў®Ј® Ї®¤¤ҐаҐў ўҐаиЁл б ®¬Ґа®¬ i) -
(ўлб®в «Ґў®Ј® Ї®¤¤ҐаҐў ўҐаиЁл б ®¬Ґа®¬ i).
Ќ ¬ Ї®вॡговбп зҐвлॠЇа®жҐ¤гал, ᮮ⢥вбвўгойЁҐ Ў®«миЁ¬ Ё ¬ -
«л¬ Їа ўл¬ Ё «Ґўл¬ ўа 饨ﬨ. Ќ® ў з «Ґ ¤ў § ¬Ґз Ёп.
(1) Ќ ¬ 㦮, зв®Ўл ЇаЁ ўа 饨Ё Ї®¤¤ҐаҐў ®¬Ґа ҐЈ® Є®ап
Ґ ¬Ґп«бп. (‚ Їа®вЁў®¬ б«гз Ґ Ї®вॡ®ў «®бм Ўл Є®а४вЁа®ў вм
Ёд®а¬ жЁо ў ®вжҐ Є®ап, зв® Ґ¦Ґ« ⥫м®.) ќв®Ј® ¬®¦® ¤®бвЁзм,
в Є Є Є ®¬Ґа ўҐаиЁ ¤ҐаҐў ¬®¦® ўлЎЁа вм Ґ§ ўЁбЁ¬® ®в Ёе
§ 票©. (Ќ Є авЁЄ е ®¬Ґа гЄ § бЎ®Єг ®в ўҐаиЁл, § зҐ-
ЁҐ - ўгваЁ.)
Њ «®Ґ Їа ў®Ґ ўа 饨Ґ
Ѓ®«м讥 Їа ў®Ґ ўа 饨Ґ
(2) Џ®б«Ґ ЇаҐ®Ўа §®ў Ё© ¬л ¤®«¦л в Є¦Ґ Ё§¬ҐЁвм б®®в-
ўҐвб⢥® § зҐЁп ў ¬ ббЁўҐ diff. „«п нв®Ј® ¤®бв в®з® § вм
ўлб®вл ¤ҐаҐўмҐў P, Q, ... б в®з®бвмо ¤® Є®бв вл, Ї®н⮬㠬®¦-
® ЇаҐ¤Ї®« Ј вм, зв® ®¤ Ё§ ўлб®в а ў г«о.
‚®в Їа®жҐ¤гал ўа 饨©:
procedure SR (a:integer); {¬ «®Ґ Їа ў®Ґ ўа 饨Ґ б Є®аҐ¬ a}
| var b: 1..n; val_a,val_b: T; h_P,h_Q,h_R: integer;
begin
| b := right [a]; {b <> null}
| val_a := val [a]; val_b := val [b];
| h_Q := 0; h_R := diff[b]; h_P := (max(h_Q,h_R)+1)-diff[a];
| val [a] := val_b; val [b] := val_a;
| right [a] := right [b] {Ї®¤¤ҐаҐў® R}
| right [b] := left [b] {Ї®¤¤ҐаҐў® Q}
| left [b] := left [a] {Ї®¤¤ҐаҐў® P}
| left [a] := b;
| diff [b] := h_Q - h_P;
| diff [a] := h_R - (max (h_P, h_Q) + 1);
end;
procedure BR (a:integer);{Ў®«м讥 Їа ў®Ґ ўа 饨Ґ б Є®аҐ¬ a}
| var b,c: 1..n; val_a,val_b,val_c: T;
| h_P,h_Q,h_R,h_S: integer;
begin
| b := right [a]; c := left [b]; {b,c <> null}
| val_a := val [a]; val_b := val [b]; val_c := val [c];
| h_Q := 0; h_R := diff[c]; h_S := (max(h_Q,h_R)+1)+diff[b];
| h_P := 1 + max (h_S, h_S-diff[b]) - diff [a];
| val [a] := val_c; val [c] := val_a;
| left [b] := right [c] {Ї®¤¤ҐаҐў® R}
| right [c] := left [c] {Ї®¤¤ҐаҐў® Q}
| left [c] := left [a] {Ї®¤¤ҐаҐў® P}
| left [a] := c;
| diff [b] := h_S - h_R;
| diff [c] := h_Q - h_P;
| diff [a] := max (h_S, h_R) - max (h_P, h_Q);
end;
‹ҐўлҐ ўа 饨п (Ў®«м讥 Ё ¬ «®Ґ) § ЇЁблў овбп бЁ¬¬ҐваЁз®.
Џа®жҐ¤гал ¤®Ў ў«ҐЁп Ё г¤ «ҐЁп н«Ґ¬Ґв®ў ЇЁигвбп Є Є
а миҐ, ® в®«мЄ® ¤®Ў ў«ҐЁҐ Ё г¤ «ҐЁҐ ¤®«¦® б®Їа®ў®¦¤ вмбп
Є®а४樥© ¬ ббЁў diff Ё ў®ббв ®ў«ҐЁҐ¬ бЎ « бЁа®ў ®бвЁ.
ЏаЁ н⮬ ЁбЇ®«м§гҐвбп Їа®жҐ¤га б в ЄЁ¬Ё бў®©бвў ¬Ё:
¤ ®: «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп ўҐаиЁл б ®¬Ґа®¬ a бЎ « -
бЁа®ў л, ў б ¬®© ўҐаиЁҐ а §Ёж ўлб®в Ґ Ў®«миҐ 2, ў
Ї®¤¤ҐаҐўҐ б Є®аҐ¬ a ¬ ббЁў diff § Ї®«Ґ Їа ўЁ«м®;
¤®: Ї®¤¤ҐаҐў® б Є®аҐ¬ a бЎ « бЁа®ў ® Ё ¬ ббЁў diff б®-
®вўҐвб⢥® Ё§¬ҐҐ, d - Ё§¬ҐҐЁҐ ҐЈ® ўлб®вл (а ў® 0
Ё«Ё -1); ў ®бв «м®© з бвЁ ўбҐ ®бв «®бм Є Є Ўл«®}
procedure balance (a: integer; var d: integer);
begin {-2 <= diff[a] <= 2}
| if diff [a] = 2 then begin
| | b := right [a];
| | if diff [b] = -1 then begin
| | | BR (a); d := -1;
| | end else if diff [b] = 0 then begin
| | | SR (a); d := 0;
| | end else begin {diff [b] = 1}
| | | SR (a); d := - 1;
| | end;
| end else if diff [a] = -2 then begin
| | b := left [a];
| | if diff [b] = 1 then begin
| | | BL (a); d := -1;
| | end else if diff [b] = 0 then begin
| | | SL (a); d := 0;
| | end else begin {diff [b] = -1}
| | | SL (a); d := - 1;
| | end;
| end else begin {-2 < diff [a] < 2, ЁзҐЈ® ¤Ґ« вм Ґ ¤®}
| | d := 0;
| end;
end;
‚®ббв ®ў«ҐЁҐ бЎ « бЁа®ў ®бвЁ вॡгҐв ¤ўЁ¦ҐЁп ®в
«Ёбв쥢 Є Є®ао, Ї®н⮬㠡㤥¬ еа Ёвм ў б⥪Ґ Їгвм ®в Є®ап Є
а бб¬ ваЁў Ґ¬®© ў ¤ л© ¬®¬Ґв ўҐаиЁҐ. ќ«Ґ¬Ґв ¬Ё б⥪ Ўг¤гв
Ї ал (ўҐаиЁ , Їа ў«ҐЁҐ ¤ўЁ¦ҐЁп Ё§ ҐҐ), в.Ґ. § 票п вЁЇ
record
| vert: 1..n; {ўҐаиЁ }
| direction : (l, r); {l - «Ґў®Ґ, r- Їа ў®Ґ}
end;
Џа®Ја ¬¬ ¤®Ў ў«ҐЁп н«Ґ¬Ґв t ⥯Ґам ўлЈ«п¤Ёв в Є:
if root = null then begin
| get_free (root);
| left [root] := null; right [root] := null; diff[root] := 0;
| val [root] := t;
end else begin
| x := root; ..ᤥ« вм б⥪ Їгбвл¬
| {Ёў аЁ в: ®бв «®бм ¤®Ў ўЁвм t Є ҐЇгб⮬㠯®¤¤ҐаҐўг б
| Є®аҐ¬ ў x; б⥪ ᮤҐа¦Ёв Їгвм Є x}
| while ((t < val [x]) and (left [x] <> null)) or
| | ((t > val [x]) and (right [x] <> null)) do begin
| | if t < val [x] then begin
| | | ..¤®Ў ўЁвм ў б⥪ Ї аг <x, l>
| | | x := left [x];
| | end else begin {t > val [x]}
| | | ..¤®Ў ўЁвм ў б⥪ Ї аг <x, r>
| | | x := right [x];
| | end;
| end;
| if t <> val [x] then begin {t Ґв ў ¤ҐаҐўҐ}
| | get_free (i); val [i] := t;
| | left [i] := null; right [i] := null; diff [i] := 0;
| | if t < val [x] then begin
| | | ..¤®Ў ўЁвм ў б⥪ Ї аг <x, l>
| | | left [x] := i;
| | end else begin {t > val [x]}
| | | ..¤®Ў ўЁвм ў б⥪ Ї аг <x, r>
| | | right [x] := i;
| | end;
| | d := 1;
| | {Ёў аЁ в: б⥪ ᮤҐа¦Ёв Їгвм Є Ё§¬ҐЁўиҐ¬гбп Ї®¤¤ҐаҐўг,
| | ўлб®в Є®в®а®Ј® 㢥«ЁзЁ« бм Ї® ба ўҐЁо б ўлб®в®© ў
| | Ёб室®¬ ¤ҐаҐўҐ d (=0 Ё«Ё 1); нв® Ї®¤¤ҐаҐў® бЎ « -
| | бЁа®ў ®; § 票п diff ¤«п ҐЈ® ўҐаиЁ Їа ўЁ«мл; ў ®б-
| | ⠫쮬 ¤ҐаҐўҐ ўбҐ ®бв «®бм Є Є Ўл«® - ў з бв®бвЁ,
| | § 票п diff}
| | while (d <> 0) and ..б⥪ ҐЇгбв do begin {d = 1}
| | | ..ў§пвм Ё§ б⥪ Ї аг ў <v, direct>
| | | if direct = l then begin
| | | | if diff [v] = 1 then begin
| | | | | c := 0;
| | | | end else begin
| | | | | c := 1;
| | | | end;
| | | | diff [v] := diff [v] - 1;
| | | end else begin {direct = r}
| | | | if diff [v] = -1 then begin
| | | | | c := 0;
| | | | end else begin
| | | | | c := 1;
| | | | end;
| | | | diff [v] := diff [v] + 1;
| | | end;
| | | {c = Ё§¬ҐҐЁҐ ўлб®вл Ї®¤¤ҐаҐў б Є®аҐ¬ ў v Ї® ба ўҐ-
| | | Ёо б Ёбе®¤л¬ ¤ҐаҐў®¬; ¬ ббЁў diff ᮤҐа¦Ёв Їа ўЁ«м-
| | | лҐ § зҐЁп ¤«п нв®Ј® Ї®¤¤ҐаҐў ; ў®§¬®¦® аг襨Ґ
| | | бЎ « бЁа®ў ®бвЁ ў v}
| | | balance (v, d1); d := c + d1;
| | end;
| end;
end;
‹ҐЈЄ® Їа®ўҐаЁвм, зв® § 票Ґ d ¬®¦Ґв Ўлвм а ў® в®«мЄ® 0 Ё«Ё 1
(® Ґ -1): Ґб«Ё c = 0, в® diff [v] = 0 Ё Ў « бЁа®ўЄ Ґ Їа®Ё§-
ў®¤Ёвбп.
Џа®Ја ¬¬ г¤ «ҐЁп бва®Ёвбп «®ЈЁз®. …Ґ ®б®ў®© да Ј-
¬Ґв в Є®ў:
{Ёў аЁ в: б⥪ ᮤҐа¦Ёв Їгвм Є Ё§¬ҐЁўиҐ¬гбп Ї®¤¤ҐаҐўг,
ўлб®в Є®в®а®Ј® Ё§¬ҐЁ« бм Ї® ба ўҐЁо б ўлб®в®© ў
Ёб室®¬ ¤ҐаҐўҐ d (=0 Ё«Ё -1); нв® Ї®¤¤ҐаҐў®
бЎ « бЁа®ў ®; § 票п diff ¤«п ҐЈ® ўҐаиЁ Їа ўЁ«мл;
ў ®б⠫쮬 ¤ҐаҐўҐ ўбҐ ®бв «®бм Є Є Ўл«® -
ў з бв®бвЁ, § 票п diff}
while (d <> 0) and ..б⥪ ҐЇгбв do begin
| {d = -1}
| ..ў§пвм Ё§ б⥪ Ї аг ў <v, direct>
| if direct = l then begin
| | if diff [v] = -1 then begin
| | | c := -1;
| | end else begin
| | | c := 0;
| | end;
| | diff [v] := diff [v] + 1;
| end else begin {direct = r}
| | if diff [v] = 1 then begin
| | | c := -1;
| | end else begin
| | | c := 0;
| | end;
| | diff [v] := diff [v] - 1;
| end;
| {c = Ё§¬ҐҐЁҐ ўлб®вл Ї®¤¤ҐаҐў б Є®аҐ¬ ў v Ї® ба ў-
| ҐЁо б Ёбе®¤л¬ ¤ҐаҐў®¬; ¬ ббЁў diff ᮤҐа¦Ёв
| Їа ўЁ«млҐ § зҐЁп ¤«п нв®Ј® Ї®¤¤ҐаҐў ;
| ў®§¬®¦® аг襨Ґ бЎ « бЁа®ў ®бвЁ ў v}
| balance (v, d1);
| d := c + d1;
end;
‹ҐЈЄ® Їа®ўҐаЁвм, зв® § 票Ґ d ¬®¦Ґв Ўлвм а ў® в®«мЄ® 0 Ё«Ё -1
(® Ґ -2): Ґб«Ё c = -1, в® diff [v] = 0 Ё Ў « бЁа®ўЄ Ґ Їа®-
Ё§ў®¤Ёвбп.
Ћв¬ҐвЁ¬ в Є¦Ґ, зв® «ЁзЁҐ б⥪ ¤Ґ« Ґв Ё§«ЁиЁ¬Ё ЇҐаҐ¬Ґ-
лҐ father Ё direction (Ёе а®«м ⥯Ґам ЁЈа Ґв ўҐаиЁ б⥪ ).
12.2.6. „®Є § вм, зв® ЇаЁ ¤®Ў ў«ҐЁЁ н«Ґ¬Ґв
( ) ўв®а®© Ё§ ваҐе б«гз Ґў Ў « бЁа®ўЄЁ (б¬. аЁбг®Є ўлиҐ)
Ґў®§¬®¦Ґ;
(Ў) Ї®« п Ў « бЁа®ўЄ вॡгҐв Ґ Ў®«ҐҐ ®¤®Ј® ўа 饨п
(Ї®б«Ґ 祣® ўбҐ ¤ҐаҐў® бв ®ўЁвбп бЎ « бЁа®ў л¬),
ў в® ўаҐ¬п Є Є ЇаЁ г¤ «ҐЁЁ н«Ґ¬Ґв ¬®¦Ґв Ї® ¤®ЎЁвмбп
¬®Ј® ўа 饨©.
‡ ¬Ґз ЁҐ. Њл бв а «Ёбм § ЇЁб вм Їа®Ја ¬¬л ¤®Ў ў«ҐЁп Ё
г¤ «ҐЁп в Є, зв®Ўл ®Ё Ўл«Ё Є Є ¬®¦® Ў®«ҐҐ Ї®е®¦Ё¬Ё ¤агЈ
¤агЈ . €бЇ®«м§гп бЇҐжЁдЁЄг Є ¦¤®© Ё§ Ёе, ¬®¦® ¬®Ј®Ґ гЇа®б-
вЁвм.
‘гйҐбвўгов Ё ¤агЈЁҐ бЇ®б®Ўл ЇаҐ¤бв ў«ҐЁп ¬®¦Ґбвў, Ј а -
вЁагойЁҐ зЁб«® ¤Ґ©бвўЁ© Ї®ап¤Є log n Є ¦¤го ®ЇҐа жЁо. ЋЇЁиҐ¬
®¤Ё Ё§ Ёе ( §лў Ґ¬л© Ѓ-¤ҐаҐўмп¬Ё).
„® бЁе Ї®а Є ¦¤ п ўҐаиЁ б®¤Ґа¦ « ®¤Ё н«Ґ¬Ґв еа Ё¬®Ј®
¬®¦Ґбвў . ќв®в н«Ґ¬Ґв б«г¦Ё« Ја ЁжҐ© ¬Ґ¦¤г «Ґўл¬ Ё Їа ўл¬
Ї®¤¤ҐаҐў®¬. Ѓг¤Ґ¬ ⥯Ґам еа Ёвм ў ўҐаиЁҐ k >= 1 н«Ґ¬Ґв®ў ¬®-
¦Ґбвў (зЁб«® k ¬®¦Ґв ¬Ґпвмбп ®в ўҐаиЁл Є ўҐаиЁҐ, в Є¦Ґ ЇаЁ
¤®Ў ў«ҐЁЁ Ё г¤ «ҐЁЁ ®ўле н«Ґ¬Ґв®ў, б¬. ¤ «ҐҐ). ќвЁ k н«Ґ¬Ґ-
в®ў б«г¦ в а §¤Ґ«ЁвҐ«п¬Ё ¤«п k+1 Ї®¤¤ҐаҐў . Џгбвм дЁЄбЁа®ў ®
ҐЄ®в®а®Ґ зЁб«® n >= 1. Ѓг¤Ґ¬ а бб¬ ваЁў вм ¤ҐаҐўмп, ®Ў« ¤ ойЁҐ
в ЄЁ¬Ё бў®©бвў ¬Ё:
(1) Љ ¦¤ п ўҐаиЁ б®¤Ґа¦Ёв ®в n ¤® 2n н«Ґ¬Ґв®ў (§ ЁбЄ«о-
票Ґ¬ Є®ап, Є®в®ал© ¬®¦Ґв ᮤҐа¦ вм «оЎ®Ґ зЁб«® н«Ґ¬Ґв®ў ®в 0
¤® 2n).
(2) ‚ҐаиЁ б k н«Ґ¬Ґв ¬Ё «ЁЎ® Ё¬ҐҐв k+1 бл , «ЁЎ® Ґ
Ё¬ҐҐв бл®ўҐ© ў®®ЎйҐ (в ЄЁҐ ўҐаиЁл §лў овбп «Ёбвмп¬Ё).
(3) ‚ᥠ«Ёбвмп 室пвбп ®¤®© Ё в®© ¦Ґ ўлб®вҐ.
„®Ў ў«ҐЁҐ н«Ґ¬Ґв Їа®Ёб室Ёв в Є. …б«Ё «Ёбв, ў Є®в®ал© ®
Ї®Ї ¤ Ґв, ҐЇ®«® (в.Ґ. ᮤҐа¦Ёв ¬ҐҐҐ 2n н«Ґ¬Ґв®ў), в® Ґв
Їа®Ў«Ґ¬. …б«Ё ® Ї®«®, в® 2n+1 н«Ґ¬Ґв (ўбҐ н«Ґ¬Ґвл «Ёбв Ё
®ўл© н«Ґ¬Ґв) а §ЎЁў Ґ¬ ¤ў «Ёбв Ї® n н«Ґ¬Ґв®ў Ё а §¤Ґ«п-
ойЁ© Ёе бҐаҐ¤Ёл© н«Ґ¬Ґв. ќв®в бҐаҐ¤Ёл© н«Ґ¬Ґв ¤® ¤®Ў -
ўЁвм ў ўҐаиЁг ЇаҐ¤л¤г饣® га®ўп. ќв® ў®§¬®¦®, Ґб«Ё ў Ґ© ¬Ґ-
ҐҐ 2n н«Ґ¬Ґв®ў. …б«Ё Ё ® Ї®« , в® ҐҐ а §ЎЁў ов ¤ўҐ, ўл-
¤Ґ«пов бҐаҐ¤Ёл© н«Ґ¬Ґв Ё в.¤. …б«Ё ў Є®жҐ Є®ж®ў ¬л § е®вЁ¬
¤®Ў ўЁвм н«Ґ¬Ґв ў Є®аҐм, ® ®Є ¦Ґвбп Ї®«л¬, в® Є®аҐм а б-
饯«пҐвбп ¤ўҐ ўҐаиЁл, ўлб®в ¤ҐаҐў 㢥«ЁзЁў Ґвбп 1.
“¤ «ҐЁҐ н«Ґ¬Ґв . “¤ «ҐЁҐ н«Ґ¬Ґв , 室п饬бп Ґ ў «Ёб-
вҐ, бў®¤Ёвбп Є г¤ «ҐЁо ҐЇ®б।б⢥® б«Ґ¤го饣® § Ё¬, Є®в®-
ал© е®¤Ёвбп ў «ЁбвҐ. Џ®н⮬㠤®бв в®з® гзЁвмбп г¤ «пвм н«Ґ-
¬Ґв Ё§ «Ёбв . …б«Ё «Ёбв ЇаЁ н⮬ бв ®ўЁвбп ҐЇ®«л¬, в® ҐЈ®
¬®¦® Ї®Ї®«Ёвм § бзҐв б®бҐ¤ҐЈ® «Ёбв - Ґб«Ё в®«мЄ® Ё ® Ґ
Ё¬ҐҐв ¬ЁЁ¬ «м® ў®§¬®¦л© а §¬Ґа n. …б«Ё ¦Ґ ®Ў «Ёбв Ё¬Ґов
а §¬Ґа n, в® Ёе ў¬Ґб⥠2n н«Ґ¬Ґв®ў, ў¬Ґб⥠б а §¤Ґ«ЁвҐ«Ґ¬ -
2n+1. Џ®б«Ґ г¤ «ҐЁп ®¤®Ј® н«Ґ¬Ґв ®бв Ґвбп 2n н«Ґ¬Ґв®ў - Є Є
а § ®¤Ё «Ёбв. …б«Ё ЇаЁ н⮬ ўҐаиЁ ЇаҐ¤л¤г饣® га®ўп бв -
®ўЁвбп ¬ҐмиҐ ®а¬л, Їа®жҐбб Ї®ўв®апҐвбп Ё в.¤.
12.2.7. ђҐ «Ё§®ў вм ®ЇЁб го б奬г еа ҐЁп ¬®¦Ґбвў, гЎҐ-
¤ЁўиЁбм, зв® ® в Є¦Ґ Ї®§ў®«пҐв ®Ў®©вЁбм C*log(n) ¤Ґ©бвўЁ© ¤«п
®ЇҐа жЁ© ўЄ«о票п, ЁбЄ«озҐЁп Ё Їа®ўҐаЄЁ ЇаЁ ¤«Ґ¦®бвЁ.
12.2.8. Њ®¦® ®ЇаҐ¤Ґ«пвм бЎ « бЁа®ў ®бвм ¤ҐаҐў Ё зҐ:
вॡ®ў вм, зв®Ўл ¤«п Є ¦¤®© ўҐаиЁл ҐҐ «Ґў®Ґ Ё Їа ў®Ґ Ї®¤¤ҐаҐўмп
Ё¬Ґ«Ё Ґ б«ЁиЄ®¬ бЁ«м® ®в«Ёз ойЁҐбп Є®«ЁзҐбвў ўҐаиЁ. (ЏаҐЁ¬г-
йҐбвў® в Є®Ј® ®ЇаҐ¤Ґ«ҐЁп б®бв®Ёв ў ⮬, зв® ЇаЁ ўа 饨пе Ё§¬Ґ-
пҐвбп бЎ « бЁа®ў ®бвм в®«мЄ® ў ®¤®© ўҐаиЁҐ.) ђҐ «Ё§®ў вм
®б®ўҐ нв®© Ё¤ҐЁ бЇ®б®Ў еа ҐЁп ¬®¦Ґбвў, Ј а вЁагойЁ©
®жҐЄг ў C*log(n) ¤Ґ©бвўЁ© ¤«п ўЄ«о票п, г¤ «ҐЁп Ё Їа®ўҐаЄЁ
ЇаЁ ¤«Ґ¦®бвЁ. (“Є § ЁҐ. Ћ в Є¦Ґ ЁбЇ®«м§гҐв Ў®«миЁҐ Ё ¬ «лҐ
ўа 饨п. Џ®¤а®Ў®бвЁ б¬. ў ЄЁЈҐ ђҐ©Ј®«м¤ , ЌЁўҐаЈҐ«мв Ё „Ґ®
"Љ®¬ЎЁ в®алҐ «Ј®аЁв¬л".)
Соседние файлы в папке Шень