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