Добавил:
bagiwow
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
ѓ« ў 7. ђҐЄгабЁп
7.1. ЏаЁ¬Ґал ४габЁўле Їа®Ја ¬¬.
ЏаЁ «Ё§Ґ ४габЁў®© Їа®Ја ¬¬л ў®§ЁЄ Ґв, Є Є ®Ўлз®, ¤ў
ў®Їа®б :
( ) Ї®зҐ¬г Їа®Ја ¬¬ § Є зЁў Ґв а Ў®вг?
(Ў) Ї®зҐ¬г ® а Ў®в Ґв Їа ўЁ«м®, Ґб«Ё § Є зЁў Ґв
а Ў®вг?
„«п (Ў) ¤®бв в®з® Їа®ўҐаЁвм, зв® (ᮤҐа¦ й п ४габЁўл©
ўл§®ў) Їа®Ја ¬¬ а Ў®в Ґв Їа ўЁ«м®, ЇаҐ¤Ї®«®¦Ёў, зв® ўл§лў Ґ¬ п
Ґо ®¤®Ё¬Ґ п Їа®Ја ¬¬ а Ў®в Ґв Їа ўЁ«м®. ‚ б ¬®¬ ¤Ґ«Ґ, ў
н⮬ б«гз Ґ ў 楯®зЄҐ ४габЁў® ўл§лў Ґ¬ле Їа®Ја ¬¬ ўбҐ Їа®Ј-
а ¬¬л а Ў®в ов Їа ўЁ«м® (гЎҐ¦¤ Ґ¬бп ў н⮬, Ё¤п ®в Є®ж 楯®з-
ЄЁ Є з «г).
—в®Ўл ¤®Є § вм ( ), ®Ўлз® Їа®ўҐапов, зв® б Є ¦¤л¬ ४га-
бЁўл¬ ўл§®ў®¬ § 票Ґ Є Є®Ј®-в® Ї а ¬Ґва 㬥ми Ґвбп, Ё нв®
Ґ ¬®¦Ґв Їа®¤®«¦ вмбп ЎҐбЄ®Ґз®.
7.1.1. Ќ ЇЁб вм ४габЁўго Їа®жҐ¤гаг ўлзЁб«ҐЁп д Єв®аЁ «
楫®Ј® Ї®«®¦ЁвҐ«м®Ј® зЁб« n (в.Ґ. Їа®Ё§ўҐ¤ҐЁп зЁбҐ« 1..n,
®Ў®§ з Ґ¬®Ј® n!).
ђҐиҐЁҐ. €бЇ®«м§гҐ¬ а ўҐбвў 1!=1, n!= (n-1)!*n.
procedure factorial (n: integer; var fact: integer);
| {Ї®«®¦Ёвм fact а ўл¬ д Єв®аЁ «г зЁб« y}
begin
| if n=1 then begin
| | fact:=1;
| end else begin {n>1}
| | factorial (n-1, fact);
| | fact:= fact*n;
| end;
end;
‘ ЁбЇ®«м§®ў ЁҐ¬ Їа®жҐ¤га-дгЄжЁ© ¬®¦® ЇЁб вм в Є:
function factorial (n: integer): integer;
begin
| if n=1 then begin
| | factorial:=1;
| end else begin {n>1}
| | factorial:= factorial (n-1)*n;
| end;
end;
ЋЎа вЁвҐ ўЁ¬ ЁҐ ҐЄ®в®аго ¤ў®©б⢥®бвм ЁбЇ®«м§®ў Ёп Ё¬Ґ-
Ё factorial ўгваЁ ®ЇЁб Ёп дгЄжЁЁ: ®® ®Ў®§ з Ґв Є Є ЇҐаҐ-
¬Ґго, в Є Ё ўл§лў Ґ¬го ४габЁў® дгЄжЁо. Љ бз бвмо, ў 襬
б«гз Ґ ®Ё а §«Ёз овбп Ї® бЄ®ЎЄ ¬ Ї®б«Ґ Ё¬ҐЁ, ® Ґб«Ё Ўл
дгЄжЁп Ўл« ЎҐ§ Ї а ¬Ґва®ў, в® ¤Ґ«® Ўл«® Ўл Ї«®е®. (‘в -
¤ ав п, ® ва㤮 室Ё¬ п ®иЁЎЄ ў®§ЁЄ Ґв, Ґб«Ё ўв®а Ї®« -
Ј Ґв, зв® ® ЁбЇ®«м§гҐв § 票Ґ ЇҐаҐ¬Ґ®©, Є®¬ЇЁ«пв®а ў н⮬
¬Ґб⥠ўЁ¤Ёв ४габЁўл© ўл§®ў.)
7.1.2. ЋЎлз® д Єв®аЁ « ®ЇаҐ¤Ґ«пов Ё ¤«п г«п, бзЁв п, зв®
0!=1. €§¬ҐЁвҐ Їа®Ја ¬¬л ᮮ⢥вб⢥®.
7.1.3. Ќ ЇЁиЁвҐ ४габЁўго Їа®Ја ¬¬г ў®§ўҐ¤ҐЁп ў 楫го Ґ-
®ваЁж ⥫мго б⥯Ґм.
7.1.4. ’® ¦Ґ, Ґб«Ё вॡгҐвбп, зв®Ўл Ј«гЎЁ ४габЁЁ Ґ ЇаҐ-
ў®б室Ё« C*log n, Ј¤Ґ n - б⥯Ґм.
ђҐиҐЁҐ.
function power (a,n: integer): integer;
begin
| if n = 0 then begin
| | power:= 1;
| end else if n mod 2 = 0 then begin
| | power:= power(a*2, n div 2);
| end else begin
| | power:= power(a, n-1)*a;
| end;
end;
7.1.5. —в® Ўг¤Ґв, Ґб«Ё Ё§¬ҐЁвм Їа®Ја ¬¬г, ЇаЁўҐ¤Ґго ў
аҐиҐЁЁ ЇаҐ¤л¤г饩 § ¤ зЁ, § ¬ҐЁў бва®Єг
power:= power(a*2, n div 2)
power:= power(a, n div 2)* power(a, n div 2)?
ђҐиҐЁҐ. Џа®Ја ¬¬ ®бв Ґвбп Їа ўЁ«м®©. Ћ¤ Є® ® бв Ґв
а Ў®в вм ¬Ґ¤«ҐҐҐ. „Ґ«® ў ⮬, з⮠⥯Ґам ўл§®ў ¬®¦Ґв Ї®а®¤Ёвм
¤ў ўл§®ў (е®вп Ё ®¤Ё Є®ўле) ў¬Ґбв® ®¤®Ј® - Ё зЁб«® ўл§®ў®ў
Ўлбва® а бвҐв б Ј«гЎЁ®© ४габЁЁ. Џа®Ја ¬¬ Ї®-ЇаҐ¦Ґ¬г Ё¬ҐҐв
«®Ј аЁд¬ЁзҐбЄго Ј«гЎЁг ४габЁЁ, ® зЁб«® и Ј®ў а Ў®вл бв ®-
ўЁвбп «ЁҐ©л¬ ў¬Ґбв® «®Ј аЁд¬ЁзҐбЄ®Ј®.
ќв®в Ґ¤®бв в®Є ¬®¦® гбва Ёвм, ЇЁб ў
t:= power(a, n div 2);
power:= t*t;
Ё«Ё ў®бЇ®«м§®ў ўиЁбм дгЄжЁҐ© ў®§ўҐ¤ҐЁп ў Єў ¤а в (sqr).
7.1.6. €бЇ®«м§гп «Ёим Є®¬ ¤л write(x) ЇаЁ x=0..9, ЇЁб вм
४габЁўго Їа®Ја ¬¬г ЇҐз вЁ ¤ҐбпвЁз®© § ЇЁбЁ 楫®Ј® Ї®«®¦Ё-
⥫쮣® зЁб« n.
ђҐиҐЁҐ. ‡¤Ґбм ЁбЇ®«м§®ў ЁҐ ४габЁЁ ®Ў«ҐЈз Ґв ¦Ё§м
(Їа®Ў«Ґ¬ Ўл« ў ⮬, зв® жЁдал «ҐЈзҐ Ї®«гз вм б Є®ж , ЇҐз -
в вм ¤® б з « ).
procedure print (n:integer); {n>0}
begin
| if n<10 then begin
| | write (n);
| end else begin
| | print (n div 10);
| | write (n mod 10);
| end;
end;
7.1.7. €Ја "• ®©бЄЁҐ Ў иЁ" б®бв®Ёв ў б«Ґ¤го饬. …бвм ваЁ
бвҐа¦п. Ќ ЇҐаўл© Ё§ Ёе ¤Ґв ЇЁа ¬Ё¤Є Ё§ n Є®«Ґж (Ў®«миЁҐ
Є®«мж бЁ§г, ¬ҐмиЁҐ ᢥаег). ’ॡгҐвбп ЇҐаҐ¬ҐбвЁвм Є®«мж
¤агЈ®© бвҐа¦Ґм. ђ §аҐи Ґвбп ЇҐаҐЄ« ¤лў вм Є®«мж б® бвҐа¦п
бвҐа¦Ґм, ® Є« бвм Ў®«м襥 Є®«мж® Ї®ўҐае ¬Ґм襣® Ґ«м§п. ‘®б-
в ўЁвм Їа®Ја ¬¬г, гЄ §лў ойго ваҐЎгҐ¬лҐ ¤Ґ©бвўЁп.
ђҐиҐЁҐ. Ќ ЇЁиҐ¬ ४габЁўго Їа®жҐ¤гаг ЇҐаҐ¬ҐйҐЁп i
ўҐаеЁе Є®«Ґж б m-Ј® бвҐа¦п n-л© (ЇаҐ¤Ї®« Ј Ґвбп, зв® ®б-
в «млҐ Є®«мж Ў®«миҐ Ї® а §¬Ґаг Ё «Ґ¦ в бвҐа¦пе ЎҐ§ ¤ўЁ¦Ґ-
Ёп).
procedure move(i,m,n: integer);
| var s: integer;
begin
| if i = 1 then begin
| | writeln ('ᤥ« вм 室', m, '->', n);
| end else begin
| | s:=6-m-n; {s - ваҐвЁ© бвҐа¦Ґм: б㬬 ®¬Ґа®ў а ў 6}
| | move (i-1, m, s);
| | writeln ('ᤥ« вм 室', m, '->', n);
| | move (i-1, s, n);
| end;
end;
(‘ з « ЇҐаҐ®бЁвбп ЇЁа ¬Ё¤Є Ё§ i-1 Є®«Ґж ваҐвмо Ї «®зЄг.
Џ®б«Ґ нв®Ј® i-®Ґ Є®«мж® ®бў®Ў®¦¤ Ґвбп, Ё ҐЈ® ¬®¦® ЇҐаҐҐбвЁ Єг-
¤ б«Ґ¤гҐв. Ћбв Ґвбп Ї®«®¦Ёвм ҐЈ® ЇЁа ¬Ё¤Єг.)
7.2. ђҐЄгабЁў п ®Ўа Ў®вЄ ¤ҐаҐўмҐў
„ў®Ёзл¬ ¤ҐаҐў®¬ §лў Ґвбп Є авЁЄ ўа®¤Ґ
o
\
o o
\ /
o o
\ /
o
ЌЁ¦пп ўҐаиЁ §лў Ґвбп Є®аҐ¬. €§ Є ¦¤®© ўҐаиЁл ¬®Јгв Ё¤вЁ
¤ўҐ «ЁЁЁ: ў«Ґў® ўўҐае Ё ўЇа ў® ўўҐае. ‚ҐаиЁл, Єг¤ ®Ё ўҐ¤гв,
§лў овбп «Ґўл¬ Ё Їа ўл¬ бл®ўмп¬Ё Ёб室®© ўҐаиЁл. ‚ҐаиЁ
¬®¦Ґв Ё¬Ґвм ¤ўге бл®ўҐ©, ¬®¦Ґв Ё¬Ґвм в®«мЄ® ®¤®Ј® бл («Ґ-
ў®Ј® Ё«Ё Їа ў®Ј®). Ћ ¬®¦Ґв Ё ў®ўбҐ Ґ Ё¬Ґвм бл®ўҐ©, Ё ў н⮬
б«гз Ґ §лў Ґвбп «Ёб⮬.
Џгбвм x - Є Є п-в® ўҐаиЁ ¤ў®Ёз®Ј® ¤ҐаҐў . Ћ б ¬ ў¬Ґб-
⥠б бл®ўмп¬Ё, ўгЄ ¬Ё, Їа ўгЄ ¬Ё Ё в.¤. ®Ўа §гҐв Ї®¤¤ҐаҐў® б
Є®аҐ¬ ў x - "Ї®¤¤ҐаҐў® Ї®в®¬Є®ў x".
‚ б«Ґ¤гойЁе § ¤ з е ¬л ЇаҐ¤Ї®« Ј Ґ¬, зв® ўҐаиЁл ¤ҐаҐў
Їа®г¬Ґа®ў л 楫묨 Ї®«®¦ЁвҐ«мл¬Ё зЁб« ¬Ё, ЇаЁзҐ¬ ®¬Ґа ўбҐе
ўҐаиЁ а §«Ёзл. Њл бзЁв Ґ¬, зв® ®¬Ґа Є®ап еа Ёвбп ў ЇҐаҐ¬Ґ-
®© root. Њл бзЁв Ґ¬, зв® Ё¬Ґовбп ¤ў ¬ ббЁў
l,r: array [1..N] of integer
Ё «Ґўл© Ё Їа ўл© бл ўҐаиЁл б ®¬Ґа®¬ i Ё¬Ґов ᮮ⢥вб⢥®
®¬Ґа l[i] Ё r[i]. …б«Ё ўҐаиЁ б ®¬Ґа®¬ i Ґ Ё¬ҐҐв «Ґў®Ј®
(Ё«Ё Їа ў®Ј®) бл , в® l[i] (ᮮ⢥вб⢥® r[i]) а ў® 0. (Џ®
ва ¤ЁжЁЁ ЇаЁ § ЇЁбЁ Їа®Ја ¬¬ ¬л ЁбЇ®«м§гҐ¬ ў¬Ґбв® г«п Є®бв вг
nil, а ўго г«о.)
‡¤Ґбм N - ¤®бв в®з® Ў®«м讥 вга «м®Ґ зЁб«® (®¬Ґа ўбҐе
ўҐаиЁ Ґ ЇаҐў®б室пв N). Ћв¬ҐвЁ¬, зв® ®¬Ґа ўҐаиЁл ЁЄ Є Ґ
бўп§ б ҐҐ Ї®«®¦ҐЁҐ¬ ў ¤ҐаҐўҐ Ё зв® Ґ ўбҐ зЁб« ®в 1 ¤® N
®Ўп§ л Ўлвм ®¬Ґа ¬Ё ўҐаиЁ (Ё, б«Ґ¤®ў ⥫м®, з бвм ¤ ле ў
¬ ббЁў е l Ё r - нв® ¬гб®а).
7.2.1. Џгбвм N=7, root=3, ¬ ббЁўл l Ё r в Є®ўл:
i | 1 2 3 4 5 6 7
l[i] | 0 0 1 0 6 0 7
r[i] | 0 0 5 3 2 0 7
Ќ аЁб®ў вм ᮮ⢥вбвўго饥 ¤ҐаҐў®.
ЋвўҐв: 6 2
\ /
1 5
\ /
3
7.2.2. Ќ ЇЁб вм Їа®Ја ¬¬г Ї®¤бзҐв зЁб« ўҐаиЁ ў ¤ҐаҐўҐ.
ђҐиҐЁҐ. ђ бᬮваЁ¬ дгЄжЁо n(x), а ўго зЁб«г ўҐаиЁ ў
Ї®¤¤ҐаҐўҐ б Є®аҐ¬ ў ўҐаиЁҐ ®¬Ґа x. ‘зЁв Ґ¬, зв® n(nil)=0 (Ї®-
« Ј п ᮮ⢥вбвўго饥 Ї®¤¤ҐаҐў® Їгбвл¬), Ё Ґ § Ў®вЁ¬бп ® § зҐ-
Ёпе nil(s) ¤«п зЁбҐ« s, Ґ пў«пойЁебп ®¬Ґа ¬Ё ўҐаиЁ. ђҐЄга-
бЁў п Їа®Ја ¬¬ ¤«п s в Є®ў :
function n (x:integer):integer;
begin
| if x = nil then begin
| | n:= 0;
| end else begin
| | n:= n(l[x]) + n(r[x]) + 1;
| end;
end;
(—Ёб«® ўҐаиЁ ў Ї®¤¤ҐаҐўҐ ¤ ўҐаиЁ®© x а ў® б㬬Ґ зЁбҐ« ўҐа-
иЁ ¤ ҐҐ бл®ўмп¬Ё Ї«об ® б ¬ .) ѓ«гЎЁ ४габЁЁ Є®Ґз ,
в Є Є Є б Є ¦¤л¬ и Ј®¬ ўлб®в ᮮ⢥вбвўго饣® Ї®¤¤ҐаҐў
㬥ми Ґвбп.
7.2.3. Ќ ЇЁб вм Їа®Ја ¬¬г Ї®¤бзҐв зЁб« «Ёбв쥢 ў ¤ҐаҐўҐ.
ЋвўҐв.
function n (x:integer):integer;
begin
| if x = nil then begin
| | n:= 0;
| end else if (l[x]=nil) and (r[x]=nil) then begin {«Ёбв}
| | n:= 1;
| end;
| end else begin
| | n:= n(l[x]) + n(r[x]);
| end;
end;
7.2.4. Ќ ЇЁб вм Їа®Ја ¬¬г Ї®¤бзҐв ўлб®вл ¤ҐаҐў (Є®аҐм
Ё¬ҐҐв ўлб®вг 0, ҐЈ® бл®ўмп - ўлб®вг 1, ўгЄЁ - 2 Ё в.Ї.; ўлб®в
¤ҐаҐў - нв® ¬ ЄбЁ¬г¬ ўлб®в ҐЈ® ўҐаиЁ).
“Є § ЁҐ. ђҐЄгабЁў® ®ЇаҐ¤Ґ«пҐвбп дгЄжЁп f(x) = ўлб®в
Ї®¤¤ҐаҐў б Є®аҐ¬ ў x.
7.2.5. Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п Ї® § ¤ ®¬г n бзЁв Ґв
зЁб«® ўбҐе ўҐаиЁ ўлб®вл n (ў § ¤ ®¬ ¤ҐаҐўҐ).
‚¬Ґбв® Ї®¤бзҐв Є®«ЁзҐбвў ўҐаиЁ в®Ј® Ё«Ё Ё®Ј® த ¬®¦®
Їа®бЁвм ЇҐз в вм бЇЁб®Є нвЁе ўҐаиЁ (ў ⮬ Ё«Ё Ё®¬ Ї®ап¤ЄҐ).
7.2.6. Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п ЇҐз в Ґв (Ї® ®¤®¬г а -
§г) ўбҐ ўҐаиЁл ¤ҐаҐў .
ђҐиҐЁҐ. Џа®жҐ¤га print_subtree(x) ЇҐз ⠥⠢ᥠўҐаиЁл
Ї®¤¤ҐаҐў б Є®аҐ¬ ў x Ї® ®¤®¬г а §г; Ј« ў п Їа®Ја ¬¬ ᮤҐа-
¦Ёв ўл§®ў print_subtree(root).
procedure print_subtree (x:integer);
begin
| if x = nil then begin
| | {ЁзҐЈ® Ґ ¤Ґ« вм}
| end else begin
| | writeln (x);
| | print_subtree (l[x]);
| | print_subtree (r[x]);
| end;
end;
„ п Їа®Ја ¬¬ ЇҐз в Ґв б з « Є®аҐм Ї®¤¤ҐаҐў , § ⥬ Ї®¤¤Ґ-
ॢ® ¤ «Ґўл¬ б뮬, § ⥬ ¤ Їа ўл¬. ’аЁ бва®ЄЁ ў else-з б-
вЁ ¬®Јгв Ўлвм ЇҐаҐбв ў«Ґл 6 бЇ®б®Ў ¬Ё, Ё Є ¦¤л© Ё§ нвЁе бЇ®б®-
Ў®ў ¤ Ґв бў®© Ї®а冷Є ЇҐз вЁ ўҐаиЁ.
7.3. Џ®а®¦¤ҐЁҐ Є®¬ЎЁ в®але ®ЎкҐЄв®ў, ЇҐаҐЎ®а
ђҐЄгабЁўлҐ Їа®Ја ¬¬л пў«повбп 㤮Ўл¬ бЇ®б®Ў®¬ Ї®а®¦¤ҐЁп
Є®¬ЎЁ в®але ®ЎкҐЄв®ў § ¤ ®Ј® ўЁ¤ . Њл аҐиЁ¬ § ®ў® ҐбЄ®«мЄ®
§ ¤ з б®®вўвҐвбўго饩 Ј« ўл.
7.3.1. Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п ЇҐз в Ґв Ї® ®¤®¬г а §г
ўбҐ Ї®б«Ґ¤®ў ⥫м®бвЁ ¤«Ёл n, б®бв ў«ҐлҐ Ё§ зЁбҐ« 1..k (Ёе
Є®«ЁзҐбвў® а ў® k ў б⥯ҐЁ n).
ђҐиҐЁҐ. Џа®Ја ¬¬ Ўг¤Ґв ®ЇҐаЁа®ў вм б ¬ ббЁў®¬ a[1]..a[n]
Ё зЁб«®¬ t. ђҐЄгабЁў п Їа®жҐ¤га generate ЇҐз ⠥⠢ᥠЇ®б«Ґ¤®-
ў ⥫м®бвЁ, зЁ ойЁҐбп a[1]..a[t]; Ї®б«Ґ ҐҐ ®Є®з Ёп t
Ё¬ҐҐв в® ¦Ґ § 票Ґ, зв® Ё ў з «Ґ:
procedure generate;
| var i,j : integer;
begin
| if t = n then begin
| | for i:=1 to n do begin
| | | write(a[i]);
| | end;
| | writeln;
| end else begin {t < n}
| | for j:=1 to k do begin
| | | t:=t+1;
| | | a[t]:=j;
| | | generate;
| | | t:=t-1;
| | end;
| end;
end;
Ћб®ў п Їа®Ја ¬¬ ⥯Ґам б®бв®Ёв Ё§ ¤ўге ®ЇҐа в®а®ў:
t:=0; generate;
7.3.2. Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п ЇҐз в « Ўл ўбҐ ЇҐаҐбв -
®ўЄЁ зЁбҐ« 1..n Ї® ®¤®¬г а §г.
ђҐиҐЁҐ. Џа®Ја ¬¬ ®ЇҐаЁагҐв б ¬ ббЁў®¬ a[1]..a[n], ў Є®в®-
஬ еа Ёвбп ЇҐаҐбв ®ўЄ зЁбҐ« 1..n. ђҐЄгабЁў п Їа®жҐ¤га
generate ў в Є®© бЁвг жЁЁ ЇҐз ⠥⠢ᥠЇҐаҐбв ®ўЄЁ, Є®в®алҐ
ЇҐаўле t Ї®§ЁжЁпе б®ўЇ ¤ ов б ЇҐаҐбв ®ўЄ®© a; Ї® ўл室Ґ Ё§ ҐҐ
ЇҐаҐ¬ҐлҐ t Ё a Ё¬Ґов ⥠¦Ґ § 票п, зв® Ё ¤® ўе®¤ . Ћб®ў п
Їа®Ја ¬¬ в Є®ў :
for i:=1 to n do begin a[i]:=i; end;
t:=0;
generate;
ў®в ®ЇЁб ЁҐ Їа®жҐ¤гал:
procedure generate;
| var i,j : integer;
begin
| if t = n then begin
| | for i:=1 to n do begin
| | | write(a[i]);
| | end;
| | writeln;
| end else begin {t < n}
| | for j:=t+1 to n do begin
| | | Ї®¬Ґпвм ¬Ґбв ¬Ё a[t+1] Ё a[j]
| | | t:=t+1;
| | | generate;
| | | t:=t-1;
| | | Ї®¬Ґпвм ¬Ґбв ¬Ё a[t+1] Ё a[j]
| | end;
| end;
end;
7.3.3. Ќ ЇҐз в вм ўбҐ ў®§а бв ойЁҐ Ї®б«Ґ¤®ў ⥫м®бвЁ ¤«Ёл
k, н«Ґ¬Ґв ¬Ё Є®в®але пў«повбп вга «млҐ зЁб« ®в 1 ¤® n.
(ЏаҐ¤Ї®« Ј Ґвбп, зв® k Ґ ЇаҐў®б室Ёв n - Ё зҐ в ЄЁе Ї®б«Ґ¤®ў -
⥫м®б⥩ Ґ бгйҐбвўгҐв.)
ђҐиҐЁҐ. Џа®Ја ¬¬ ®ЇҐаЁагҐв б ¬ ббЁў®¬ a[1]..a[k] Ё 楫®©
ЇҐаҐ¬Ґ®© t. ЏаҐ¤Ї®« Ј п, зв® a[1]..a[t] - ў®§а бв ой п Ї®б«Ґ-
¤®ў ⥫м®бвм зЁбҐ« вга «мле зЁбҐ« Ё§ ®в१Є 1..n, ४габЁў-
® ®ЇаҐ¤Ґ«Ґ п Їа®жҐ¤га generate ЇҐз ⠥⠢ᥠҐҐ ў®§а бв ойЁҐ
Їа®¤®«¦ҐЁп ¤«Ёл k.
procedure generate;
| var i: integer;
begin
| if t = k then begin
| | ЇҐз в вм a[1]..a[k]
| end else begin
| | t:=t+1;
| | for i:=a[t-1]+1 to t-k+n do begin
| | | a[t]:=i;
| | | generate;
| | end;
| | t:=t-1;
| end;
end;
‡ ¬Ґз ЁҐ. –ЁЄ« for ¬®Ј Ўл Ё¬Ґвм ўҐа奩 Ја ЁжҐ© n (ў¬Ґбв®
t-k+n). Ќ и ў аЁ в нЄ®®¬Ёв з бвм а Ў®вл, гзЁвлў п в®в д Єв,
зв® ЇаҐ¤Ї®б«Ґ¤Ё© (k-1-л©) з«Ґ Ґ ¬®¦Ґв ЇаҐў®б室Ёвм n-1,
k-2-®© з«Ґ Ґ ¬®¦Ґв ЇаҐў®б室Ёвм n-2 Ё в.Ї.
Ћб®ў п Їа®Ја ¬¬ ⥯Ґам ўлЈ«п¤Ёв в Є:
t:=1;
for j:=1 to 1-k+n do begin
| a[1]:=j;
| generate;
end;
Њ®¦® Ўл«® Ўл ¤®Ў ўЁвм Є ¬ ббЁўг a б«Ґў ҐйҐ Ё a[0]=0, Ї®«®¦Ёвм
t=0 Ё ®Ја ЁзЁвмбп Ґ¤ЁбвўҐл¬ ўл§®ў®¬ Їа®жҐ¤гал generate.
7.3.4. ЏҐаҐзЁб«Ёвм ўбҐ ЇаҐ¤бв ў«ҐЁп Ї®«®¦ЁвҐ«м®Ј® 楫®Ј®
зЁб« n ў ўЁ¤Ґ бг¬¬л Ї®б«Ґ¤®ў ⥫м®бвЁ Ґў®§а бв ойЁе 楫ле Ї®-
«®¦ЁвҐ«мле б« Ј Ґ¬ле.
ђҐиҐЁҐ. Џа®Ја ¬¬ ®ЇҐаЁагҐв б ¬ ббЁў®¬ a[1..n] (¬ ЄбЁ-
¬ «м®Ґ зЁб«® б« Ј Ґ¬ле а ў® n) Ё б 楫®© ЇҐаҐ¬Ґ®© t. ЏаҐ¤Ї®-
« Ј п, зв® a[1],...,a[t] - Ґў®§а бв ой п Ї®б«Ґ¤®ў ⥫м®бвм жҐ-
«ле зЁбҐ«, б㬬 Є®в®але Ґ ЇаҐў®б室Ёв n, Їа®жҐ¤га generate
ЇҐз ⠥⠢ᥠЇаҐ¤бв ў«ҐЁп вॡ㥬®Ј® ўЁ¤ , Їа®¤®«¦ ойЁҐ нвг
Ї®б«Ґ¤®ў ⥫м®бвм. „«п нЄ®®¬ЁЁ ўлзЁб«ҐЁ© б㬬 a[1]+...+a[t]
еа Ёвбп ў бЇҐжЁ «м®© ЇҐаҐ¬Ґ®© s.
procedure generate;
| var i: integer;
begin
| if s = n then begin
| | ЇҐз в вм Ї®б«Ґ¤®ў ⥫м®бвм a[1]..a[t]
| end else begin
| | for i:=1 to min(a[t], n-s) do begin
| | | t:=t+1;
| | | a[t]:=i;
| | | s:=s+i;
| | | generate;
| | | s:=s-i;
| | | t:=t-1;
| | end;
| end;
end;
Ћб®ў п Їа®Ја ¬¬ ЇаЁ н⮬ ¬®¦Ґв Ўлвм в Є®©:
t:=1;
for j:=1 to n do begin
| a[1]:=j
| s:=j;
| generate;
end;
‡ ¬Ґз ЁҐ. Њ®¦® Ґ¬®Ј® бнЄ®¬Ёвм, ўлҐбп ®ЇҐа жЁЁ 㢥«Ё-
зҐЁп Ё 㬥м襨п t Ё§ жЁЄ« , в Є¦Ґ Ґ ў®§ўа й п s Є ¦¤л© а §
Є Ёб室®¬г § 票о ( 㢥«ЁзЁў п ҐЈ® 1 Ё ў®§ўа й п Є Ёб室-
®¬г § зҐЁо ў Є®жҐ). Ља®¬Ґ в®Ј®, ¤®Ў ўЁў дЁЄвЁўл© н«Ґ¬Ґв
a[0]=n, ¬®¦® гЇа®бвЁвм ®б®ўго Їа®Ја ¬¬г:
t:=0; s:=0; a[0]:=n; generate;
7.3.5. Ќ ЇЁб вм ४габЁўго Їа®Ја ¬¬г ®Ўе®¤ ¤ҐаҐў (Ёб-
Ї®«м§гп ⥠¦Ґ Є®¬ ¤л Ё Їа®ўҐаЄЁ, зв® Ё ў Ј« ўҐ Їа® ®Ўе®¤ ¤ҐаҐ-
ў ).
ђҐиҐЁҐ. Џа®жҐ¤га ®Ўа Ў®в вм_ ¤ ®Ўа Ў влў Ґв ўбҐ «Ёбвмп
¤ ⥪г饩 ўҐаиЁ®© Ё § Є зЁў Ґв а Ў®вг ў в®© ¦Ґ ўҐаиЁҐ, зв®
Ё з « . ‚®в ҐҐ ४габЁў®Ґ ®ЇЁб ЁҐ:
procedure ®Ўа Ў®в вм_ ¤;
begin
| if Ґбвм_ᢥаег then begin
| | ўўҐае_ «Ґў®;
| | ®Ўа Ў®в вм_ ¤;
| | while Ґбвм_бЇа ў do begin
| | | ўЇа ў®;
| | | ®Ўа Ў®в вм_ ¤;
| | end;
| | ўЁ§;
| end else begin
| | ®Ўа Ў®в вм;
| end;
end;
7.4. „агЈЁҐ ЇаЁ¬ҐҐЁп ४габЁЁ
’®Ї®«®ЈЁзҐбЄ п б®авЁа®ўЄ . ЏаҐ¤бв ўЁ¬ ᥡҐ n зЁ®ўЁЄ®ў,
Є ¦¤л© Ё§ Є®в®але ўл¤ Ґв бЇа ўЄЁ ®ЇаҐ¤Ґ«Ґ®Ј® ўЁ¤ . Њл е®вЁ¬
Ї®«гзЁвм ўбҐ нвЁ бЇа ўЄЁ, б®Ў«о¤ п ®Ја ЁзҐЁп, гбв ®ў«ҐлҐ
зЁ®ўЁЄ ¬Ё. ЋЈа ЁзҐЁп б®бв®пв ў ⮬, зв® г Є ¦¤®Ј® зЁ®ўЁЄ
Ґбвм бЇЁб®Є бЇа ў®Є, Є®в®алҐ г¦® б®Ўа вм ЇҐаҐ¤ ®Ўа 饨Ґ¬ Є
Ґ¬г. „Ґ«® ЎҐ§ ¤Ґ¦®, Ґб«Ё б奬 § ўЁбЁ¬®б⥩ Ё¬ҐҐв жЁЄ«
(бЇа ўЄг A Ґ«м§п Ї®«гзЁвм ЎҐ§ B, B ЎҐ§ C,..., Y ЎҐ§ Z Ё Z ЎҐ§
A). ЏаҐ¤Ї®« Ј п, зв® в Є®Ј® жЁЄ« Ґв, вॡгҐвбп б®бв ўЁвм Ї« ,
гЄ §лў ойЁ© ®¤Ё Ё§ ў®§¬®¦ле Ї®ап¤Є®ў Ї®«г票п бЇа ў®Є.
€§®Ўа ¦ п зЁ®ўЁЄ®ў в®зЄ ¬Ё, § ўЁбЁ¬®бвЁ - бв५Є ¬Ё,
ЇаЁе®¤Ё¬ Є в Є®© д®а¬г«Ёа®ўЄҐ. €¬ҐҐвбп n в®зҐЄ, Їа®г¬Ґа®ў ле
®в 1 ¤® n. €§ Є ¦¤®© в®зЄЁ ўҐ¤Ґв ҐбЄ®«мЄ® (ў®§¬®¦®, 0) бв५®Є
ў ¤агЈЁҐ в®зЄЁ. (’ Є п Є авЁЄ §лў Ґвбп ®аЁҐвЁа®ў л¬ Ја -
䮬.) –ЁЄ«®ў Ґв. ’ॡгҐвбп а бЇ®«®¦Ёвм ўҐаиЁл Ја д (в®зЄЁ) ў
в Є®¬ Ї®ап¤ЄҐ, зв®Ўл Є®Ґж «оЎ®© бв५ЄЁ ЇаҐ¤иҐбвў®ў « ҐҐ з -
«г. ќв § ¤ з §лў Ґвбп в®Ї®«®ЈЁзҐбЄ®© б®авЁа®ўЄ®©.
7.4.1. „®Є § вм, зв® нв® ўбҐЈ¤ ў®§¬®¦®.
ђҐиҐЁҐ. €§ гб«®ўЁп ®вбгвбвўЁп жЁЄ«®ў ўл⥪ Ґв, зв® Ґбвм
ўҐаиЁ , Ё§ Є®в®а®© ў®®ЎйҐ Ґ ўл室Ёв бв५®Є (Ё зҐ ¬®¦® ¤ўЁ-
Ј вмбп Ї® бв५Є ¬, Ї®Є Ґ § жЁЄ«Ё¬бп). …Ґ Ўг¤Ґ¬ бзЁв вм ЇҐа-
ў®©. ‚лЄЁ¤лў п ўбҐ бв५ЄЁ, ў ҐҐ ўҐ¤гйЁҐ, ¬л бў®¤Ё¬ § ¤ зг Є
Ја дг б ¬ҐмиЁ¬ зЁб«®¬ ўҐаиЁ Ё Їа®¤®«¦ Ґ¬ а бб㦤ҐЁҐ Ї® Ё¤гЄ-
жЁЁ.
7.4.2. ЏаҐ¤Ї®«®¦Ё¬, зв® ®аЁҐвЁа®ў л© Ја д ЎҐ§ жЁЄ«®ў
еа Ёвбп ў в Є®© д®а¬Ґ: ¤«п Є ¦¤®Ј® i ®в 1 ¤® n ў num[i] еа Ёв-
бп зЁб«® ўл室пйЁе Ё§ i бв५®Є, ў adr[i][1],..., adr[i][num[i]]
- ®¬Ґа ўҐаиЁ, Єг¤ нвЁ бв५ЄЁ ўҐ¤гв. ‘®бв ўЁвм (४габЁўл©)
«Ј®аЁв¬, Є®в®ал© Їа®Ё§ў®¤Ёв в®Ї®«®ЈЁзҐбЄго б®авЁа®ўЄг Ґ Ў®«ҐҐ
祬 § C*(n+m) ¤Ґ©бвўЁ©, Ј¤Ґ m - зЁб«® ॡҐа Ја д (бв५®Є).
‡ ¬Ґз ЁҐ. ЌҐЇ®б।б⢥ п ॠ«Ё§ жЁп ЇаЁўҐ¤Ґ®Ј® ўлиҐ
¤®Є § ⥫мбвў бгйҐбвў®ў Ёп Ґ ¤ Ґв вॡ㥬®© ®жҐЄЁ; ҐҐ ЇаЁе®-
¤Ёвбп Ґ¬®Ј® Ї®¤Їа ўЁвм.
ђҐиҐЁҐ. Ќ и Їа®Ја ¬¬ Ўг¤Ґв ЇҐз в вм ®¬Ґа ўҐаиЁ. ‚
¬ ббЁўҐ printed: array[1..n] of boolean ¬л Ўг¤Ґ¬ еа Ёвм ᢥ¤Ґ-
Ёп ® ⮬, Є ЄЁҐ ўҐаиЁл ЇҐз в л (Ё Є®а४вЁа®ў вм Ёе ®¤®ў-
६Ґ® б ЇҐз вмо ўҐаиЁл). Ѓг¤Ґ¬ Ј®ў®аЁвм, зв® ЇҐз в п
Ї®б«Ґ¤®ў ⥫м®бвм ўҐаиЁ Є®а४в , Ґб«Ё ЁЄ Є п ўҐаиЁ Ґ -
ЇҐз в ¤ў ¦¤л Ё ¤«п «оЎ®Ј® ®¬Ґа i, ўе®¤п饣® ў нвг Ї®б«Ґ¤®б-
⥫м®бвм, ўбҐ ўҐаиЁл, ў Є®в®алҐ ўҐ¤гв бв५ЄЁ Ё§ i, ЇҐз в -
л, Ё ЇаЁв®¬ ¤® i.
procedure add (i: 1..n);
| {¤ ®: ЇҐз в ®Ґ Є®а४в®;}
| { ¤®: ЇҐз в ®Ґ Є®а४⮠Ё ўЄ«оз Ґв ўҐаиЁг i}
begin
| if printed [i] then begin {ўҐаиЁ i 㦥 ЇҐз в }
| | {ЁзҐЈ® ¤Ґ« вм Ґ ¤®}
| end else begin
| | { ЇҐз в ®Ґ Є®а४в®}
| | for j:=1 to num[i] do begin
| | | add(adr[i][j]);
| | end;
| | { ЇҐз в ®Ґ Є®а४в®, ўбҐ ўҐаиЁл, ў Є®в®алҐ Ё§
| | i ўҐ¤гв бв५ЄЁ, 㦥 ЇҐз в л - в Є зв® ¬®¦®
| | ЇҐз в вм i, Ґ аги п Є®а४в®бвЁ}
| | if not printed[i] then begin
| | | writeln(i); printed [i]:= TRUE;
| | end;
| end;
end;
Ћб®ў п Їа®Ја ¬¬ :
for i:=1 to n do begin
| printed[i]:= FALSE;
end;
for i:=1 to n do begin
| add(i)
end;
7.4.3. ‚ ЇаЁўҐ¤Ґ®© Їа®Ја ¬¬Ґ ¬®¦® ўлЎа®бЁвм Їа®ўҐаЄг,
§ ¬ҐЁў
if not printed[i] then begin
| writeln(i); printed [i]:= TRUE;
end;
writeln(i); printed [i]:= TRUE;
Џ®зҐ¬г? Љ Є Ё§¬ҐЁвбп бЇҐжЁдЁЄ жЁп Їа®жҐ¤гал?
ђҐиҐЁҐ. ‘ЇҐжЁдЁЄ жЁо ¬®¦® ўлЎа вм в Є®©:
¤ ®: ЇҐў в ®Ґ Є®а४в®
¤®: ЇҐз в ®Ґ Є®а४⮠Ё ўЄ«оз Ґв ўҐаиЁг i;
ўбҐ ў®ўм ЇҐз в лҐ ўҐаиЁл ¤®бвгЇл Ё§ i.
7.4.4. ѓ¤Ґ ЁбЇ®«м§®ў в®в д Єв, зв® Ја д Ґ Ё¬ҐҐв жЁЄ«®ў?
ђҐиҐЁҐ. Њл ®ЇгбвЁ«Ё ¤®Є § ⥫мбвў® Є®Ґз®бвЁ Ј«гЎЁл аҐ-
ЄгабЁЁ. „«п Є ¦¤®© ўҐаиЁл а бᬮваЁ¬ ҐҐ "Ј«гЎЁг" - ¬ ЄбЁ-
¬ «мго ¤«Ёг ЇгвЁ Ї® бв५Є ¬, Ё§ ҐҐ ўл室п饣®. “б«®ўЁҐ ®в-
бгвбвўЁп жЁЄ«®ў Ј а вЁагҐв, зв® нв ўҐ«ЁзЁ Є®Ґз . €§ ўҐаиЁ-
л г«Ґў®© Ј«гЎЁл бв५®Є Ґ ўл室Ёв. ѓ«гЎЁ Є®ж бв५ЄЁ Ї®
Єа ©Ґ© ¬ҐаҐ 1 ¬ҐмиҐ, 祬 Ј«гЎЁ з « . ЏаЁ а Ў®вҐ Їа®жҐ-
¤гал add(i) ўбҐ ४габЁўлҐ ўл§®ўл add(j) ®в®бпвбп Є ўҐаиЁ ¬
¬Ґм襩 Ј«гЎЁл.
‘ўп§ п Є®¬Ї®Ґв Ја д . ЌҐ®аЁҐвЁа®ў л© Ја д - Ў®а
в®зҐЄ (ўҐаиЁ), ҐЄ®в®алҐ Ё§ Є®в®але ᮥ¤ЁҐл «ЁЁп¬Ё (ॡа -
¬Ё). ЌҐ®аЁҐвЁа®ў л© Ја д ¬®¦® бзЁв вм з бвл¬ б«гз Ґ¬ ®аЁҐ-
вЁа®ў ®Ј® Ја д , ў Є®в®а®¬ ¤«п Є ¦¤®© бв५ЄЁ Ґбвм ®Ўа в п.
‘ўп§®© Є®¬Ї®Ґв®© ўҐаиЁл i §лў Ґвбп ¬®¦Ґбвў® ўбҐе вҐе
ўҐаиЁ, ў Є®в®алҐ ¬®¦® Ї®Ї бвм Ё§ i, Ё¤п Ї® аҐЎа ¬ Ја д . (Џ®б-
Є®«мЄг Ја д Ґ®аЁҐвЁа®ў л©, ®в®иҐЁҐ "j ЇаЁ ¤«Ґ¦Ёв бўп§®©
Є®¬Ї®ҐвҐ i" пў«пҐвбп ®в®иҐЁҐ¬ нЄўЁў «Ґв®бвЁ.)
7.4.5. „ Ґ®аЁҐвЁа®ў л© Ја д (¤«п Є ¦¤®© ўҐаиЁл гЄ -
§ ® зЁб«® б®бҐ¤Ґ© Ё ¬ ббЁў ®¬Ґа®ў б®бҐ¤Ґ©, Є Є ў ЇаҐ¤л¤г饩
§ ¤ зҐ). ‘®бв ўЁвм «Ј®аЁв¬, Є®в®ал© Ї® § ¤ ®¬г i ЇҐз в Ґв ўбҐ
ўҐаиЁл бўп§®© Є®¬Ї®Ґвл i Ї® ®¤®¬г а §г (Ё в®«мЄ® Ёе). —Ёб«®
¤Ґ©бвўЁ© Ґ ¤®«¦® ЇаҐў®б室Ёвм C*(®ЎйҐҐ зЁб«® ўҐаиЁ Ё ॡҐа ў
бўп§®© Є®¬Ї®ҐвҐ).
ђҐиҐЁҐ. Џа®Ја ¬¬ ў Їа®жҐббҐ а Ў®вл Ўг¤Ґв "§ Єа иЁў вм"
ҐЄ®в®алҐ ўҐаиЁл Ја д . ЌҐ§ Єа 襮© з бвмо Ја д Ўг¤Ґ¬ §л-
ў вм в®, зв® ®бв Ґвбп, Ґб«Ё ўлЎа®бЁвм ўбҐ § Єа иҐлҐ ўҐаиЁл Ё
ўҐ¤гйЁҐ ў Ёе ॡа . Џа®жҐ¤га add(i) § Єа иЁў Ґв бўп§го Є®¬Ї®-
Ґвг i ў Ґ§ Єа 襮¬ Ја дҐ (Ё Ґ ¤Ґ« Ґв ЁзҐЈ®, Ґб«Ё ўҐаиЁ
i 㦥 § Єа иҐ ).
procedure add (i:1..n);
begin
| if ўҐаиЁ i § Єа иҐ then begin
| | ЁзҐЈ® ¤Ґ« вм Ґ ¤®
| end else begin
| | § Єа бЁвм i ( ЇҐз в вм Ё Ї®¬ҐвЁвм Є Є § Єа иҐго)
| | ¤«п ўбҐе j, б®бҐ¤Ёе б i
| | | add(j);
| | end;
| end;
end;
„®Є ¦Ґ¬, зв® нв Їа®жҐ¤га ¤Ґ©бвўгҐв Їа ўЁ«м® (ў ЇаҐ¤Ї®«®¦ҐЁЁ,
з⮠४габЁўлҐ ўл§®ўл а Ў®в ов Їа ўЁ«м®). ‚ б ¬®¬ ¤Ґ«Ґ, ЁзҐ-
Ј®, Єа®¬Ґ бўп§®© Є®¬Ї®Ґвл Ґ§ Єа 襮Ј® Ја д , ® § Єа бЁвм
Ґ ¬®¦Ґв. Џа®ўҐаЁ¬, зв® ўбп ® Ўг¤Ґв § Єа иҐ . Џгбвм k - ўҐа-
иЁ , ¤®бвгЇ п Ё§ ўҐаиЁл i Ї® ЇгвЁ i-j-...-k, Їа®е®¤п饬г
в®«мЄ® Ї® Ґ§ Єа иҐл¬ ўҐаиЁ ¬. Ѓг¤Ґ¬ а бб¬ ваЁў вм в®«мЄ® Їг-
вЁ, Ґ ў®§ўа й ойЁҐбп б®ў ў i. €§ ўбҐе в ЄЁе Їг⥩ ўлЎҐаҐ¬
Їгвм б Ё¬ҐмиЁ¬ j (ў Ї®ап¤ЄҐ Їа®б¬®ва б®бҐ¤Ґ© ў жЁЄ«Ґ ў Їа®-
楤гаҐ). ’®Ј¤ ЇаЁ а бᬮв२Ё ЇаҐ¤л¤гйЁе б®бҐ¤Ґ© Ё ®¤ Ё§
ўҐаиЁ j-...-k Ґ Ўг¤Ґв § Єа иҐ (Ё зҐ j Ґ Ўл«® Ўл ¬ЁЁ-
¬ «мл¬) Ё Ї®в®¬г k ®Є ¦Ґвбп ў бўп§®© Є®¬Ї®ҐвҐ Ґ§ Єа 襮Ј®
Ја д Є ¬®¬Ґв㠢맮ў add(j). —в® Ё вॡ®ў «®бм.
—в®Ўл гбв ®ўЁвм Є®Ґз®бвм Ј«гЎЁл ४габЁЁ, § ¬ҐвЁ¬, зв®
Є ¦¤®¬ га®ўҐ ४габЁЁ зЁб«® Ґ§ Єа иҐле ўҐаиЁ г¬Ґми Ґвбп
е®вп Ўл 1.
ЋжҐЁ¬ зЁб«® ¤Ґ©бвўЁ©. Љ ¦¤ п ўҐаиЁ § Єа иЁў Ґвбп Ґ Ў®-
«ҐҐ ®¤®Ј® а § - ЇаЁ ЇҐаўл¬ ўл§®ўҐ add(i) б ¤ л¬ i. ‚ᥠЇ®б-
«Ґ¤гойЁҐ ўл§®ўл Їа®Ёб室пв ЇаЁ § Єа иЁў ЁЁ б®бҐ¤Ґ© - Є®«ЁзҐбвў®
в ЄЁе ўл§®ў®ў Ґ Ў®«миҐ зЁб« б®бҐ¤Ґ© - Ё бў®¤пвбп Є Їа®ўҐаЄҐ
в®Ј®, зв® ўҐаиЁ i 㦥 § Єа иҐ . ЏҐаўл© ¦Ґ ўл§®ў б®бв®Ёв ў
Їа®б¬®вॠўбҐе б®бҐ¤Ґ© Ё ४габЁўле ўл§®ў е add(j) ¤«п ўбҐе
Ёе. ’ ЄЁ¬ ®Ўа §®¬, ®ЎйҐҐ зЁб«® ¤Ґ©бвўЁ©, бўп§ ле б ўҐаиЁ®©
i, Ґ ЇаҐў®б室Ёв Є®бв вл, 㬮¦Ґ®© зЁб«® ҐҐ б®бҐ¤Ґ©. Ћв-
бо¤ Ё ўл⥪ Ґв вॡ㥬 п ®жҐЄ .
7.4.6. ђҐиЁвм вг ¦Ґ § ¤ зг ¤«п ®аЁҐвЁа®ў ®Ј® Ја д ( -
ЇҐз в вм ўбҐ ўҐаиЁл, ¤®бвгЇлҐ Ё§ ¤ ®© Ї® бв५Є ¬; Ја д ¬®-
¦Ґв ᮤҐа¦ вм жЁЄ«л).
ЋвўҐв. ѓ®¤Ёвбп Ї® бгйҐбвўг в ¦Ґ Їа®Ја ¬¬ (бва®Єг "¤«п
ўбҐе б®бҐ¤Ґ©" ¤® § ¬ҐЁвм "¤«п ўбҐе ўҐаиЁ, Єг¤ ўҐ¤гв
бв५ЄЁ").
Ѓлбва п б®авЁа®ўЄ •® а . ‚ § Є«о票Ґ ЇаЁўҐ¤Ґ¬ ४габЁўл©
«Ј®аЁв¬ б®авЁа®ўЄЁ ¬ ббЁў , Є®в®ал© Їа ЄвЁЄҐ пў«пҐвбп ®¤Ё¬
Ё§ б ¬ле Ўлбвале. Џгбвм ¤ ¬ ббЁў a[1]..a[n]. ђҐЄгабЁў п Їа®-
楤га sort (l,r:integer) б®авЁагҐв гз бв®Є ¬ ббЁў б Ё¤ҐЄб ¬Ё
Ё§ Ї®«гЁвҐаў « (l,r] (в.Ґ. a[l+1]..a[r]), Ґ § ва ЈЁў п ®б-
в «м®Ј® ¬ ббЁў .
procedure sort (l,r: integer);
begin
| if (l = r) then begin
| | ЁзҐЈ® ¤Ґ« вм Ґ ¤® - гз бв®Є Їгбв
| end else begin
| | ўлЎа вм б«гз ©®Ґ зЁб«® s ў Ї®«гЁвҐаў «Ґ (l,r]
| | b := a[s]
| | ЇҐаҐбв ўЁвм н«Ґ¬Ґвл б®авЁа㥬®Ј® гз бвЄ в Є, зв®Ўл
| | б з « и«Ё н«Ґ¬Ґвл, ¬ҐмиЁҐ b - гз бв®Є (l,ll]
| | § ⥬ н«Ґ¬Ґвл, а ўлҐ b - гз бв®Є (ll,rr]
| | § ⥬ н«Ґ¬Ґвл, Ў®«миЁҐ b - гз бв®Є (rr,r]
| | sort (l,ll);
| | sort (rr,r);
| end;
end;
ЏҐаҐбв ®ўЄ н«Ґ¬Ґв®ў б®авЁа㥬®Ј® гз бвЄ а бб¬ ваЁў « бм ў
Ј« ўҐ ® ¬ ббЁў е (нв® ¬®¦® ᤥ« вм § ўаҐ¬п, Їа®Ї®ажЁ® «м®Ґ
¤«ЁҐ гз бвЄ ). Љ®Ґз®бвм Ј«гЎЁл ४габЁЁ Ј а вЁагҐвбп ⥬,
зв® ¤«Ё б®авЁа㥬®Ј® гз бвЄ Є ¦¤®¬ га®ўҐ ४габЁЁ
㬥ми Ґвбп е®вп Ўл 1.
7.4.7. („«п § Є®¬ле б ®б®ў ¬Ё ⥮ਨ ўҐа®пв®б⥩). „®Є -
§ вм, зв® ¬ ⥬ вЁзҐбЄ®Ґ ®¦Ё¤ ЁҐ зЁб« ®ЇҐа жЁ© ЇаЁ а Ў®вҐ нв®-
Ј® «Ј®аЁв¬ Ґ ЇаҐў®б室Ёв C*n*log n, ЇаЁзҐ¬ Є®бв в C Ґ § -
ўЁбЁв ®в б®авЁа㥬®Ј® ¬ ббЁў .
“Є § ЁҐ. Џгбвм T(n) - ¬ ЄбЁ¬г¬ ¬ ⥬ вЁзҐбЄ®Ј® ®¦Ё¤ Ёп
зЁб« ®ЇҐа жЁ© ¤«п ўбҐе ўе®¤®ў ¤«Ёл n. €§ ⥪бв Їа®жҐ¤гал ўл-
⥪ Ґв в Є®Ґ Ґа ўҐбвў®:
T(n) <= Cn + 1/n [б㬬 Ї® ўбҐ¬ k+l=(n-1) зЁбҐ« T(k)+T(l)]
ЏҐаўл© з«Ґ ᮮ⢥вбвўгҐв а бЇаҐ¤Ґ«ҐЁо н«Ґ¬Ґв®ў ¬ҐмиЁҐ,
а ўлҐ Ё Ў®«миЁҐ. ‚в®а®© з«Ґ - нв® б।ҐҐ ¬ ⥬ вЁзҐбЄ®Ґ ®¦Ё-
¤ ЁҐ ¤«п ўбҐе ў аЁ в®ў б«гз ©®Ј® ўлЎ®а . (‘ва®Ј® Ј®ў®ап, Ї®б-
Є®«мЄг б।Ё н«Ґ¬Ґв®ў ¬®Јгв Ўлвм а ўлҐ, ў Їа ў®© з бвЁ ў¬Ґбв®
T(k) Ё T(l) ¤®«¦л бв®пвм ¬ ЄбЁ¬г¬л T(x) Ї® ўбҐ¬ x, Ґ ЇаҐў®бе®-
¤пйЁ¬ k Ё«Ё l, ® нв® Ґ ¬Ґи Ґв ¤ «мҐ©иЁ¬ а бб㦤ҐЁп¬.) „ «ҐҐ
Ё¤гЄжЁҐ© Ї® n 㦮 ¤®Є §лў вм ®жҐЄг T(n) <= C'nlog n. ЏаЁ
н⮬ ¤«п ўлзЁб«ҐЁп б।ҐЈ® § 票п x log x Ї® ўбҐ¬
x=1,..,n-1 㦮 ЁвҐЈаЁа®ў вм x lnx Ї® з бвп¬ Є Є lnx * d(x*x).
ЏаЁ ¤®бв в®з® Ў®«м讬 C' з«Ґ Cn ў Їа ў®© з бвЁ ЇҐаҐўҐиЁў Ґвбп
§ бзҐв ЁвҐЈа « x*x*d(ln x), Ё Ё¤гЄвЁўл© и Ј Їа®е®¤Ёв.
7.4.8. €¬ҐҐвбп ¬ ббЁў Ё§ n а §«Ёзле 楫ле зЁбҐ« a[1]..a[n]
Ё зЁб«® k. ’ॡгҐвбп ©вЁ k-®Ґ Ї® ўҐ«ЁзЁҐ зЁб«® ў н⮬ ¬ ббЁ-
ўҐ, ᤥ« ў Ґ Ў®«ҐҐ C*n ¤Ґ©бвўЁ©, Ј¤Ґ C - ҐЄ®в®а п Є®бв в ,
Ґ § ўЁбпй п ®в k.
‡ ¬Ґз ЁҐ. ‘®авЁа®ўЄ Ї®§ў®«пҐв ®зҐўЁ¤л¬ ®Ўа §®¬ ᤥ« вм
нв® § C*n*log(n) ¤Ґ©бвўЁ©. ЋзҐўЁ¤л© бЇ®б®Ў: ©вЁ Ё¬ҐмиЁ©
н«Ґ¬Ґв, § ⥬ ©вЁ ўв®а®©, § ⥬ ваҐвЁ©,..., k-л© вॡгҐв Ї®-
ап¤Є k*n ¤Ґ©бвўЁ©, в® Ґбвм Ґ Ј®¤Ёвбп (Є®бв в ЇаЁ n § ўЁбЁв
®в k).
“Є § ЁҐ. €§пйл© (е®вп Їа ЄвЁзҐбЄЁ Ё ЎҐбЇ®«Ґ§л© -
Є®бв вл б«ЁиЄ®¬ ўҐ«ЁЄЁ) бЇ®б®Ў ᤥ« вм нв® в Є®ў:
Ђ. ђ §®ЎмҐ¬ и ¬ ббЁў n/5 ЈагЇЇ, ў Є ¦¤®© Ё§ Є®в®але Ї®
5 н«Ґ¬Ґв®ў. Љ ¦¤го ЈагЇЇг гЇ®а冷稬.
Ѓ. ђ бᬮваЁ¬ б।ЁҐ н«Ґ¬Ґвл ўбҐе ЈагЇЇ Ё ЇҐаҐЇЁиҐ¬ Ёе ў
¬ ббЁў Ё§ n/5 н«Ґ¬Ґв®ў. ‘ Ї®¬®ймо ४габЁў®Ј® ўл§®ў ©¤Ґ¬
б।Ё© Ї® ўҐ«ЁзЁҐ н«Ґ¬Ґв нв®Ј® ¬ ббЁў .
‚. ‘а ўЁ¬ нв®в н«Ґ¬Ґв б® ўбҐ¬Ё н«Ґ¬Ґв ¬Ё Ёб室®Ј® ¬ б-
бЁў : ®Ё а §¤Ґ«пвбп Ў®«миЁҐ ҐЈ® Ё ¬ҐмиЁҐ ҐЈ® (Ё ®¤Ё а ўл©
Ґ¬г). Џ®¤бзЁв ў Є®«ЁзҐбвў® вҐе Ё ¤агЈЁе, ¬л г§ Ґ¬, ў Є Є®© Ё§
нвЁе з б⥩ ¤®«¦Ґ 室Ёвбп ЁбЄ®¬л© (k-л©) н«Ґ¬Ґв Ё Є Є®ў ®
в ¬ Ї® Ї®ап¤Єг.
ѓ. ЏаЁ¬ҐЁ¬ ४габЁў® и «Ј®аЁв¬ Є ўлЎа ®© з бвЁ.
Џгбвм T(n) - ¬ ЄбЁ¬ «м® ў®§¬®¦®Ґ зЁб«® ¤Ґ©бвўЁ©, Ґб«Ё
нв®в бЇ®б®Ў ЇаЁ¬Ґпвм Є ¬ ббЁў ¬ Ё§ Ґ Ў®«ҐҐ 祬 n н«Ґ¬Ґв®ў (k
¬®¦Ґв Ўлвм Є ЄЁ¬ гЈ®¤®). €¬ҐҐ¬ ®жҐЄг:
T(n) <= Cn + T(n/5) + T(ЇаЁ¬Ґа® 0.7n)
Џ®б«Ґ¤ҐҐ б« Ј Ґ¬®Ґ ®ЎкпбпҐвбп в Є: ЇаЁ а §ЎЁҐЁЁ з бвЁ Є ¦-
¤ п з бвм ᮤҐа¦Ёв Ґ ¬ҐҐҐ 0.3n н«Ґ¬Ґв®ў. ‚ б ¬®¬ ¤Ґ«Ґ, Ґб«Ё x
- б।Ё© Ё§ б।Ёе, в® ЇаЁ¬Ґа® Ї®«®ўЁ ўбҐе б।Ёе ¬ҐмиҐ
x. Ђ Ґб«Ё ў ЇпвҐаЄҐ б।Ё© н«Ґ¬Ґв ¬ҐмиҐ x, в® ҐйҐ ¤ў § ўҐ¤®-
¬® ¬ҐмиҐ x. ’Ґ¬ б ¬л¬ Ї® Єа ©Ґ© ¬ҐаҐ 3/5 ®в Ї®«®ўЁл н«Ґ¬Ґв®ў
¬ҐмиҐ x.
’ҐЇҐам Ї® Ё¤гЄжЁЁ ¬®¦® ¤®Є § вм ®жҐЄг T(n) <= Cn (аҐи -
ойго а®«м ЇаЁ н⮬ ЁЈа Ґв в® ®Ўбв®п⥫мбвў®, зв® 1/5 + 0.7 < 1).
7.1. ЏаЁ¬Ґал ४габЁўле Їа®Ја ¬¬.
ЏаЁ «Ё§Ґ ४габЁў®© Їа®Ја ¬¬л ў®§ЁЄ Ґв, Є Є ®Ўлз®, ¤ў
ў®Їа®б :
( ) Ї®зҐ¬г Їа®Ја ¬¬ § Є зЁў Ґв а Ў®вг?
(Ў) Ї®зҐ¬г ® а Ў®в Ґв Їа ўЁ«м®, Ґб«Ё § Є зЁў Ґв
а Ў®вг?
„«п (Ў) ¤®бв в®з® Їа®ўҐаЁвм, зв® (ᮤҐа¦ й п ४габЁўл©
ўл§®ў) Їа®Ја ¬¬ а Ў®в Ґв Їа ўЁ«м®, ЇаҐ¤Ї®«®¦Ёў, зв® ўл§лў Ґ¬ п
Ґо ®¤®Ё¬Ґ п Їа®Ја ¬¬ а Ў®в Ґв Їа ўЁ«м®. ‚ б ¬®¬ ¤Ґ«Ґ, ў
н⮬ б«гз Ґ ў 楯®зЄҐ ४габЁў® ўл§лў Ґ¬ле Їа®Ја ¬¬ ўбҐ Їа®Ј-
а ¬¬л а Ў®в ов Їа ўЁ«м® (гЎҐ¦¤ Ґ¬бп ў н⮬, Ё¤п ®в Є®ж 楯®з-
ЄЁ Є з «г).
—в®Ўл ¤®Є § вм ( ), ®Ўлз® Їа®ўҐапов, зв® б Є ¦¤л¬ ४га-
бЁўл¬ ўл§®ў®¬ § 票Ґ Є Є®Ј®-в® Ї а ¬Ґва 㬥ми Ґвбп, Ё нв®
Ґ ¬®¦Ґв Їа®¤®«¦ вмбп ЎҐбЄ®Ґз®.
7.1.1. Ќ ЇЁб вм ४габЁўго Їа®жҐ¤гаг ўлзЁб«ҐЁп д Єв®аЁ «
楫®Ј® Ї®«®¦ЁвҐ«м®Ј® зЁб« n (в.Ґ. Їа®Ё§ўҐ¤ҐЁп зЁбҐ« 1..n,
®Ў®§ з Ґ¬®Ј® n!).
ђҐиҐЁҐ. €бЇ®«м§гҐ¬ а ўҐбвў 1!=1, n!= (n-1)!*n.
procedure factorial (n: integer; var fact: integer);
| {Ї®«®¦Ёвм fact а ўл¬ д Єв®аЁ «г зЁб« y}
begin
| if n=1 then begin
| | fact:=1;
| end else begin {n>1}
| | factorial (n-1, fact);
| | fact:= fact*n;
| end;
end;
‘ ЁбЇ®«м§®ў ЁҐ¬ Їа®жҐ¤га-дгЄжЁ© ¬®¦® ЇЁб вм в Є:
function factorial (n: integer): integer;
begin
| if n=1 then begin
| | factorial:=1;
| end else begin {n>1}
| | factorial:= factorial (n-1)*n;
| end;
end;
ЋЎа вЁвҐ ўЁ¬ ЁҐ ҐЄ®в®аго ¤ў®©б⢥®бвм ЁбЇ®«м§®ў Ёп Ё¬Ґ-
Ё factorial ўгваЁ ®ЇЁб Ёп дгЄжЁЁ: ®® ®Ў®§ з Ґв Є Є ЇҐаҐ-
¬Ґго, в Є Ё ўл§лў Ґ¬го ४габЁў® дгЄжЁо. Љ бз бвмо, ў 襬
б«гз Ґ ®Ё а §«Ёз овбп Ї® бЄ®ЎЄ ¬ Ї®б«Ґ Ё¬ҐЁ, ® Ґб«Ё Ўл
дгЄжЁп Ўл« ЎҐ§ Ї а ¬Ґва®ў, в® ¤Ґ«® Ўл«® Ўл Ї«®е®. (‘в -
¤ ав п, ® ва㤮 室Ё¬ п ®иЁЎЄ ў®§ЁЄ Ґв, Ґб«Ё ўв®а Ї®« -
Ј Ґв, зв® ® ЁбЇ®«м§гҐв § 票Ґ ЇҐаҐ¬Ґ®©, Є®¬ЇЁ«пв®а ў н⮬
¬Ґб⥠ўЁ¤Ёв ४габЁўл© ўл§®ў.)
7.1.2. ЋЎлз® д Єв®аЁ « ®ЇаҐ¤Ґ«пов Ё ¤«п г«п, бзЁв п, зв®
0!=1. €§¬ҐЁвҐ Їа®Ја ¬¬л ᮮ⢥вб⢥®.
7.1.3. Ќ ЇЁиЁвҐ ४габЁўго Їа®Ја ¬¬г ў®§ўҐ¤ҐЁп ў 楫го Ґ-
®ваЁж ⥫мго б⥯Ґм.
7.1.4. ’® ¦Ґ, Ґб«Ё вॡгҐвбп, зв®Ўл Ј«гЎЁ ४габЁЁ Ґ ЇаҐ-
ў®б室Ё« C*log n, Ј¤Ґ n - б⥯Ґм.
ђҐиҐЁҐ.
function power (a,n: integer): integer;
begin
| if n = 0 then begin
| | power:= 1;
| end else if n mod 2 = 0 then begin
| | power:= power(a*2, n div 2);
| end else begin
| | power:= power(a, n-1)*a;
| end;
end;
7.1.5. —в® Ўг¤Ґв, Ґб«Ё Ё§¬ҐЁвм Їа®Ја ¬¬г, ЇаЁўҐ¤Ґго ў
аҐиҐЁЁ ЇаҐ¤л¤г饩 § ¤ зЁ, § ¬ҐЁў бва®Єг
power:= power(a*2, n div 2)
power:= power(a, n div 2)* power(a, n div 2)?
ђҐиҐЁҐ. Џа®Ја ¬¬ ®бв Ґвбп Їа ўЁ«м®©. Ћ¤ Є® ® бв Ґв
а Ў®в вм ¬Ґ¤«ҐҐҐ. „Ґ«® ў ⮬, з⮠⥯Ґам ўл§®ў ¬®¦Ґв Ї®а®¤Ёвм
¤ў ўл§®ў (е®вп Ё ®¤Ё Є®ўле) ў¬Ґбв® ®¤®Ј® - Ё зЁб«® ўл§®ў®ў
Ўлбва® а бвҐв б Ј«гЎЁ®© ४габЁЁ. Џа®Ја ¬¬ Ї®-ЇаҐ¦Ґ¬г Ё¬ҐҐв
«®Ј аЁд¬ЁзҐбЄго Ј«гЎЁг ४габЁЁ, ® зЁб«® и Ј®ў а Ў®вл бв ®-
ўЁвбп «ЁҐ©л¬ ў¬Ґбв® «®Ј аЁд¬ЁзҐбЄ®Ј®.
ќв®в Ґ¤®бв в®Є ¬®¦® гбва Ёвм, ЇЁб ў
t:= power(a, n div 2);
power:= t*t;
Ё«Ё ў®бЇ®«м§®ў ўиЁбм дгЄжЁҐ© ў®§ўҐ¤ҐЁп ў Єў ¤а в (sqr).
7.1.6. €бЇ®«м§гп «Ёим Є®¬ ¤л write(x) ЇаЁ x=0..9, ЇЁб вм
४габЁўго Їа®Ја ¬¬г ЇҐз вЁ ¤ҐбпвЁз®© § ЇЁбЁ 楫®Ј® Ї®«®¦Ё-
⥫쮣® зЁб« n.
ђҐиҐЁҐ. ‡¤Ґбм ЁбЇ®«м§®ў ЁҐ ४габЁЁ ®Ў«ҐЈз Ґв ¦Ё§м
(Їа®Ў«Ґ¬ Ўл« ў ⮬, зв® жЁдал «ҐЈзҐ Ї®«гз вм б Є®ж , ЇҐз -
в вм ¤® б з « ).
procedure print (n:integer); {n>0}
begin
| if n<10 then begin
| | write (n);
| end else begin
| | print (n div 10);
| | write (n mod 10);
| end;
end;
7.1.7. €Ја "• ®©бЄЁҐ Ў иЁ" б®бв®Ёв ў б«Ґ¤го饬. …бвм ваЁ
бвҐа¦п. Ќ ЇҐаўл© Ё§ Ёе ¤Ґв ЇЁа ¬Ё¤Є Ё§ n Є®«Ґж (Ў®«миЁҐ
Є®«мж бЁ§г, ¬ҐмиЁҐ ᢥаег). ’ॡгҐвбп ЇҐаҐ¬ҐбвЁвм Є®«мж
¤агЈ®© бвҐа¦Ґм. ђ §аҐи Ґвбп ЇҐаҐЄ« ¤лў вм Є®«мж б® бвҐа¦п
бвҐа¦Ґм, ® Є« бвм Ў®«м襥 Є®«мж® Ї®ўҐае ¬Ґм襣® Ґ«м§п. ‘®б-
в ўЁвм Їа®Ја ¬¬г, гЄ §лў ойго ваҐЎгҐ¬лҐ ¤Ґ©бвўЁп.
ђҐиҐЁҐ. Ќ ЇЁиҐ¬ ४габЁўго Їа®жҐ¤гаг ЇҐаҐ¬ҐйҐЁп i
ўҐаеЁе Є®«Ґж б m-Ј® бвҐа¦п n-л© (ЇаҐ¤Ї®« Ј Ґвбп, зв® ®б-
в «млҐ Є®«мж Ў®«миҐ Ї® а §¬Ґаг Ё «Ґ¦ в бвҐа¦пе ЎҐ§ ¤ўЁ¦Ґ-
Ёп).
procedure move(i,m,n: integer);
| var s: integer;
begin
| if i = 1 then begin
| | writeln ('ᤥ« вм 室', m, '->', n);
| end else begin
| | s:=6-m-n; {s - ваҐвЁ© бвҐа¦Ґм: б㬬 ®¬Ґа®ў а ў 6}
| | move (i-1, m, s);
| | writeln ('ᤥ« вм 室', m, '->', n);
| | move (i-1, s, n);
| end;
end;
(‘ з « ЇҐаҐ®бЁвбп ЇЁа ¬Ё¤Є Ё§ i-1 Є®«Ґж ваҐвмо Ї «®зЄг.
Џ®б«Ґ нв®Ј® i-®Ґ Є®«мж® ®бў®Ў®¦¤ Ґвбп, Ё ҐЈ® ¬®¦® ЇҐаҐҐбвЁ Єг-
¤ б«Ґ¤гҐв. Ћбв Ґвбп Ї®«®¦Ёвм ҐЈ® ЇЁа ¬Ё¤Єг.)
7.2. ђҐЄгабЁў п ®Ўа Ў®вЄ ¤ҐаҐўмҐў
„ў®Ёзл¬ ¤ҐаҐў®¬ §лў Ґвбп Є авЁЄ ўа®¤Ґ
o
\
o o
\ /
o o
\ /
o
ЌЁ¦пп ўҐаиЁ §лў Ґвбп Є®аҐ¬. €§ Є ¦¤®© ўҐаиЁл ¬®Јгв Ё¤вЁ
¤ўҐ «ЁЁЁ: ў«Ґў® ўўҐае Ё ўЇа ў® ўўҐае. ‚ҐаиЁл, Єг¤ ®Ё ўҐ¤гв,
§лў овбп «Ґўл¬ Ё Їа ўл¬ бл®ўмп¬Ё Ёб室®© ўҐаиЁл. ‚ҐаиЁ
¬®¦Ґв Ё¬Ґвм ¤ўге бл®ўҐ©, ¬®¦Ґв Ё¬Ґвм в®«мЄ® ®¤®Ј® бл («Ґ-
ў®Ј® Ё«Ё Їа ў®Ј®). Ћ ¬®¦Ґв Ё ў®ўбҐ Ґ Ё¬Ґвм бл®ўҐ©, Ё ў н⮬
б«гз Ґ §лў Ґвбп «Ёб⮬.
Џгбвм x - Є Є п-в® ўҐаиЁ ¤ў®Ёз®Ј® ¤ҐаҐў . Ћ б ¬ ў¬Ґб-
⥠б бл®ўмп¬Ё, ўгЄ ¬Ё, Їа ўгЄ ¬Ё Ё в.¤. ®Ўа §гҐв Ї®¤¤ҐаҐў® б
Є®аҐ¬ ў x - "Ї®¤¤ҐаҐў® Ї®в®¬Є®ў x".
‚ б«Ґ¤гойЁе § ¤ з е ¬л ЇаҐ¤Ї®« Ј Ґ¬, зв® ўҐаиЁл ¤ҐаҐў
Їа®г¬Ґа®ў л 楫묨 Ї®«®¦ЁвҐ«мл¬Ё зЁб« ¬Ё, ЇаЁзҐ¬ ®¬Ґа ўбҐе
ўҐаиЁ а §«Ёзл. Њл бзЁв Ґ¬, зв® ®¬Ґа Є®ап еа Ёвбп ў ЇҐаҐ¬Ґ-
®© root. Њл бзЁв Ґ¬, зв® Ё¬Ґовбп ¤ў ¬ ббЁў
l,r: array [1..N] of integer
Ё «Ґўл© Ё Їа ўл© бл ўҐаиЁл б ®¬Ґа®¬ i Ё¬Ґов ᮮ⢥вб⢥®
®¬Ґа l[i] Ё r[i]. …б«Ё ўҐаиЁ б ®¬Ґа®¬ i Ґ Ё¬ҐҐв «Ґў®Ј®
(Ё«Ё Їа ў®Ј®) бл , в® l[i] (ᮮ⢥вб⢥® r[i]) а ў® 0. (Џ®
ва ¤ЁжЁЁ ЇаЁ § ЇЁбЁ Їа®Ја ¬¬ ¬л ЁбЇ®«м§гҐ¬ ў¬Ґбв® г«п Є®бв вг
nil, а ўго г«о.)
‡¤Ґбм N - ¤®бв в®з® Ў®«м讥 вга «м®Ґ зЁб«® (®¬Ґа ўбҐе
ўҐаиЁ Ґ ЇаҐў®б室пв N). Ћв¬ҐвЁ¬, зв® ®¬Ґа ўҐаиЁл ЁЄ Є Ґ
бўп§ б ҐҐ Ї®«®¦ҐЁҐ¬ ў ¤ҐаҐўҐ Ё зв® Ґ ўбҐ зЁб« ®в 1 ¤® N
®Ўп§ л Ўлвм ®¬Ґа ¬Ё ўҐаиЁ (Ё, б«Ґ¤®ў ⥫м®, з бвм ¤ ле ў
¬ ббЁў е l Ё r - нв® ¬гб®а).
7.2.1. Џгбвм N=7, root=3, ¬ ббЁўл l Ё r в Є®ўл:
i | 1 2 3 4 5 6 7
l[i] | 0 0 1 0 6 0 7
r[i] | 0 0 5 3 2 0 7
Ќ аЁб®ў вм ᮮ⢥вбвўго饥 ¤ҐаҐў®.
ЋвўҐв: 6 2
\ /
1 5
\ /
3
7.2.2. Ќ ЇЁб вм Їа®Ја ¬¬г Ї®¤бзҐв зЁб« ўҐаиЁ ў ¤ҐаҐўҐ.
ђҐиҐЁҐ. ђ бᬮваЁ¬ дгЄжЁо n(x), а ўго зЁб«г ўҐаиЁ ў
Ї®¤¤ҐаҐўҐ б Є®аҐ¬ ў ўҐаиЁҐ ®¬Ґа x. ‘зЁв Ґ¬, зв® n(nil)=0 (Ї®-
« Ј п ᮮ⢥вбвўго饥 Ї®¤¤ҐаҐў® Їгбвл¬), Ё Ґ § Ў®вЁ¬бп ® § зҐ-
Ёпе nil(s) ¤«п зЁбҐ« s, Ґ пў«пойЁебп ®¬Ґа ¬Ё ўҐаиЁ. ђҐЄга-
бЁў п Їа®Ја ¬¬ ¤«п s в Є®ў :
function n (x:integer):integer;
begin
| if x = nil then begin
| | n:= 0;
| end else begin
| | n:= n(l[x]) + n(r[x]) + 1;
| end;
end;
(—Ёб«® ўҐаиЁ ў Ї®¤¤ҐаҐўҐ ¤ ўҐаиЁ®© x а ў® б㬬Ґ зЁбҐ« ўҐа-
иЁ ¤ ҐҐ бл®ўмп¬Ё Ї«об ® б ¬ .) ѓ«гЎЁ ४габЁЁ Є®Ґз ,
в Є Є Є б Є ¦¤л¬ и Ј®¬ ўлб®в ᮮ⢥вбвўго饣® Ї®¤¤ҐаҐў
㬥ми Ґвбп.
7.2.3. Ќ ЇЁб вм Їа®Ја ¬¬г Ї®¤бзҐв зЁб« «Ёбв쥢 ў ¤ҐаҐўҐ.
ЋвўҐв.
function n (x:integer):integer;
begin
| if x = nil then begin
| | n:= 0;
| end else if (l[x]=nil) and (r[x]=nil) then begin {«Ёбв}
| | n:= 1;
| end;
| end else begin
| | n:= n(l[x]) + n(r[x]);
| end;
end;
7.2.4. Ќ ЇЁб вм Їа®Ја ¬¬г Ї®¤бзҐв ўлб®вл ¤ҐаҐў (Є®аҐм
Ё¬ҐҐв ўлб®вг 0, ҐЈ® бл®ўмп - ўлб®вг 1, ўгЄЁ - 2 Ё в.Ї.; ўлб®в
¤ҐаҐў - нв® ¬ ЄбЁ¬г¬ ўлб®в ҐЈ® ўҐаиЁ).
“Є § ЁҐ. ђҐЄгабЁў® ®ЇаҐ¤Ґ«пҐвбп дгЄжЁп f(x) = ўлб®в
Ї®¤¤ҐаҐў б Є®аҐ¬ ў x.
7.2.5. Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п Ї® § ¤ ®¬г n бзЁв Ґв
зЁб«® ўбҐе ўҐаиЁ ўлб®вл n (ў § ¤ ®¬ ¤ҐаҐўҐ).
‚¬Ґбв® Ї®¤бзҐв Є®«ЁзҐбвў ўҐаиЁ в®Ј® Ё«Ё Ё®Ј® த ¬®¦®
Їа®бЁвм ЇҐз в вм бЇЁб®Є нвЁе ўҐаиЁ (ў ⮬ Ё«Ё Ё®¬ Ї®ап¤ЄҐ).
7.2.6. Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п ЇҐз в Ґв (Ї® ®¤®¬г а -
§г) ўбҐ ўҐаиЁл ¤ҐаҐў .
ђҐиҐЁҐ. Џа®жҐ¤га print_subtree(x) ЇҐз ⠥⠢ᥠўҐаиЁл
Ї®¤¤ҐаҐў б Є®аҐ¬ ў x Ї® ®¤®¬г а §г; Ј« ў п Їа®Ја ¬¬ ᮤҐа-
¦Ёв ўл§®ў print_subtree(root).
procedure print_subtree (x:integer);
begin
| if x = nil then begin
| | {ЁзҐЈ® Ґ ¤Ґ« вм}
| end else begin
| | writeln (x);
| | print_subtree (l[x]);
| | print_subtree (r[x]);
| end;
end;
„ п Їа®Ја ¬¬ ЇҐз в Ґв б з « Є®аҐм Ї®¤¤ҐаҐў , § ⥬ Ї®¤¤Ґ-
ॢ® ¤ «Ґўл¬ б뮬, § ⥬ ¤ Їа ўл¬. ’аЁ бва®ЄЁ ў else-з б-
вЁ ¬®Јгв Ўлвм ЇҐаҐбв ў«Ґл 6 бЇ®б®Ў ¬Ё, Ё Є ¦¤л© Ё§ нвЁе бЇ®б®-
Ў®ў ¤ Ґв бў®© Ї®а冷Є ЇҐз вЁ ўҐаиЁ.
7.3. Џ®а®¦¤ҐЁҐ Є®¬ЎЁ в®але ®ЎкҐЄв®ў, ЇҐаҐЎ®а
ђҐЄгабЁўлҐ Їа®Ја ¬¬л пў«повбп 㤮Ўл¬ бЇ®б®Ў®¬ Ї®а®¦¤ҐЁп
Є®¬ЎЁ в®але ®ЎкҐЄв®ў § ¤ ®Ј® ўЁ¤ . Њл аҐиЁ¬ § ®ў® ҐбЄ®«мЄ®
§ ¤ з б®®вўвҐвбўго饩 Ј« ўл.
7.3.1. Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п ЇҐз в Ґв Ї® ®¤®¬г а §г
ўбҐ Ї®б«Ґ¤®ў ⥫м®бвЁ ¤«Ёл n, б®бв ў«ҐлҐ Ё§ зЁбҐ« 1..k (Ёе
Є®«ЁзҐбвў® а ў® k ў б⥯ҐЁ n).
ђҐиҐЁҐ. Џа®Ја ¬¬ Ўг¤Ґв ®ЇҐаЁа®ў вм б ¬ ббЁў®¬ a[1]..a[n]
Ё зЁб«®¬ t. ђҐЄгабЁў п Їа®жҐ¤га generate ЇҐз ⠥⠢ᥠЇ®б«Ґ¤®-
ў ⥫м®бвЁ, зЁ ойЁҐбп a[1]..a[t]; Ї®б«Ґ ҐҐ ®Є®з Ёп t
Ё¬ҐҐв в® ¦Ґ § 票Ґ, зв® Ё ў з «Ґ:
procedure generate;
| var i,j : integer;
begin
| if t = n then begin
| | for i:=1 to n do begin
| | | write(a[i]);
| | end;
| | writeln;
| end else begin {t < n}
| | for j:=1 to k do begin
| | | t:=t+1;
| | | a[t]:=j;
| | | generate;
| | | t:=t-1;
| | end;
| end;
end;
Ћб®ў п Їа®Ја ¬¬ ⥯Ґам б®бв®Ёв Ё§ ¤ўге ®ЇҐа в®а®ў:
t:=0; generate;
7.3.2. Ќ ЇЁб вм Їа®Ја ¬¬г, Є®в®а п ЇҐз в « Ўл ўбҐ ЇҐаҐбв -
®ўЄЁ зЁбҐ« 1..n Ї® ®¤®¬г а §г.
ђҐиҐЁҐ. Џа®Ја ¬¬ ®ЇҐаЁагҐв б ¬ ббЁў®¬ a[1]..a[n], ў Є®в®-
஬ еа Ёвбп ЇҐаҐбв ®ўЄ зЁбҐ« 1..n. ђҐЄгабЁў п Їа®жҐ¤га
generate ў в Є®© бЁвг жЁЁ ЇҐз ⠥⠢ᥠЇҐаҐбв ®ўЄЁ, Є®в®алҐ
ЇҐаўле t Ї®§ЁжЁпе б®ўЇ ¤ ов б ЇҐаҐбв ®ўЄ®© a; Ї® ўл室Ґ Ё§ ҐҐ
ЇҐаҐ¬ҐлҐ t Ё a Ё¬Ґов ⥠¦Ґ § 票п, зв® Ё ¤® ўе®¤ . Ћб®ў п
Їа®Ја ¬¬ в Є®ў :
for i:=1 to n do begin a[i]:=i; end;
t:=0;
generate;
ў®в ®ЇЁб ЁҐ Їа®жҐ¤гал:
procedure generate;
| var i,j : integer;
begin
| if t = n then begin
| | for i:=1 to n do begin
| | | write(a[i]);
| | end;
| | writeln;
| end else begin {t < n}
| | for j:=t+1 to n do begin
| | | Ї®¬Ґпвм ¬Ґбв ¬Ё a[t+1] Ё a[j]
| | | t:=t+1;
| | | generate;
| | | t:=t-1;
| | | Ї®¬Ґпвм ¬Ґбв ¬Ё a[t+1] Ё a[j]
| | end;
| end;
end;
7.3.3. Ќ ЇҐз в вм ўбҐ ў®§а бв ойЁҐ Ї®б«Ґ¤®ў ⥫м®бвЁ ¤«Ёл
k, н«Ґ¬Ґв ¬Ё Є®в®але пў«повбп вга «млҐ зЁб« ®в 1 ¤® n.
(ЏаҐ¤Ї®« Ј Ґвбп, зв® k Ґ ЇаҐў®б室Ёв n - Ё зҐ в ЄЁе Ї®б«Ґ¤®ў -
⥫м®б⥩ Ґ бгйҐбвўгҐв.)
ђҐиҐЁҐ. Џа®Ја ¬¬ ®ЇҐаЁагҐв б ¬ ббЁў®¬ a[1]..a[k] Ё 楫®©
ЇҐаҐ¬Ґ®© t. ЏаҐ¤Ї®« Ј п, зв® a[1]..a[t] - ў®§а бв ой п Ї®б«Ґ-
¤®ў ⥫м®бвм зЁбҐ« вга «мле зЁбҐ« Ё§ ®в१Є 1..n, ४габЁў-
® ®ЇаҐ¤Ґ«Ґ п Їа®жҐ¤га generate ЇҐз ⠥⠢ᥠҐҐ ў®§а бв ойЁҐ
Їа®¤®«¦ҐЁп ¤«Ёл k.
procedure generate;
| var i: integer;
begin
| if t = k then begin
| | ЇҐз в вм a[1]..a[k]
| end else begin
| | t:=t+1;
| | for i:=a[t-1]+1 to t-k+n do begin
| | | a[t]:=i;
| | | generate;
| | end;
| | t:=t-1;
| end;
end;
‡ ¬Ґз ЁҐ. –ЁЄ« for ¬®Ј Ўл Ё¬Ґвм ўҐа奩 Ја ЁжҐ© n (ў¬Ґбв®
t-k+n). Ќ и ў аЁ в нЄ®®¬Ёв з бвм а Ў®вл, гзЁвлў п в®в д Єв,
зв® ЇаҐ¤Ї®б«Ґ¤Ё© (k-1-л©) з«Ґ Ґ ¬®¦Ґв ЇаҐў®б室Ёвм n-1,
k-2-®© з«Ґ Ґ ¬®¦Ґв ЇаҐў®б室Ёвм n-2 Ё в.Ї.
Ћб®ў п Їа®Ја ¬¬ ⥯Ґам ўлЈ«п¤Ёв в Є:
t:=1;
for j:=1 to 1-k+n do begin
| a[1]:=j;
| generate;
end;
Њ®¦® Ўл«® Ўл ¤®Ў ўЁвм Є ¬ ббЁўг a б«Ґў ҐйҐ Ё a[0]=0, Ї®«®¦Ёвм
t=0 Ё ®Ја ЁзЁвмбп Ґ¤ЁбвўҐл¬ ўл§®ў®¬ Їа®жҐ¤гал generate.
7.3.4. ЏҐаҐзЁб«Ёвм ўбҐ ЇаҐ¤бв ў«ҐЁп Ї®«®¦ЁвҐ«м®Ј® 楫®Ј®
зЁб« n ў ўЁ¤Ґ бг¬¬л Ї®б«Ґ¤®ў ⥫м®бвЁ Ґў®§а бв ойЁе 楫ле Ї®-
«®¦ЁвҐ«мле б« Ј Ґ¬ле.
ђҐиҐЁҐ. Џа®Ја ¬¬ ®ЇҐаЁагҐв б ¬ ббЁў®¬ a[1..n] (¬ ЄбЁ-
¬ «м®Ґ зЁб«® б« Ј Ґ¬ле а ў® n) Ё б 楫®© ЇҐаҐ¬Ґ®© t. ЏаҐ¤Ї®-
« Ј п, зв® a[1],...,a[t] - Ґў®§а бв ой п Ї®б«Ґ¤®ў ⥫м®бвм жҐ-
«ле зЁбҐ«, б㬬 Є®в®але Ґ ЇаҐў®б室Ёв n, Їа®жҐ¤га generate
ЇҐз ⠥⠢ᥠЇаҐ¤бв ў«ҐЁп вॡ㥬®Ј® ўЁ¤ , Їа®¤®«¦ ойЁҐ нвг
Ї®б«Ґ¤®ў ⥫м®бвм. „«п нЄ®®¬ЁЁ ўлзЁб«ҐЁ© б㬬 a[1]+...+a[t]
еа Ёвбп ў бЇҐжЁ «м®© ЇҐаҐ¬Ґ®© s.
procedure generate;
| var i: integer;
begin
| if s = n then begin
| | ЇҐз в вм Ї®б«Ґ¤®ў ⥫м®бвм a[1]..a[t]
| end else begin
| | for i:=1 to min(a[t], n-s) do begin
| | | t:=t+1;
| | | a[t]:=i;
| | | s:=s+i;
| | | generate;
| | | s:=s-i;
| | | t:=t-1;
| | end;
| end;
end;
Ћб®ў п Їа®Ја ¬¬ ЇаЁ н⮬ ¬®¦Ґв Ўлвм в Є®©:
t:=1;
for j:=1 to n do begin
| a[1]:=j
| s:=j;
| generate;
end;
‡ ¬Ґз ЁҐ. Њ®¦® Ґ¬®Ј® бнЄ®¬Ёвм, ўлҐбп ®ЇҐа жЁЁ 㢥«Ё-
зҐЁп Ё 㬥м襨п t Ё§ жЁЄ« , в Є¦Ґ Ґ ў®§ўа й п s Є ¦¤л© а §
Є Ёб室®¬г § 票о ( 㢥«ЁзЁў п ҐЈ® 1 Ё ў®§ўа й п Є Ёб室-
®¬г § зҐЁо ў Є®жҐ). Ља®¬Ґ в®Ј®, ¤®Ў ўЁў дЁЄвЁўл© н«Ґ¬Ґв
a[0]=n, ¬®¦® гЇа®бвЁвм ®б®ўго Їа®Ја ¬¬г:
t:=0; s:=0; a[0]:=n; generate;
7.3.5. Ќ ЇЁб вм ४габЁўго Їа®Ја ¬¬г ®Ўе®¤ ¤ҐаҐў (Ёб-
Ї®«м§гп ⥠¦Ґ Є®¬ ¤л Ё Їа®ўҐаЄЁ, зв® Ё ў Ј« ўҐ Їа® ®Ўе®¤ ¤ҐаҐ-
ў ).
ђҐиҐЁҐ. Џа®жҐ¤га ®Ўа Ў®в вм_ ¤ ®Ўа Ў влў Ґв ўбҐ «Ёбвмп
¤ ⥪г饩 ўҐаиЁ®© Ё § Є зЁў Ґв а Ў®вг ў в®© ¦Ґ ўҐаиЁҐ, зв®
Ё з « . ‚®в ҐҐ ४габЁў®Ґ ®ЇЁб ЁҐ:
procedure ®Ўа Ў®в вм_ ¤;
begin
| if Ґбвм_ᢥаег then begin
| | ўўҐае_ «Ґў®;
| | ®Ўа Ў®в вм_ ¤;
| | while Ґбвм_бЇа ў do begin
| | | ўЇа ў®;
| | | ®Ўа Ў®в вм_ ¤;
| | end;
| | ўЁ§;
| end else begin
| | ®Ўа Ў®в вм;
| end;
end;
7.4. „агЈЁҐ ЇаЁ¬ҐҐЁп ४габЁЁ
’®Ї®«®ЈЁзҐбЄ п б®авЁа®ўЄ . ЏаҐ¤бв ўЁ¬ ᥡҐ n зЁ®ўЁЄ®ў,
Є ¦¤л© Ё§ Є®в®але ўл¤ Ґв бЇа ўЄЁ ®ЇаҐ¤Ґ«Ґ®Ј® ўЁ¤ . Њл е®вЁ¬
Ї®«гзЁвм ўбҐ нвЁ бЇа ўЄЁ, б®Ў«о¤ п ®Ја ЁзҐЁп, гбв ®ў«ҐлҐ
зЁ®ўЁЄ ¬Ё. ЋЈа ЁзҐЁп б®бв®пв ў ⮬, зв® г Є ¦¤®Ј® зЁ®ўЁЄ
Ґбвм бЇЁб®Є бЇа ў®Є, Є®в®алҐ г¦® б®Ўа вм ЇҐаҐ¤ ®Ўа 饨Ґ¬ Є
Ґ¬г. „Ґ«® ЎҐ§ ¤Ґ¦®, Ґб«Ё б奬 § ўЁбЁ¬®б⥩ Ё¬ҐҐв жЁЄ«
(бЇа ўЄг A Ґ«м§п Ї®«гзЁвм ЎҐ§ B, B ЎҐ§ C,..., Y ЎҐ§ Z Ё Z ЎҐ§
A). ЏаҐ¤Ї®« Ј п, зв® в Є®Ј® жЁЄ« Ґв, вॡгҐвбп б®бв ўЁвм Ї« ,
гЄ §лў ойЁ© ®¤Ё Ё§ ў®§¬®¦ле Ї®ап¤Є®ў Ї®«г票п бЇа ў®Є.
€§®Ўа ¦ п зЁ®ўЁЄ®ў в®зЄ ¬Ё, § ўЁбЁ¬®бвЁ - бв५Є ¬Ё,
ЇаЁе®¤Ё¬ Є в Є®© д®а¬г«Ёа®ўЄҐ. €¬ҐҐвбп n в®зҐЄ, Їа®г¬Ґа®ў ле
®в 1 ¤® n. €§ Є ¦¤®© в®зЄЁ ўҐ¤Ґв ҐбЄ®«мЄ® (ў®§¬®¦®, 0) бв५®Є
ў ¤агЈЁҐ в®зЄЁ. (’ Є п Є авЁЄ §лў Ґвбп ®аЁҐвЁа®ў л¬ Ја -
䮬.) –ЁЄ«®ў Ґв. ’ॡгҐвбп а бЇ®«®¦Ёвм ўҐаиЁл Ја д (в®зЄЁ) ў
в Є®¬ Ї®ап¤ЄҐ, зв®Ўл Є®Ґж «оЎ®© бв५ЄЁ ЇаҐ¤иҐбвў®ў « ҐҐ з -
«г. ќв § ¤ з §лў Ґвбп в®Ї®«®ЈЁзҐбЄ®© б®авЁа®ўЄ®©.
7.4.1. „®Є § вм, зв® нв® ўбҐЈ¤ ў®§¬®¦®.
ђҐиҐЁҐ. €§ гб«®ўЁп ®вбгвбвўЁп жЁЄ«®ў ўл⥪ Ґв, зв® Ґбвм
ўҐаиЁ , Ё§ Є®в®а®© ў®®ЎйҐ Ґ ўл室Ёв бв५®Є (Ё зҐ ¬®¦® ¤ўЁ-
Ј вмбп Ї® бв५Є ¬, Ї®Є Ґ § жЁЄ«Ё¬бп). …Ґ Ўг¤Ґ¬ бзЁв вм ЇҐа-
ў®©. ‚лЄЁ¤лў п ўбҐ бв५ЄЁ, ў ҐҐ ўҐ¤гйЁҐ, ¬л бў®¤Ё¬ § ¤ зг Є
Ја дг б ¬ҐмиЁ¬ зЁб«®¬ ўҐаиЁ Ё Їа®¤®«¦ Ґ¬ а бб㦤ҐЁҐ Ї® Ё¤гЄ-
жЁЁ.
7.4.2. ЏаҐ¤Ї®«®¦Ё¬, зв® ®аЁҐвЁа®ў л© Ја д ЎҐ§ жЁЄ«®ў
еа Ёвбп ў в Є®© д®а¬Ґ: ¤«п Є ¦¤®Ј® i ®в 1 ¤® n ў num[i] еа Ёв-
бп зЁб«® ўл室пйЁе Ё§ i бв५®Є, ў adr[i][1],..., adr[i][num[i]]
- ®¬Ґа ўҐаиЁ, Єг¤ нвЁ бв५ЄЁ ўҐ¤гв. ‘®бв ўЁвм (४габЁўл©)
«Ј®аЁв¬, Є®в®ал© Їа®Ё§ў®¤Ёв в®Ї®«®ЈЁзҐбЄго б®авЁа®ўЄг Ґ Ў®«ҐҐ
祬 § C*(n+m) ¤Ґ©бвўЁ©, Ј¤Ґ m - зЁб«® ॡҐа Ја д (бв५®Є).
‡ ¬Ґз ЁҐ. ЌҐЇ®б।б⢥ п ॠ«Ё§ жЁп ЇаЁўҐ¤Ґ®Ј® ўлиҐ
¤®Є § ⥫мбвў бгйҐбвў®ў Ёп Ґ ¤ Ґв вॡ㥬®© ®жҐЄЁ; ҐҐ ЇаЁе®-
¤Ёвбп Ґ¬®Ј® Ї®¤Їа ўЁвм.
ђҐиҐЁҐ. Ќ и Їа®Ја ¬¬ Ўг¤Ґв ЇҐз в вм ®¬Ґа ўҐаиЁ. ‚
¬ ббЁўҐ printed: array[1..n] of boolean ¬л Ўг¤Ґ¬ еа Ёвм ᢥ¤Ґ-
Ёп ® ⮬, Є ЄЁҐ ўҐаиЁл ЇҐз в л (Ё Є®а४вЁа®ў вм Ёе ®¤®ў-
६Ґ® б ЇҐз вмо ўҐаиЁл). Ѓг¤Ґ¬ Ј®ў®аЁвм, зв® ЇҐз в п
Ї®б«Ґ¤®ў ⥫м®бвм ўҐаиЁ Є®а४в , Ґб«Ё ЁЄ Є п ўҐаиЁ Ґ -
ЇҐз в ¤ў ¦¤л Ё ¤«п «оЎ®Ј® ®¬Ґа i, ўе®¤п饣® ў нвг Ї®б«Ґ¤®б-
⥫м®бвм, ўбҐ ўҐаиЁл, ў Є®в®алҐ ўҐ¤гв бв५ЄЁ Ё§ i, ЇҐз в -
л, Ё ЇаЁв®¬ ¤® i.
procedure add (i: 1..n);
| {¤ ®: ЇҐз в ®Ґ Є®а४в®;}
| { ¤®: ЇҐз в ®Ґ Є®а४⮠Ё ўЄ«оз Ґв ўҐаиЁг i}
begin
| if printed [i] then begin {ўҐаиЁ i 㦥 ЇҐз в }
| | {ЁзҐЈ® ¤Ґ« вм Ґ ¤®}
| end else begin
| | { ЇҐз в ®Ґ Є®а४в®}
| | for j:=1 to num[i] do begin
| | | add(adr[i][j]);
| | end;
| | { ЇҐз в ®Ґ Є®а४в®, ўбҐ ўҐаиЁл, ў Є®в®алҐ Ё§
| | i ўҐ¤гв бв५ЄЁ, 㦥 ЇҐз в л - в Є зв® ¬®¦®
| | ЇҐз в вм i, Ґ аги п Є®а४в®бвЁ}
| | if not printed[i] then begin
| | | writeln(i); printed [i]:= TRUE;
| | end;
| end;
end;
Ћб®ў п Їа®Ја ¬¬ :
for i:=1 to n do begin
| printed[i]:= FALSE;
end;
for i:=1 to n do begin
| add(i)
end;
7.4.3. ‚ ЇаЁўҐ¤Ґ®© Їа®Ја ¬¬Ґ ¬®¦® ўлЎа®бЁвм Їа®ўҐаЄг,
§ ¬ҐЁў
if not printed[i] then begin
| writeln(i); printed [i]:= TRUE;
end;
writeln(i); printed [i]:= TRUE;
Џ®зҐ¬г? Љ Є Ё§¬ҐЁвбп бЇҐжЁдЁЄ жЁп Їа®жҐ¤гал?
ђҐиҐЁҐ. ‘ЇҐжЁдЁЄ жЁо ¬®¦® ўлЎа вм в Є®©:
¤ ®: ЇҐў в ®Ґ Є®а४в®
¤®: ЇҐз в ®Ґ Є®а४⮠Ё ўЄ«оз Ґв ўҐаиЁг i;
ўбҐ ў®ўм ЇҐз в лҐ ўҐаиЁл ¤®бвгЇл Ё§ i.
7.4.4. ѓ¤Ґ ЁбЇ®«м§®ў в®в д Єв, зв® Ја д Ґ Ё¬ҐҐв жЁЄ«®ў?
ђҐиҐЁҐ. Њл ®ЇгбвЁ«Ё ¤®Є § ⥫мбвў® Є®Ґз®бвЁ Ј«гЎЁл аҐ-
ЄгабЁЁ. „«п Є ¦¤®© ўҐаиЁл а бᬮваЁ¬ ҐҐ "Ј«гЎЁг" - ¬ ЄбЁ-
¬ «мго ¤«Ёг ЇгвЁ Ї® бв५Є ¬, Ё§ ҐҐ ўл室п饣®. “б«®ўЁҐ ®в-
бгвбвўЁп жЁЄ«®ў Ј а вЁагҐв, зв® нв ўҐ«ЁзЁ Є®Ґз . €§ ўҐаиЁ-
л г«Ґў®© Ј«гЎЁл бв५®Є Ґ ўл室Ёв. ѓ«гЎЁ Є®ж бв५ЄЁ Ї®
Єа ©Ґ© ¬ҐаҐ 1 ¬ҐмиҐ, 祬 Ј«гЎЁ з « . ЏаЁ а Ў®вҐ Їа®жҐ-
¤гал add(i) ўбҐ ४габЁўлҐ ўл§®ўл add(j) ®в®бпвбп Є ўҐаиЁ ¬
¬Ґм襩 Ј«гЎЁл.
‘ўп§ п Є®¬Ї®Ґв Ја д . ЌҐ®аЁҐвЁа®ў л© Ја д - Ў®а
в®зҐЄ (ўҐаиЁ), ҐЄ®в®алҐ Ё§ Є®в®але ᮥ¤ЁҐл «ЁЁп¬Ё (ॡа -
¬Ё). ЌҐ®аЁҐвЁа®ў л© Ја д ¬®¦® бзЁв вм з бвл¬ б«гз Ґ¬ ®аЁҐ-
вЁа®ў ®Ј® Ја д , ў Є®в®а®¬ ¤«п Є ¦¤®© бв५ЄЁ Ґбвм ®Ўа в п.
‘ўп§®© Є®¬Ї®Ґв®© ўҐаиЁл i §лў Ґвбп ¬®¦Ґбвў® ўбҐе вҐе
ўҐаиЁ, ў Є®в®алҐ ¬®¦® Ї®Ї бвм Ё§ i, Ё¤п Ї® аҐЎа ¬ Ја д . (Џ®б-
Є®«мЄг Ја д Ґ®аЁҐвЁа®ў л©, ®в®иҐЁҐ "j ЇаЁ ¤«Ґ¦Ёв бўп§®©
Є®¬Ї®ҐвҐ i" пў«пҐвбп ®в®иҐЁҐ¬ нЄўЁў «Ґв®бвЁ.)
7.4.5. „ Ґ®аЁҐвЁа®ў л© Ја д (¤«п Є ¦¤®© ўҐаиЁл гЄ -
§ ® зЁб«® б®бҐ¤Ґ© Ё ¬ ббЁў ®¬Ґа®ў б®бҐ¤Ґ©, Є Є ў ЇаҐ¤л¤г饩
§ ¤ зҐ). ‘®бв ўЁвм «Ј®аЁв¬, Є®в®ал© Ї® § ¤ ®¬г i ЇҐз в Ґв ўбҐ
ўҐаиЁл бўп§®© Є®¬Ї®Ґвл i Ї® ®¤®¬г а §г (Ё в®«мЄ® Ёе). —Ёб«®
¤Ґ©бвўЁ© Ґ ¤®«¦® ЇаҐў®б室Ёвм C*(®ЎйҐҐ зЁб«® ўҐаиЁ Ё ॡҐа ў
бўп§®© Є®¬Ї®ҐвҐ).
ђҐиҐЁҐ. Џа®Ја ¬¬ ў Їа®жҐббҐ а Ў®вл Ўг¤Ґв "§ Єа иЁў вм"
ҐЄ®в®алҐ ўҐаиЁл Ја д . ЌҐ§ Єа 襮© з бвмо Ја д Ўг¤Ґ¬ §л-
ў вм в®, зв® ®бв Ґвбп, Ґб«Ё ўлЎа®бЁвм ўбҐ § Єа иҐлҐ ўҐаиЁл Ё
ўҐ¤гйЁҐ ў Ёе ॡа . Џа®жҐ¤га add(i) § Єа иЁў Ґв бўп§го Є®¬Ї®-
Ґвг i ў Ґ§ Єа 襮¬ Ја дҐ (Ё Ґ ¤Ґ« Ґв ЁзҐЈ®, Ґб«Ё ўҐаиЁ
i 㦥 § Єа иҐ ).
procedure add (i:1..n);
begin
| if ўҐаиЁ i § Єа иҐ then begin
| | ЁзҐЈ® ¤Ґ« вм Ґ ¤®
| end else begin
| | § Єа бЁвм i ( ЇҐз в вм Ё Ї®¬ҐвЁвм Є Є § Єа иҐго)
| | ¤«п ўбҐе j, б®бҐ¤Ёе б i
| | | add(j);
| | end;
| end;
end;
„®Є ¦Ґ¬, зв® нв Їа®жҐ¤га ¤Ґ©бвўгҐв Їа ўЁ«м® (ў ЇаҐ¤Ї®«®¦ҐЁЁ,
з⮠४габЁўлҐ ўл§®ўл а Ў®в ов Їа ўЁ«м®). ‚ б ¬®¬ ¤Ґ«Ґ, ЁзҐ-
Ј®, Єа®¬Ґ бўп§®© Є®¬Ї®Ґвл Ґ§ Єа 襮Ј® Ја д , ® § Єа бЁвм
Ґ ¬®¦Ґв. Џа®ўҐаЁ¬, зв® ўбп ® Ўг¤Ґв § Єа иҐ . Џгбвм k - ўҐа-
иЁ , ¤®бвгЇ п Ё§ ўҐаиЁл i Ї® ЇгвЁ i-j-...-k, Їа®е®¤п饬г
в®«мЄ® Ї® Ґ§ Єа иҐл¬ ўҐаиЁ ¬. Ѓг¤Ґ¬ а бб¬ ваЁў вм в®«мЄ® Їг-
вЁ, Ґ ў®§ўа й ойЁҐбп б®ў ў i. €§ ўбҐе в ЄЁе Їг⥩ ўлЎҐаҐ¬
Їгвм б Ё¬ҐмиЁ¬ j (ў Ї®ап¤ЄҐ Їа®б¬®ва б®бҐ¤Ґ© ў жЁЄ«Ґ ў Їа®-
楤гаҐ). ’®Ј¤ ЇаЁ а бᬮв२Ё ЇаҐ¤л¤гйЁе б®бҐ¤Ґ© Ё ®¤ Ё§
ўҐаиЁ j-...-k Ґ Ўг¤Ґв § Єа иҐ (Ё зҐ j Ґ Ўл«® Ўл ¬ЁЁ-
¬ «мл¬) Ё Ї®в®¬г k ®Є ¦Ґвбп ў бўп§®© Є®¬Ї®ҐвҐ Ґ§ Єа 襮Ј®
Ја д Є ¬®¬Ґв㠢맮ў add(j). —в® Ё вॡ®ў «®бм.
—в®Ўл гбв ®ўЁвм Є®Ґз®бвм Ј«гЎЁл ४габЁЁ, § ¬ҐвЁ¬, зв®
Є ¦¤®¬ га®ўҐ ४габЁЁ зЁб«® Ґ§ Єа иҐле ўҐаиЁ г¬Ґми Ґвбп
е®вп Ўл 1.
ЋжҐЁ¬ зЁб«® ¤Ґ©бвўЁ©. Љ ¦¤ п ўҐаиЁ § Єа иЁў Ґвбп Ґ Ў®-
«ҐҐ ®¤®Ј® а § - ЇаЁ ЇҐаўл¬ ўл§®ўҐ add(i) б ¤ л¬ i. ‚ᥠЇ®б-
«Ґ¤гойЁҐ ўл§®ўл Їа®Ёб室пв ЇаЁ § Єа иЁў ЁЁ б®бҐ¤Ґ© - Є®«ЁзҐбвў®
в ЄЁе ўл§®ў®ў Ґ Ў®«миҐ зЁб« б®бҐ¤Ґ© - Ё бў®¤пвбп Є Їа®ўҐаЄҐ
в®Ј®, зв® ўҐаиЁ i 㦥 § Єа иҐ . ЏҐаўл© ¦Ґ ўл§®ў б®бв®Ёв ў
Їа®б¬®вॠўбҐе б®бҐ¤Ґ© Ё ४габЁўле ўл§®ў е add(j) ¤«п ўбҐе
Ёе. ’ ЄЁ¬ ®Ўа §®¬, ®ЎйҐҐ зЁб«® ¤Ґ©бвўЁ©, бўп§ ле б ўҐаиЁ®©
i, Ґ ЇаҐў®б室Ёв Є®бв вл, 㬮¦Ґ®© зЁб«® ҐҐ б®бҐ¤Ґ©. Ћв-
бо¤ Ё ўл⥪ Ґв вॡ㥬 п ®жҐЄ .
7.4.6. ђҐиЁвм вг ¦Ґ § ¤ зг ¤«п ®аЁҐвЁа®ў ®Ј® Ја д ( -
ЇҐз в вм ўбҐ ўҐаиЁл, ¤®бвгЇлҐ Ё§ ¤ ®© Ї® бв५Є ¬; Ја д ¬®-
¦Ґв ᮤҐа¦ вм жЁЄ«л).
ЋвўҐв. ѓ®¤Ёвбп Ї® бгйҐбвўг в ¦Ґ Їа®Ја ¬¬ (бва®Єг "¤«п
ўбҐе б®бҐ¤Ґ©" ¤® § ¬ҐЁвм "¤«п ўбҐе ўҐаиЁ, Єг¤ ўҐ¤гв
бв५ЄЁ").
Ѓлбва п б®авЁа®ўЄ •® а . ‚ § Є«о票Ґ ЇаЁўҐ¤Ґ¬ ४габЁўл©
«Ј®аЁв¬ б®авЁа®ўЄЁ ¬ ббЁў , Є®в®ал© Їа ЄвЁЄҐ пў«пҐвбп ®¤Ё¬
Ё§ б ¬ле Ўлбвале. Џгбвм ¤ ¬ ббЁў a[1]..a[n]. ђҐЄгабЁў п Їа®-
楤га sort (l,r:integer) б®авЁагҐв гз бв®Є ¬ ббЁў б Ё¤ҐЄб ¬Ё
Ё§ Ї®«гЁвҐаў « (l,r] (в.Ґ. a[l+1]..a[r]), Ґ § ва ЈЁў п ®б-
в «м®Ј® ¬ ббЁў .
procedure sort (l,r: integer);
begin
| if (l = r) then begin
| | ЁзҐЈ® ¤Ґ« вм Ґ ¤® - гз бв®Є Їгбв
| end else begin
| | ўлЎа вм б«гз ©®Ґ зЁб«® s ў Ї®«гЁвҐаў «Ґ (l,r]
| | b := a[s]
| | ЇҐаҐбв ўЁвм н«Ґ¬Ґвл б®авЁа㥬®Ј® гз бвЄ в Є, зв®Ўл
| | б з « и«Ё н«Ґ¬Ґвл, ¬ҐмиЁҐ b - гз бв®Є (l,ll]
| | § ⥬ н«Ґ¬Ґвл, а ўлҐ b - гз бв®Є (ll,rr]
| | § ⥬ н«Ґ¬Ґвл, Ў®«миЁҐ b - гз бв®Є (rr,r]
| | sort (l,ll);
| | sort (rr,r);
| end;
end;
ЏҐаҐбв ®ўЄ н«Ґ¬Ґв®ў б®авЁа㥬®Ј® гз бвЄ а бб¬ ваЁў « бм ў
Ј« ўҐ ® ¬ ббЁў е (нв® ¬®¦® ᤥ« вм § ўаҐ¬п, Їа®Ї®ажЁ® «м®Ґ
¤«ЁҐ гз бвЄ ). Љ®Ґз®бвм Ј«гЎЁл ४габЁЁ Ј а вЁагҐвбп ⥬,
зв® ¤«Ё б®авЁа㥬®Ј® гз бвЄ Є ¦¤®¬ га®ўҐ ४габЁЁ
㬥ми Ґвбп е®вп Ўл 1.
7.4.7. („«п § Є®¬ле б ®б®ў ¬Ё ⥮ਨ ўҐа®пв®б⥩). „®Є -
§ вм, зв® ¬ ⥬ вЁзҐбЄ®Ґ ®¦Ё¤ ЁҐ зЁб« ®ЇҐа жЁ© ЇаЁ а Ў®вҐ нв®-
Ј® «Ј®аЁв¬ Ґ ЇаҐў®б室Ёв C*n*log n, ЇаЁзҐ¬ Є®бв в C Ґ § -
ўЁбЁв ®в б®авЁа㥬®Ј® ¬ ббЁў .
“Є § ЁҐ. Џгбвм T(n) - ¬ ЄбЁ¬г¬ ¬ ⥬ вЁзҐбЄ®Ј® ®¦Ё¤ Ёп
зЁб« ®ЇҐа жЁ© ¤«п ўбҐе ўе®¤®ў ¤«Ёл n. €§ ⥪бв Їа®жҐ¤гал ўл-
⥪ Ґв в Є®Ґ Ґа ўҐбвў®:
T(n) <= Cn + 1/n [б㬬 Ї® ўбҐ¬ k+l=(n-1) зЁбҐ« T(k)+T(l)]
ЏҐаўл© з«Ґ ᮮ⢥вбвўгҐв а бЇаҐ¤Ґ«ҐЁо н«Ґ¬Ґв®ў ¬ҐмиЁҐ,
а ўлҐ Ё Ў®«миЁҐ. ‚в®а®© з«Ґ - нв® б।ҐҐ ¬ ⥬ вЁзҐбЄ®Ґ ®¦Ё-
¤ ЁҐ ¤«п ўбҐе ў аЁ в®ў б«гз ©®Ј® ўлЎ®а . (‘ва®Ј® Ј®ў®ап, Ї®б-
Є®«мЄг б।Ё н«Ґ¬Ґв®ў ¬®Јгв Ўлвм а ўлҐ, ў Їа ў®© з бвЁ ў¬Ґбв®
T(k) Ё T(l) ¤®«¦л бв®пвм ¬ ЄбЁ¬г¬л T(x) Ї® ўбҐ¬ x, Ґ ЇаҐў®бе®-
¤пйЁ¬ k Ё«Ё l, ® нв® Ґ ¬Ґи Ґв ¤ «мҐ©иЁ¬ а бб㦤ҐЁп¬.) „ «ҐҐ
Ё¤гЄжЁҐ© Ї® n 㦮 ¤®Є §лў вм ®жҐЄг T(n) <= C'nlog n. ЏаЁ
н⮬ ¤«п ўлзЁб«ҐЁп б।ҐЈ® § 票п x log x Ї® ўбҐ¬
x=1,..,n-1 㦮 ЁвҐЈаЁа®ў вм x lnx Ї® з бвп¬ Є Є lnx * d(x*x).
ЏаЁ ¤®бв в®з® Ў®«м讬 C' з«Ґ Cn ў Їа ў®© з бвЁ ЇҐаҐўҐиЁў Ґвбп
§ бзҐв ЁвҐЈа « x*x*d(ln x), Ё Ё¤гЄвЁўл© и Ј Їа®е®¤Ёв.
7.4.8. €¬ҐҐвбп ¬ ббЁў Ё§ n а §«Ёзле 楫ле зЁбҐ« a[1]..a[n]
Ё зЁб«® k. ’ॡгҐвбп ©вЁ k-®Ґ Ї® ўҐ«ЁзЁҐ зЁб«® ў н⮬ ¬ ббЁ-
ўҐ, ᤥ« ў Ґ Ў®«ҐҐ C*n ¤Ґ©бвўЁ©, Ј¤Ґ C - ҐЄ®в®а п Є®бв в ,
Ґ § ўЁбпй п ®в k.
‡ ¬Ґз ЁҐ. ‘®авЁа®ўЄ Ї®§ў®«пҐв ®зҐўЁ¤л¬ ®Ўа §®¬ ᤥ« вм
нв® § C*n*log(n) ¤Ґ©бвўЁ©. ЋзҐўЁ¤л© бЇ®б®Ў: ©вЁ Ё¬ҐмиЁ©
н«Ґ¬Ґв, § ⥬ ©вЁ ўв®а®©, § ⥬ ваҐвЁ©,..., k-л© вॡгҐв Ї®-
ап¤Є k*n ¤Ґ©бвўЁ©, в® Ґбвм Ґ Ј®¤Ёвбп (Є®бв в ЇаЁ n § ўЁбЁв
®в k).
“Є § ЁҐ. €§пйл© (е®вп Їа ЄвЁзҐбЄЁ Ё ЎҐбЇ®«Ґ§л© -
Є®бв вл б«ЁиЄ®¬ ўҐ«ЁЄЁ) бЇ®б®Ў ᤥ« вм нв® в Є®ў:
Ђ. ђ §®ЎмҐ¬ и ¬ ббЁў n/5 ЈагЇЇ, ў Є ¦¤®© Ё§ Є®в®але Ї®
5 н«Ґ¬Ґв®ў. Љ ¦¤го ЈагЇЇг гЇ®а冷稬.
Ѓ. ђ бᬮваЁ¬ б।ЁҐ н«Ґ¬Ґвл ўбҐе ЈагЇЇ Ё ЇҐаҐЇЁиҐ¬ Ёе ў
¬ ббЁў Ё§ n/5 н«Ґ¬Ґв®ў. ‘ Ї®¬®ймо ४габЁў®Ј® ўл§®ў ©¤Ґ¬
б।Ё© Ї® ўҐ«ЁзЁҐ н«Ґ¬Ґв нв®Ј® ¬ ббЁў .
‚. ‘а ўЁ¬ нв®в н«Ґ¬Ґв б® ўбҐ¬Ё н«Ґ¬Ґв ¬Ё Ёб室®Ј® ¬ б-
бЁў : ®Ё а §¤Ґ«пвбп Ў®«миЁҐ ҐЈ® Ё ¬ҐмиЁҐ ҐЈ® (Ё ®¤Ё а ўл©
Ґ¬г). Џ®¤бзЁв ў Є®«ЁзҐбвў® вҐе Ё ¤агЈЁе, ¬л г§ Ґ¬, ў Є Є®© Ё§
нвЁе з б⥩ ¤®«¦Ґ 室Ёвбп ЁбЄ®¬л© (k-л©) н«Ґ¬Ґв Ё Є Є®ў ®
в ¬ Ї® Ї®ап¤Єг.
ѓ. ЏаЁ¬ҐЁ¬ ४габЁў® и «Ј®аЁв¬ Є ўлЎа ®© з бвЁ.
Џгбвм T(n) - ¬ ЄбЁ¬ «м® ў®§¬®¦®Ґ зЁб«® ¤Ґ©бвўЁ©, Ґб«Ё
нв®в бЇ®б®Ў ЇаЁ¬Ґпвм Є ¬ ббЁў ¬ Ё§ Ґ Ў®«ҐҐ 祬 n н«Ґ¬Ґв®ў (k
¬®¦Ґв Ўлвм Є ЄЁ¬ гЈ®¤®). €¬ҐҐ¬ ®жҐЄг:
T(n) <= Cn + T(n/5) + T(ЇаЁ¬Ґа® 0.7n)
Џ®б«Ґ¤ҐҐ б« Ј Ґ¬®Ґ ®ЎкпбпҐвбп в Є: ЇаЁ а §ЎЁҐЁЁ з бвЁ Є ¦-
¤ п з бвм ᮤҐа¦Ёв Ґ ¬ҐҐҐ 0.3n н«Ґ¬Ґв®ў. ‚ б ¬®¬ ¤Ґ«Ґ, Ґб«Ё x
- б।Ё© Ё§ б।Ёе, в® ЇаЁ¬Ґа® Ї®«®ўЁ ўбҐе б।Ёе ¬ҐмиҐ
x. Ђ Ґб«Ё ў ЇпвҐаЄҐ б।Ё© н«Ґ¬Ґв ¬ҐмиҐ x, в® ҐйҐ ¤ў § ўҐ¤®-
¬® ¬ҐмиҐ x. ’Ґ¬ б ¬л¬ Ї® Єа ©Ґ© ¬ҐаҐ 3/5 ®в Ї®«®ўЁл н«Ґ¬Ґв®ў
¬ҐмиҐ x.
’ҐЇҐам Ї® Ё¤гЄжЁЁ ¬®¦® ¤®Є § вм ®жҐЄг T(n) <= Cn (аҐи -
ойго а®«м ЇаЁ н⮬ ЁЈа Ґв в® ®Ўбв®п⥫мбвў®, зв® 1/5 + 0.7 < 1).