Qaytishli izlash.
Qaytishning umumiy uslubi tanlangan qaytuvchi yo’lning mumkin bo’lgan
qismiy yechimlarini bildiradi. Mumkin bo’lgan qismiy yechimlar tushunchasi orqali
algoritmning qaytishli izlashi formulalarda tasvirlanadi. Bu usul—qaytishli izlash
14
usuli— joriy qismiy yechim qadamlarini ko’p karrali kengaytirishga asoslangan. Agar
kengaytirish izlashning hozirgi qadanlarida mumkin bo’lmasa, u holda dastlabki
qisqaroq qismiy yechimga qaytish sodir bo’ladi va uni kemgaytiirishga harakat
qilinadi[7].
Umumiy holni qaraymiz, qachonki masalaning yechimi uzunligi aniqlanmagan
(a
1
,a
2
,...)
vector ko’rinishiga ega bo’lsa,vector yuqoridan (aniq yoki noaniq)
r-
son bilan
chegaralangan.
a
i
larning har biri chiziqli tartiblangan A
i
to’plam elementlaridir.
Boshlang’ich qismiy echim sifatida bo’ vektor ( ) olinadi;
a
i
sifatida S
i
to’plamning eng
kichik elementi olinadi, u qismiy yechim
a
i
ga olib boradi,
a
1
A
1
to’plamga tegishli.
Cheklash, umumiy holda—A
k
to’plamning S
k
qismiy to’plami(
a
1
,a
2
,...,a
k-1
)dan
(
a
1
,a
2
,...,a
k-1
,a
k
) gacha qismiy yechimni kengaytiruvchilarni tanlovchi yechim
yozilishidir. Agar (
a
1
,a
2
,...,a
k-1
) qismiy yechim yangi
a
k
ni tanlash uchun boshqa
imkoniyatlarni bermasa, u holda qaytish sodir bo’ladi va S
k-1
dan olingan
a
k-1
yangi
elementni tanlash imkoniyati tug’iladi. Agar
a
k-1
yangi elementni tanlash mumkin
bo’lmasa, ya’ni S
k-1
to’plam bo’sh bo’lsa, u holda yana bir qaytish sodir bo’ladi va
a
k-2
yangi elementni tanlashga harakat qilinadi va h.k.z [9].
Hosil qilingan hamma yechimlarni aniqlovchi qaytishli izlash uchun algoritmning
umumiy sxemasini quyidagi ko’rinishda tasvirlash mumkin:
k:=1;
HisoblashS
1
(*masalan, S
1
sifatida A
1
ni olish mumkin*);
WHILE k>0 DO
begin
WHILE S
k
bo’sh emas DO
begin(*harakatlanish*)
a
k
sifatida S
k
ning eng kichik elementi olinadi;
IF (a
1
,a
2
,...,a
k
) yechin bo’lsa
THEN bu yechimni yozish;
IF k
THEN BEGIN k:=k+1; HisoblashS
k
(*masalan, S
k
sifatida A
k
ni olish mumkin*);
END;
15
END;
(*qaytish*)
k:=k-1;
END.
(*hamma yechimlar topilgan*).
Qaytishli izlashning umumiy protsedurasini qisqaroq rekursiv shaklda
quyidagicha yozish mumkin:
PROCEDURE IZLASH (X:VEKTOR ; I:INTEGER);
BEGIN
IF X yechim bo’lsa THEN uni yozish;
IF I
THEN BEGIN hisoblash S
I
|