Download as pdf or txt
Download as pdf or txt
You are on page 1of 54

I

( )

, , ,
,
.

. ,

( ) .

, , , , ,
, , ...
; -
, , ( ..
). ,
,
. ,
( ORACLE).

.
.

algoriTmis cnebis istoria. dRes aRiarebuli versiis mixedviT sityva algoriTmis


warmoSoba ukavSirdeba Sua aziis cnobili mecnieris, abu jafar muhamed ibn musa alxorezmi al-majusis (783-850) saxels. xorezmi mdebareobs dRevandeli uzbekeTis
teritoriaze, xolo al-xorezmi sityva-sityviT niSnavs xorezmSi mcxovrebs "
jafaris mama, muhamedi, musas Svili, xorezmSi mcxovrebi, jadoqarTa ojaxidan". Sua
saukuneebis evropeli mecnierebi gaecvnen Tvlis indur poziciur, aTobiT sistemas da
Tvlis meTodebs am sistemaSi al-xorezmis arabuli traqtatis laTinuri Targmanebis
mixedviT. al-xorezmis ariTmetikuli traqtatis laTinuri Targmani iwyeboda sityvebiT
"Dixit algorizmi " - " da Tqva alxorizmma...". amgvarad, Tavidan sityva algoriTmi
gamoiyeneboda aTobiTi poziciuri sistemis da ariTmetikuli operaciebis algoriTmis,
anu wesebis aRwerisTvis, xolo Semdeg ki, nebismieri algoriTmisTvis. dRevandel
1

inglisur enaSi sityva algorism niSnavs swored rogorc arabul (aTobiT) poziciur
sistemas, aseve algoriTms. ufro gavrcelebulia sinonimi sityva algorithm, romelic
iTargmneba rogorc meTodi, wesi.
sainteresoa, rom al-xorezmis algebruli traqtatis saxels ukavSirdeba sityva
algebris warmoSobac ("Kitab al jabr w'al-muqabala" "aRdgenisa da gardaqmnis wesebi".)

algoriTmis

ganmarteba.

amocanis amosaxsnelad saWiroa garkveuli moqmedebebis


Catareba garkveuli TanmimdevrobiT. es moqmedebebi da maTi Tanmimdevroba erTobliobaSi
qmnian amocanis amoxsnis algoriTms. algoriTmis sxvadasxva ganmarteba arsebobs.
kompiuteruli mecnierebebis warmoSobasa da ganviTarebasTan dakavSirebiT 1968w. d.
knutis mier Semotanil iqna algoriTmis Semdegi ganmarteba

algoriTmi aris amocanis amoxsnisTvis saWiro operaciebis Tanmimdevrobis


ganmsazRvreli wesebi.
moyvanili ganmartebaSi, cxadia, dasazustebelia, romel amocanebzea saubari, ra
operaciebi da ra wesebi igulisxmeba, romeli obieqtisa da romeli subieqtis mimarT.
ase sakiTxis dasma migviyvanda rTul zogad situaciasTan. sabednierod kompiuterul
mecnierebebSi Cven vgulisxmobT, rom ganvixilavT kompiuterisTvis dasmul amocanebs da
amdenad, operaciebic iqneba is operaciebi, romlebsac asrulebs kompiuteri. magram
aseTi pirobiToba yovelTvis ar aris sakmarisi da garkveulobisTvis unda
davakonkretoT is moTxovnebi, rasac unda akmayofilebdes algoriTmi:
1. sasruloba algoriTmi unda gulisxmobdes sasruli nabijebis Sedeg
damTavrebas.
2. gansazRvruloba algoriTmis yoveli biji unda iyos zustad gansazRvruli,
magaliTad romelime daprogramebis enaze.
3. Semavali monacemebi (input): Tu algoriTms ganvixilavT rogorc funqcias,
romelic amocanas Seusabamebs mis pasuxs, maSin Semavali monacemebi warmoadgenen
arguments algoriTmisTvis, xolo amocanisTvis _ amomwurav daxasiaTebas.
4. gamomavali monacemebi (output ): esaa monacemebi, romlebsac vRebulobT
algoriTmis muSaobis damTavrebis Semdeg.
algoriTms vuwodebT koreqtuls, Tu igi mocemul dasaSveb Semaval monacemebze iZleva
Sedegs e.i. iseT gamomaval monacemebs, romlebic akmayofileben dasmuli amocanis
amoxsnis moTxovnebs. vambobT, rom koreqtuli algoriTmi xsnis amocanas.
SesaZlebelia mcdarma algoriTma, an iseTma romelic ar akmayofilebs CamoTvlil
moTxovnebs, magaliTad, Tundac pirvelives, mogvces sasargeblo Sedegebi.
algoriTmis Cawera. algoriTmis Caweris ramdenime meTodia cnobili:
a. fsevdokodis saSualebiT. fsevdokodi aris araformaluri ena, romelic
gamoiyeneba algoriTmebis damuSavebisa da CawerisTvis. xSirad warmoadgens
gamartivebul daprogramebis enas.
b. grafikuli, blok-sqemis saSualebiT
c. manqanuri ena. aq igulisxmeba faqtiurad is ena, romelzedac sruldeba brZanebebi
Tavad kompiuterSi
d. nebismieri daprogramebis ena
2

algoriTmis analizi da sirTule. algoriTmebis analizis auciloblobas ganapirobebs


sami mizezi:
a. ori algoriTmis Sedareba;
b. algoriTmis yofaqcevis winaswari Sefaseba;
c. algoriTmSi Semavali parametrebis mniSvnelobis dadgena.
samive es mizezi gulisxmobs, rom gvaqvs garkveuli kriteriumebi, romlebiTac
movaxdenT aRniSnul Sefasebebs. aseT kriteriumebad ganixileba algoriTmis sirTule
(complexity). miRebulia, ZiriTadad, algoriTmis ori tipis sirTulis ganxilva:

sirTule drois mixedviT: amocanis amoxsnisas algorTmis Semadgeneli operaciebi


iyofa e.w. elementarul bijebad. blok-sqemiT Cawerili algoriTmisTvis es iqneba
Sesasrulebeli da pirobiTi blokebi. SesaZlebelia maT mivaweroT gansxvavebuli
bijebis raodenoba, anu, rogorc amboben gansxvavebuli wonebi. fsevdokodisa da
daprogramebis enebisTvis es SeiZleba iyos is operaciebi, romlebisganac Sedgeba
Sesabamisi programis striqonebi. aqac bunebrivia gansxvavebul operaciebs mivaweroT
gansxvavebuli bijebis raodenoba e.i. wonebi. anu ramden bijs "iwonis" TiToeuli
operacia. analizisTvis mTavaria mxolod, rom es bijebi erTnairad iTvlebodes yovel
situaciaSi. Cveulebriv, Sefasebisas igulisxmeba, rom kompiuterze ariTmetikuli
operaciebi erTmaneTis mimdevrobiT sruldeba.
pirveli midgomiT, bunebrivia, swored elementaruli bijebis srul raodenobas
vuwodoT algoriTmis sirTule drois mixedviT. magram, radgan algoriTmi
damokidebulia
Semaval
monacemebze,
amitom
Cven
faqtiurad
dagvainteresebs
damokidebuleba Semaval monacemebsa da bijebis srul raodenobas Soris. 'Tu,
magaliTad, gvaqvs n monacemi, maSin dagvainteresebs rogori iqneba bijebis sruli
raodenoba T(n) e.i. amocanis droiTi sirTule. zogierTi avtori Semavali monacemebis
zomas (raodenobriv zomas) uwodebs amocanis zomas, sidides. rodesac SeviswavliT
amocanis n zomis zrdis mixedviT T(n) amocanis droiTi sirTulis yofaqcevas, maSin
vityviT, rom vikvlevT asimptotur droiT sirTules.
SesaZlebelia gvainteresebdes ara algoriTmis yvela operaciis Sesabamisi
elementaruli bijebis raodenoba, aramed mxolod romeliRac amorCeuli operaciebis
Sesabamisi elementaruli bijebis raodenoba. zustad Tu vityviT, gvainteresebs
amorCeuli operaciebis Sesabamisi elementaruli bijebis raodenobis damokidebuleba
Semaval monacemebze. am dros vambobT, rom vsaubrobT algoriTmis analizze am
amorCeuli operaciebis mimarT.

sirTule mexsierebis mixedviT: amocanis amoxsnisas kompiuterSi, bunebrivia xdeba


garkveuli raodenobis sxvadasxva resursebis gamoyeneba. Tu ganvixilavT, magaliTad,
simartivisTvis, erTi romelime tipis mexsierebis dakavebul raodenobas, maSin wina
SemTxvevis analogiurad SeiZleba SemovitanoT moculobiTi sirTule anu sxva
terminologiiT sirTule mexsierebis mixedviT - esaa damokidebuleba amocanis n zomasa
da T(n) mexsierebis dakavebul raodenobas Soris. analogiuradve ganimarteba
asimptoturi sirTule mexsierebis mixedviT.
vTqvaT, SevarCieT kriteriumi algoriTmis Sesafaseblad. garkveulobisTvis
vigulisxmoT, rom esaa droiTi sirTule. axla, Semaval monacemebze damokidebulebiT
3

erTi da igive algoriTmma SeiZleba amocanis amoxsnas gansxvavebuli bijebis raodenoba


moaxmaros. amitom, algoriTmis Sefasebisas unda gaTvaliswinebul iqnas sxvadasxva
Semaval monacemebTan dakavSirebuli bijebis raodenobebi. aseTi midgomiT, algoriTmi
amomwuravad xasiaTdeba sami maxasiaTebliT: droiTi sirTule saukeTeso SemTxvevaSi,
droiTi sirTule uares SemTxvevaSi, droiTi sirTule saSualo SemTxvevaSi.
saukeTeso SemTxveva es niSnavs Semavali monacemebis mixedviT droiTi
sirTulis minimalur mniSvnelobas anu elementaruli bijebis yvelaze nakleb
raodenobas. analogiurad, uaresi SemTxveva iqneba elementaruli bijebis maqsimaluri
raodenoba Semavali monacemebis mixedviT. zogierTi avtori mxolod am ukanasknel
maCvenebels uwodebs algoriTmis sirTules.
analizisTvis
Zalian
mniSvnelovania
e.w.
saSualo
SemTxveva
(yvelaze
mosalodneli SemTxveva). anu gvainteresebs algoriTms (an algoriTmis garkveul
operacias) ramdeni elementaruli biji sWirdeba saSualod, Semavali monacemebis
mixedviT. martiv SemTxvevaSi amis gamoTvla xdeba Semdegnairad: unda ganvixiloT
Semavali monacemebis yvela SesaZlo varianti (anu ganvixiloT yvela dasaSvebi variantis
simravle). jer es simravle unda davyoT iseT TanaukveT qvesimravleebad, rom
TiToeuli qvesimravlis elementebze algoriTms hqondes mudmivi sirTule. davuSvaT,
sul gamogvivida k cali qvesimravle da iur qvesimravleSi, romelic Seicavs
mi
elements (i = 1, , k) sirTulea xi. Tu mTel simravleSi m cali elementia, maSin iuri
qvesimravlis wili aris

mi
m

= pi. saSualos gamosaTvlelad unda gamoviyenoT formula


k

pi xi =
i 1

mi

m
i 1

xi =

1
m

m x
i

i 1

saSualos cnebis TvalsaCinoebisTvis gamovikvlioT SekiTxva: kursze saSualod


ra niSans Rebulobs studenti. kbalian Sefasebis sistemaSi unda daviTvaloT iniSnis
(i = 1, , k) mqone studentTa raodenoba mi da Tu sul kursze studentTa raodenobaa
1 k
i mi . saSualo niSans kidev SeiZleba vuwodoT
m, maSin saSualo niSani iqneba
m i 1
yvelaze mosalodneli niSani.


, ,
.

..

,

-
.
,
,

.
4

.
, .

. ,
,
( ) .

.
. , ,
.
,
. ,
. ,
.
.

,
. ,
, , .
, ,
.
,

. -
,
.
-
. :
( ) ,
() . ,
, ( )
.

() .
,
.
,
, , .

, .
5

,
,
. . :

n 1,

1,
1. : n !

n 1!n, n 2,

1,
n 0,
n 1
n
2. : a a a, n 0,

1 ,
n 0,
a n

3. : f n f n 1 f n 2 , n 2 ,

f 0 0 ,

f 1 1 ,

. ,
, ,
,
. , , .
,
. , (
) C
( ). C
,
, .
, ,

. ,
int f(int x)
{
return 4*x;
}

int f(int x)
{
return x+x+x+x;
}
, ,
.
,
. ,
,
6

. ,
( ) ,
. , 1!
0! , a1 a a 0 1 , f 1 0 , f 2 1 .

, ,
,
( .. )
. (
) ,
.
,
.
,
. , ,
,
().
, .
,
(, ),
,
() . ,
,
, .
: , FILO.
, _ ,
.
,
.
,
,
.
,
, .
1.
.

. n.
:

n 1,
1,
f(n) =
n f n 1 , n 1,
7

:
f(n) {

n 1, f(n)- 1;

f(n)- n f n 1 ;

c1
c2 T n 1

}
,
, .

:
long f( int n)
{
if ( n <= 1 ) return 1;
return n*f( n-1 );
}
,
, . n =
1, . (n - 1)
-. f( n )= n*f( n-1 ), (n) -.
, T n n 1 ,
: T 1 c1 ,

T n c2 T n 1 , c2

,
. , ,
: T n n 1 c2 c1 .
,
. ,
4!=4(3!)

4!=4(3(2!))

4!=4(3(2(1!)))
4!=4(3(2(1)))

24

4!=4(6)

4!=4(3(2)))

.
, .
, ,
. ,
.
, .

2. a n.
, a n .
. ,
.

.
I .

,
. , .
,

(1)
a n a a n1 , a1 a .
.
a n
, f a, n a n .
(1)
:

f a, n {
1

n0 ,

f a, n -

c1 T n 1

a f a, n 1 ;
2

n 0 , f a, n - 1;

f a, n

n0 ,
1

f a, n -

c2

c3 T (n)

}
, n 1 , :

T n c1 T n 1 2c1 T n 2

n 1 c1 c2 ,

.

:
double f(float a, int n)
{
if ( n > 0 ) return a*f(a,n-1);
if ( 0 == n ) return 1;
return 1/f(a,-n) ;
}

.

, ,
. , power, .
,
C- .
II . , n 2 n / 2 n % 2 ,

an a2

n / 2

an % 2 an / 2 an / 2 an % 2 .

, n = 1 n = 0,
a n % 2 . ,
:
n 1 , f a, n - f a, n / 2 * f a, n / 2 * f a, n%2 ;
f a, n / 2 ,
- .
:

f a, n {
1

n 1 ,

x = f a, n / 2

da

c1 T n / 2

x x f a, n%2 ;
2

n 1 , a ;

c2

n 0 , 1;

c3

n 0 , f a, n -

f a, n

c4 T (n)

}
n 1 , (
) (
):

T (n) log n c1 max c2 c3 .


n = 1. k n
n-:
T (n) c1 T n / 2 c1 c1 log n / 2 max c2 c3 c1 log n max c2 c3 .
,
. ( ) ,
.
, .
.
double f(double a, int n)
10

{
if ( n > 1 )
{
double x = f( a, n/2);
return x * x * f( a, n%2) ;
}
if ( 0 == n ) return 1;
if ( n == 1) return a;
if ( n < 0 ) return 1/f( a, -n) ;
}

( )
x x - x - ,
. , x -. x -
,

x -. ,

x 1 x x x x 1 ,

n / 2 n / 2 n ,
n-. , x-
a, b :

x / a / b x / ab ,
x / a / b x / ab .

, - :

T n T n / 2 p , n 1 ,
T 1 q .
T n p log n q n 1 -.
,
, .
. n 15 , :

T 15 T 7 p T 3 p p T 1 p p p 3 p q .

11

, log15 3 ,

log15 3 .
, ,
T n p log n q .
, ,
( ),
.
, .
n 1 . k
,
2k n 2k 1 .

, (1) - k log n k 1 k log n ,


1

n
n
2 , 1 k .
k
2
2

n
k n / 2 / 2 / / 2 / 2 ( k -
2
), , n
() log n -, .



, .

.

, , (
) .
f n ,
:
1.

f n < 0 ;

2.

f n < 0 ;

3.

f n 0 n0 -;

4. n0

, f n 0 n n0 .
12

. , f n O g n , c 0

0 f n cg n n - .

, f n O g n -
:

0 f n cg n

;
0 f n cg n n0 -;

n0

, 0 f n cg n n n0 .

f n O g n : - ,

f n

g n , f n -

g n -.
, f n 3n4 g n 2n4 n3 23n 111 , f n O g n .

, f n
.
. g n f n O g n

f n -, O g n

. , f n O g n
f n O g n , f O g n .

. , f n g n , g n O f n .

f n g n : - ,

f n

g n , f n -

g n -.
f n g n - f n g n ,

g n .
.

g n O f n

, , f n g n .

f n O g n

f n g n : - ,

f n

13

g n , .
: f n g n


:
Notation

.
, f n
a0 a1 n

ak nk ak 0 ,

f n O nk . f n ,

f n nk .

, .
.
rekursiis
vizualuri
gaazrebisTvis,
iseve
rogorc
sxva
amocanebSi,
rekomendirebulia rekursiuli funqciis tanSi CavamatoT beWdvis operaciebi, programis
gamarTvis etapze mainc ([1], gv 221).
14

aseTive maTematikuri gaazreba gviCvenebs, Tu ratomaa fibonaCis ricxvebis


gamosaTvleli martivi rekursiuli algoriTmi araefeqturi da neli: Tumca sistema
ixsneba, magram gvaqvs n cali cvladi da gacilebiT meti raodenoba gantolebebisa; maT
Soris bevria erTi da igive gantolebebi..
fibonaCis ricxvebi (Fibonacci numbers) ewodeba ricxvebis mimdevrobas
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,...
romelic ganisazRvreba formuliT:

F n F n 1 F n 2 , sadac n 2, F 0 0, F 1 1.
am ricxvvebs mravali saintereso Tviseba gaaCniaT. magaliTad, cnobilia rom am
mimdevrobis ori momdevno ricxvis Sefardeba daaxloebiT udris oqros kveTas (golden

ratio) 1 5 / 2 1.61803

. Tu zusti mniSvneloba gvinda, F n aris n / 5 ,

damrgvalebuli uaxloes mTel ricxvamde.


fibonaCis pirveli N ricxvis gamoTvla advilad SeiZleba N-is proporciul
droSi. Sedegebi SegviZlia davimaxsovroT igive saxelis mqone masivSi:
F[0] = 0; F[1] = 1;
for (i = 2; i <= N; i++){
F[i] = F[i-1] + F[i-2];
}
SevadginoT igive amocanis Sekursiuli algoriTmi da gavaanalizoT igi. aRvweroT
funqcia, romelic gamoTvlis fibonaCis ricxvebs:
int F(int i)
{
if (i < 1) return 0;
if (1 == i) return 1;
return F(i-1)+ F(i-2);
}
n _uri ricxvis gamoTvlis dro, roca n 1 , SegviZlia warmovadginoT saxiT:

T (n) T (n 1) T n 2 c1 ,
sadac c1 aris amocanis or amocanad

(2)

gaxleCis dro. (2) is orive mxare gavyoT

T (n 1) -ze. gveqneba:

T n 2
c1
T ( n)
1

,
T (n 1)
T (n 1) T (n 1)

(4)

roca n sakmaod didia, (3) is marjvena mxareSi SegviZlia meore wevri CavTvaloT
nulis tolad, xolo meore wevri ki 1 -is tolad.

aris oqros kveTa, rac

ganmartebis Tanaxmad niSnavs, rom igi akmayofilebs gantolebas: 1 1 . maSasadame,


sakmaod didi n -ebisTvis (4) niSnavs, rom
15

T (n) T (n 1) .

bolo Sefasebidan advilad Cans, rom T (n) n1 c , sadac c mudmivi aris sabazo
SemTxvevis amoxsnis dro. am algoriTmiT, fibonaCis ricxvebis gamoTvlis dro. TviTon
ricxvebic eqsponencialurad izrdeba da imdenad swrafad, rom F 45 1836311903 aris
udidesi ricxvi, romlis warmodgenac SesaZlebelia 32 Tanrigiani mTelis saSualebiT.
SevecadoT maTematikurad da grafikulad gaviazroT, Tu ratom aris es
algoriTmi ase araefeqturi. magaliTad, vTqvaT veZebT F 5 sidides. am ucnobisTvis
gvaqvs gantoleba

F 5 F 4 F 3 , marjvena mxareSi orive ucnobisTvis ixsneba

rekursiuli bijebi, romlebsac maTematikurad Seesabameba gantolebebi, am gantolebebis


marjvena mxareebisTvis kvlav gantolebebi iqmneba da sabolood vRebulobT sistemas:

F 6 F 5 F 4 ,

F 5 F 4 F 3 ,
F 4 F 3 F 2 ,

F 4 F 3 F 2 ,

F 3 F 2 F 1 ,
F 3 F 2 F 1 ,

F 3 F 2 F 1 ,
esaa sistema oTxi ucnobiT ( F 3 , F 4 , F 5 , F 6 ) da Svidi gantolebiT, romelTagan
ramdenime identuria. rom Cagvewera rekursiuli mimarTvebi sabazo SemTxvevebze, maTi
raodenoba kidev meti iqneboda. rodesac n izrdeba, gantolebebis raodenoba izrdeba
n is mimarT eqsponencialurad, Tumca maTgan mxolod n cali aris gansxvavebuli.
algoriTmis muSaobis drois Sefaseba. algoriTmebis analizi faqizi da
Srometevadi saqmea. zogierTi algoriTmi imdenad kargadaa Seswavlili, rom cnobilia
zusti
maTematikuri
formulebi,
romlebic
gamoiyeneba
Sesrulebis
drois
gamosaTvlelad realur situaciebSi. sxva algoriTmebis samuSao maxasiaTeblebi
SesaZloa ar iyos cnobili, magaliTad imis gamo, rom maT Seswavlas mivyavarT jerjerobiT gadauWrel maTematikur amocanebTan. nebismier SemTxvevaSi, saWiroa
algoriTmis analizi Catardes SesaZleblobebis farglebSi maqsimaluri sizustiT.
davaxasiaToT ramdenime faqtori, romlebic arsebiTad moqmedeben analizis
sizusteze, magram amave dros ver imarTebian programistis mier.
1. daprogramebis konkretul enaze dawerili programebi translatoris mier
iTargmneba konkretuli tipis kompiuteris manqanur kodebSi. amitom imis garkveva,
TiToeuli operatoris Sesrulebas ra dro sWirdeba, sakmaod rTulia.
gansakuTrebiT iseT garemoSi, sadac programas drois sxvadasxva momentSi
sxvadasxva samuSao maxasiaTeblebi SeiZleba hqondes.
2. zogierTi programa Zalian mgrZnobiare aris Semavali monacemebis mimarT, amitom
maTi warmadoba SesaZloa Zlier meryeobdes, Semavali monacemebis mixedviT.

16

3. bevri gavrcelebuli programisTvis jer araa cnobili CvenTvis saintereso


Sefasebebi;
4. programebis zogierTi wyvili SesaZloa saerTodac ar iyos erTmaneTTan sadari
im azriT, rom erTi maTgani SesaZloa gansakuTrebulad efeqturi iyos Semavali
monacemebis erTi tipis mimarT, maSin rodesac sxva viTarebaSi meore iyos
ukiduresad efeqturi.
am faqtoribis miuxedavad, xSirad sakmaod zustad SeiZleba iTqvas Tu ra dros
daikavebas mocemuli programa, an rom garkveul situaciebSi igi Sesruldeba romelime
sxva programaze ukeT. rac mTavaria, aseTi informaciis miReba SesaZlebelia sakmaod
SezRuduli maTematikuri arsenalis safuZvelze. ganvixiloT zogierTi aucilebeli
faqti.
algoriTmebis analizis dros mTavar parametrs (primary parameter) warmoadgens
amocanis zoma. amocanis zoma SesaZloa iyos failis zoma mowyobis (sortirebis) an
Zebnis amocanebSi, an simboloebis zoma striqonSi. Zalian xSirad, amocanis zoma
pirdapirproporciulia dasamuSavebeli monacemebis zomisa. SesaZloa, rom amocanis
zomis Sesafaseblad veqtoruli sidideebis ganxilva ufro bunebrivi aRmoCndes, Tumca
am SemTxvevaSic aris SesaZlebeli erT parametrze gadasvla. SemdegSi vigulisxmoT, rom
amocanis zomas axasiaTebs erTi parametri da ganvixiloT ramdenime yvelaze
gavrcelebuli funqcia, romlebis proporciulic SeiZleba aRmoCndes amocanis
Sesrulebis dro.
1

log N

N
NlogN

N2

N3

2N

programebis umetesobaSi, instruqciebis (operatorebis) umetesoba sruldeba


sul ramdenjerme. Tu programis yvela instruqcia am tipisaa (Sesrulebis
maqsimaluri ricxvi araa damokidebuli N -ze), maSin vambobT, rom programis
Sesrulebis dro aris mudmivi (constant).
Tu programis Sesrulebis dro aRiwereba logariTmuli damokideblebiT
(logarithmic), programis swrafqmedeba nel nela mcirdeba N is zrdis
kvalobaze. aseTi Sesrulebis dro axasiaTebs im programebs, romlebsac
msxvili amocanis amoxsna dahyavT SedarebiT mcire amocanebis mimdevrobis
amoxsnaze. logariTmis fuZe agreTve moqmedebs Sesrulebis droze, magram
gacilebiT naklebad, vidre TviTon N.
am dros vambobT, romprogramis dro wrfivia (linear). aseTi situacia iqmneba,
roca Semavali monacemebi mcire damuSavebas ganicdian.
aseTi situacia iqmneba, roca algoriTmi sawyis amocanas xleCs SedarebiT
mcire zomis amocanebad, xsnis TiToeuls da Semdeg aerTianebs amonaxsnebs.
roca N tolia milionis, NlogN Seadgens daaxloebiT 20 milions. Tu N
kidev gaormagdeba, maSin gaizrdeba orze odnav metad.
algoriTmebi
kvadratuli
(quadratic)
muSaobis
droiT
praqtikulad
sasargebloa SedarebiT mcire zomis amocanebisTvis. aseTi situaciebi
ZiriTadad iqmneba, rodesac Semavali monacemebi damuSavdeba wyvilebad.
algoriTmebi kuburi (cubic) muSaobis droiT praqtikulad sasargebloa
sakmaod mcire zomis amocanebisTvis. aseTi situaciebi ZiriTadad iqmneba,
rodesac Semavali monacemebi damuSavdeba sameulebad.
algoriTmebs eqsponencialuri (exponential) muSaobis droiT iSviaTad aqvT
praqtikuli gamoyeneba.
17

konkretuli programis Sesrulebis dro xSir


wamebi
SemTxvevaSi aris erT erTi zemoTmoyvanili
funqcia (am SemTxvevaSi mas mTavar wevrs
102
_leading term vuwodebT), gamravlebuli raRac
104
mudmivze da, SesaZloa, damatebuli ufro dabali
105
rigis
gamosaxuleba.
didi
N
ebisTvis
106
dominirebs mTavari wevri, patarebisTvis ki
107
swraf kompiuterebze naklebi mniSvneloba aqvs
108
Tu romel meTods viyenebT.
109
Semdegi cxrili sasargebloa, radgan igi
1010
saSualebas gvaZlevs wamebSi gamoxatuli oris
1011
xarisxebi gadaviyvanoT drois Cveul erTeulebSi.
qvemoT moyvanili cxrilidan SeiZleba davaskvnaT, rom
arsebiTad aCqarebs amocanis amoxsnas Tundac araswrafmoqmed
swrafmoqmed kompiutersac ki ar SeuZlia gvixsnas, roca dabali
vmuSaobT.
opera
c.
raode
n. wmSi
106

109

1012

amocanis zoma 1 milioni


N

NlgN

ramdenime
wamSi

ramdenime
wamSi

1.7 wuTi
2.8 saaTi
1.1 dRe
1.6 kvira
3.8 Tve
3.1 weli
3.1 aTwleuli
3.1 aswleuli
arasodes
swrafi algoriTmi
kompiuterze, xolo
siCqaris algoriTmiT

amocanis zoma 1 miliardi


N

N2

ramdenim
ramdenime
e
saaTSi
kviraSi
momentalurad momentalura ramdenim
ramdenime
d
e saaTSi
wamSi
momentalura momentalura ramdenim momentalura
d
d
e wamSi d

NlgN

N2

ramdenime
saaTSi

arasdros

ramdenime
wamSi
momentalura
d

aTwleuleb
i
ramdenime
kviraSi

Semdeg cxrilSi moyvanilia zogierTi im funqciis mniSvneloba, romlebTanac


algoriTmebis analizis dros xSirad gveqneba saqme. cxadia, aq dominirebs kvadratuli
funqcia, gansakuTrebiT N-is didi mniSvnelobebisaTvis. rac Seexeba mcire N-ebs, aq
funqciaTa mniSvnelobebs Soris gansxvaveba imdenad arsebiTi ar aris, rom sayuradRebo
iyos, rasac ver vityviT didi N-ebisaTvis. algoriTmis muSaobis zusti dro am
funqciebis wrfivi kombinaciiT SeiZleba gamoisaxos. Cven advilad SevZlebT ganvasxvavoT
swrafi algoriTmi dabali siCqaris algoriTmisagan swored am funqciaTa mniSvnelobebs
Soris uzarmazari gansxvavebis saSualebiT. rac Seexeba swrafi algoriTmebis Sedarebas,
aq ufro faqizi analizis Catarebaa saWiro.
logN
3
7
10
13

N
3
10
32
100

N
10
100
1000
10000

NlogN
33
664
9966
132877

N log N

110
4414
99317
1765633

N 3/ 2

32
1000
31623
1000000

N2

10
10000
1000000
100000000
18

17
20

316
1000

100000
1660964
27588016
31622777
10000000000
1000000 19931569 397267426 1000000000 1000000000000

O - aRniSvnebi da ZiriTadi faqtebi. . algoriTmebis sirTulis


analizis dros moxerxebulia gamoviyenoT asimptotikuri cnebebi maTematikidan.
ganvixiloT arauaryofiT ricxvTa mimdevroba. aRvniSnoT O(f(n)) simboloTi
(ikiTxeba "o-didi ef en") simravle g : C 0, n0 , n n0 , g(n) C f (n) . anu, mokled,
SeiZleba davweroT
O(f(n)) = g : g(n) C f (n)
xSirad SesaZlebelia gamoviyenoT ufro martivi Canaweric O(f).
magaliTad, O(1) aris yvela arauaryofiT SemosazRvrul mimdevrobaTa simravle.
O(n) iqneba yvela iseTi mimdevroba, romelTa grafiki dekartis marTkuTxa sakoordinato
sistemaSi ganlagebulia pirveli meoTxedSi Cn saxis wrfis grafikis qveS, da a.S.
O aRniSvnebi gamoiyeneba ZiriTadad sami mizezis gamo:

rom SevafasoT cdomileba, rac Cndeba maTematikur formulebSi mcire Sesakrebebis


gadagdebis Sedegad;
rom
SevafasoT
cdomileba,
romelic
Cndeba
programis
im
nawilebis
gauTvaliswineblobis gamo, romlebsac mcire wvlili SeaqvT gasaanalizebel
sakiTxSi;
rom ganvasxvavoT algoriTmebi maTi Sesrulebis drois mixedviT.

mudmivebi C , n0 xSirad arsebiT faqtors faraven programis realizaciis


procesSi. magaliTad, gamonaTqvami: algoriTmis muSaobis droa O(f(n)) arafers ambobs
muSaobis droze iseTi N isTvis, romelic mcirea n0 -ze.
rodesac g(n) mimdevrobisTvis sruldeba g(n) O(f(n)), maSin miRebulia Canaweri
g(n) = O(f(n)).
amgvarad, am CanawerSi, tolobis niSanze tolobis Tvisebebis gadatana pirdapir
ar SeiZleba. magaliTad, tolobis niSnis marjvena da marcxena mxareebi ar aris
Tanasworuflebiani anu darRveulia tolobis simetrulobis Tviseba.
ariTmetikuli moqmedebebi O(f) simbolosTan ganimarteba algebrulad. magaliTad,
Sekrebis g(n) + O(f(n)) qveS gvesmis simravle, romlis yoveli elementi warmoadgens
g(n)is jams O(f(n)) is romeliRac elementTan, anu
g(n) + O(f(n)) = g n n : O f n .
analogiurad gaigeba sxva operaciebic. es iwvevs, magaliTad, Semdegi Tvisebebis
Sesrulebas:
1. f(n) = O(f(n)),
2. yoveli C > 0 dadebiTi mudmivisTvis CO(f(n)) = O(f(n)) da O(Cf(n)) = O(f(n)),
3. O(f(n)) + O(f(n)) = O(f(n)),
4. O(O( f(n))) = O(f(n)),
5. O(g(n)) O(f(n)) = O(g(n) f(n)) da g(n) O(f(n)) = O(g(n) f(n))

19

rekursiuli algoriTmebis sirTulis SefasebisTvis xSirad warmoiqmneba


rekurentuli gantolebebi. ganvixiloT aseTi gantolebebis amoxsnis erTerTi zogadi
forma.
winadadeba. davuSvaT a, b, c arauaryofiTi dadebiTi ricxvebia
O n rodesac a c

b rodesac n 1

Tu T n
,
maSin
T
n

O n log n rodesac a c
n
a T c b n rodesac n 1

log c a
rodesac a c
O n

damtkiceba:
Teoremis samive gancxadeba gamodis erTidaigive gardaqmnidan.
ganvixiloT, jer, SemTxveva, rodesac n ck clogc n anu k log c n , maSin
T(n) = T c k = a T

bc
ck
c

= a T c k 1 b c k = a a T c k 2 b c k 1 b c k =
= a 2 T c k 2 b ac c k b c k =

= a3 T c k 3 b ac c k b ac c k b c k =
2

==
k

logc n

= b c k ac = b n ac
i

i 0

i 0

axla gasagebia, rom martivad gamodis Semdegi daskvnebi:


log c n

a
1 , anu rodesac a < c, maSin jami
c
samarTliania Teoremis pirveli gancxadeba.

1) rodesac

log c n

2) rodesac a = c maSin jamSi

ac
i 0

Sefaseba O n log n .

a i
c

SemosazRvrulia da

i 0

gvaqvs log c n cali erTianis jami da gamodis

k 1

3) da

bolos,

Tu

a > c,

maSin

samarTliania

T n b n

a
1
c
a
1
c

<

ab logc n
=
a
c

ab a logc n logc a ab logc a


logc a n
= n
= O nlogc a
c n
c
rodesac n ar aris cs xarisxi, maSin sawyisi amocana, Cveulebriv SeiZleba
ganvixiloT, rogorc qveamocana iseTi amocanis, romelSic ganzomileba iqneba ukve c k ,
sadac k aris umciresi iseTi, rom n ar aRemateba c k s.

20

.
iribi rekursiis SemTxvevaSi, rekursiuli funqcia iribad, sxvaFfunqciis
saSualebiT iZaxebs Tavis Tavs. gasagebia, rom es sxva funqciac iribad, pirveli
funqciis saSualebiT iZaxebs Tavis Tavs. SesaZloa, ramdenime funqcia mimdevrobiT
iZaxebdes erTmaneTs.
ra Tqma unda, iribi rekursia gacilebiT xSirad gvxvdeba, vidre Cveulebrivi.
iribi rekursiis yvelaze gavrcelebuli da sasargeblo SemTxvevebi ukve organizebulia
maRali donis daprogramebis enebSi mmarTveli konstruqciebis saxiT.
gasagebia, rom yvela SesaZlo gamoyeneba gaTvaliswinebuli ver iqneba daprogramebis
enaSi. ganvixiloT ramdenime magaliTi. pirveli magaliTi garkveuli azriT
xelovnulradaa mofiqrebuli iribi rekursiis sailustraciod. meore magaliTi
gviCvenebs, rom garkveul SemTxvevaSi iribi rekursia ufro efeqturia vidre pirdapiri.
mesame magaliTi sainteresoa daprogramebis TvalsazrisiT, radgan aq gamoyenebuli
teqnika SegviZlia gamoviyenoT sxva, ufro aqtualur amocanebSi.

amocana 1. SevadginoT swrafi rekursiuli algoriTmi fibonaCis

0,1,1, 2, 3, 5, 8,

ricxvebis mosaZebnad.

amoxsna. es amocana Cven ukve ganvixileT erTxel da vnaxeT, rom martivi rekursiuli
algoriTmi araefeqturia, radgan erTi da igive rekursiul funqcias igi mravaljer
xsnis. programis daxvewili variantis Sedgena SedarebiT rTulia, amitom jer saWiroa
gegmis, anu fsevdokodis Sedgena. Cvens SemTxvevaSi, fsevdokods aqvs saxe:
1. gvWirdeba globalurad ganvsazRvruli masivi (romelsac aRiqvamen funqciebi
parametrad gadacemis gareSe), romelSic davimaxsovrebT fibonaCis ricxvebs maTi
moZebnisTanave. Tavidan, masivis inicializacias vaxdenT 0 ebiT (radgan aseTi
fibonaCis ricxvi pirvelis mere aRar gvxvdeba); esaa sakontrolo mniSvneloba,
romelic eubneba funqcias, rom fibonaCis ricxvi, romelsac jer Seesabameba masivis
mocemuli elementi, araa moZebnili.
2. ganvsazRvravT rekursiul funqcias try_from_founded, romelic, fibonaCis
ricxvis nomis miTiTebis Semdeg, aRniSnuli masivis saSualebiT amowmebs aris Tu
ara es ricxvi erTxel uke moZebnili. Tu aris abrunebs mis mniSvnelobas, Tu ara
_ iZaxebs meore rekursiul funqcias (find_fibonacci) misi mniSvnelobis
mosaZebnad.
programul kods aqvs saxe.
21

#include <stdio.h>
#include <conio.h>
#include<time.h>

long find_fibonacci(int number);


long try_from_founded(int number);
long a[50]={0,1};

// for fibonacci numbers

int main()
{
int n;
clock_t start, finish;
puts("Enter positive integer n, 0 < n < 50");
scanf("%d",&n);
start = clock();
printf("%d-th number is %d",n, try_from_founded( n ));
finish = clock();
printf("\n process takes %f secunds", ( (double) (finish - start) ) /
CLOCKS_PER_SEC);
getche();
return 0;
}
long try_from_founded(int number)
{
if (0 == a[number]) return find_fibonacci(number);
return a[number];
}
long find_fibonacci( int number )
{
if (0== number) return 0;
if (number > 1) {
a[number] = try_from_founded(number-1) +
try_from_founded(number-2);
return a[number];
}
}
ganxiluli magaliTi garkveuli azriT xelovnuria, radgan amocanis gadaWra
SeiZleba sxva gziT, rekursiis gareSe da aranakleb efeqturad.

22

.
bolo magaliTi, romelsac am sakiTxTan dakavSirebiT ganvixilavT, eZRvneba
matricaSi lokaluri maqsimumis moZebnis amocanas e. w. gradientuli meTodis
gamoyenebiT. ramdenime cvladis da ricxviTi mniSvnelobebis mqone funqciisTvis,
mocemul wertilSi gradientis povna niSnavs funqciis uswrafesi daSvebis
mimarTulebis povnas. Cvens SemTxvevaSi, funqcia mocemulia cxrilis anu matricis
saSualebiT, funqciis argumentebi aris striqonisa da svetis nomrebi i, j ; amaTgan i
warmoadgens uwyveti y cvladis analogs, j warmoadgens uwyveti x cvladis analogs,
Tanac, gansxvavebiT sibrtyeze dekartis koordinatTa sistemisagan, i cvladi izrdeba
qemodan qvemoT. funqciis mniSvnelobebs warmoadgenen matricis elementebi. Tu matricis
elementebs warmoadgenen organzomilebiani int a[SIZE_V][SIZE_H]
masivis
elementebi ([SIZE_V, SIZE_H aris matricis vertikaluri da horizontaluri
zomebi, romlebic mieTiTeba define direqtiviT) da mocemulia i, j wyvili, maSin
a[i][j] elementis mezoblad iTvleba yvela is elementi, romlis indeqsebi erTze
meti mniSvnelobiT ar gansxvavdeba mocemuli wyvilidan misi Sesabamisisgan.

amocana 3. mocemulia a[SIZE_V][SIZE_H] organzomilebiani masiviT gansazRvruli


matrica. movZebnoT matricis is elementi (da misi indeqsebi), romlis mniSvneloba metia
an toli misi yvela mezobeli elementis mniSvnelobaze.

amoxsna. lokalurad maqsimaluri elementis Zebnas Cven viwyebT matricis nebismierad


aRebuli elementidan, romlis indeqsebs vimaxsovrebT globalurad aRweril x , y
cvladebSi. Semdeg es cvladebi gzadagza xdebian sxva, ufro maRali mniSvnelobis mqone
elementebis indeqsebi, vidre ar miiRweva lokalurad saukeTeso mniSvneloba.
maqsimumis Zebnis procesi intuiciurad igivea, rasac mimarTavs alpinisti nislSi
mwvervalis mosaZebnad, romelic monacvleobiT asrulebs mxolod ori saxis moqmedebebs:
1. sadac mocemul momentSi imyofeba, mis irgvliv mosinjavs simaRles da
gansazRvravs simaRlis uswrafesi zrdis mimarTulebas;
2. moZraobs am mimarTulebiT, vidre simaRle ar daiwyebs klebas. Semdeg isev
mimarTulebis gansazRvras iwyebs da a.S..
programuli realizaciis TvalsazrisiT, gadasaWrelia Semdegi problemebi.
1. mimarTulebis gansazRvra advilia im elementebisTvis, romlebic ar imyofebian
sazRvarze. am SemTxvevaSi es martivad xerxdeba ormagi ciklis saSualebiT.
imisaTvis, rom sazRvarze myofi elementebisTvisac advilad ganvsazRvroT
mimarTuleba, sawyisi masivi unda CavdgaT ufro didi ganzomilebis masivSi, anu
sawyis masivs unda gavukeToT CarCo (ix. programis realizaciis Sedegi).
2. gasaTvaliswinebelia, rom CarCos elementebze ar unda moxvdes axali matricis
romelime lokaluri an mimarTulebiTi maxsimumi, raTa ar Segveqmnas igive
23

problema. Tu vigulisxmebT, rom matrica Sedgeba arauaryofiTi elementebisagan,


maSin CarCoSi Casasmelad gamodgeba -1 ebi (ix. programis realizaciis Sedegi).
3. sasurvelia SedegTan erTad gamoibeWdos, rac SeiZleba metad informatiuli
saxiT, Sedegis miRwevis gza. am mizniT ganisazRvreba kidev erTi matrica,
Sedgenili simboloebisgan. Tavidan igi inicializirebulia carieli adgilebiT
anu harebiT. Tu sawyisi matricis nebismieri iseTi elementisTvis, romelic
monawileobs Tavidan arCeuli a[i][j] mniSvnelobis gaumjobesebaSi, axali
matricis Sesabamisi elementi inicializirdeba * iT. Sedegad, miiReba kvali,
romelsac sawyisi elementidan lokalurad optimaluramde mivyavarT.
4. mimarTulebis gansazRvra xdeba void find_gradient(void) funqciiT, romelic
iyenebs globalurad aRweril matricebsa da elementebs, xolo arCeuli
mimarTulebiT
lokaluri
maxsimumis
moZebnas
uzrunvelyofs
void
find_dir_max(void) funqcia.
ZiriTadi funqcia gayofilia ramdenime logikurad damoukidebel erTeulad, romelTa
daniSnulebas gviCvenebs komentarebi. programuli kodi aseTia:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define SIZE_V 8
#define SIZE_H 12
void find_gradient(void);
void find_dir_max(void);
int x=12;
int y=6;
int new_x;
int new_y;
int b[SIZE_V+2][SIZE_H+2];
char c[SIZE_V+2][SIZE_H+2]={' '};
int main()
{
int a[SIZE_V][SIZE_H];
int i;
int j;
// make array a
for ( i=0; i<SIZE_V; i++ ) {
for ( j=0; j<SIZE_H; j++ ) {
a[i][j] = -(i-6)*(i-6)-(j-3)*(j-3)+100;
}
}
//form array b = a + frame completely
for ( i=0; i<SIZE_V+2; i++ ) {
for ( j=0; j<SIZE_H+2; j++ ) {
if (i==0 || i==SIZE_V+1 || j==0 || j==SIZE_H+1 ) {
24

b[i][j] = -1 ;
}
else {
b[i][j] = a[i-1][j-1] ;
}
}
printf("\n\n");
}
// solver
find_gradient();
printf("\nin original matrix, \nlocmax=%4d\n", a[y-1][x-1]);
printf("its place is (y,x)=(%d,%d)", y-1 , x-1);
// print trace
printf("\n\n");
for ( i=0; i<SIZE_V+2; i++ ) {
for ( j=0; j<SIZE_H+2; j++ ) {
printf("%4d%c", b[i][j], c[i][j] );
}
printf("\n\n");
}
getche();
return 0;
}

//Enf of main()

void find_gradient()
{
int max = b[y][x];
int i,j;
c[y][x]='*';
for ( i=y-1; i<y+2; i++ ) {
for ( j=x-1; j<x+2; j++ ) {
if (max < b [i][j] ) {
max = b[i][j] ;
new_x=j;
new_y=i;
}
}
}
if (new_x != x || new_y !=y) {
find_dir_max();
}
}
void find_dir_max()
25

{
int i=0;
int dx=new_x-x;
int dy=new_y-y;
while (b[y+(i+1)*dy][x+(i+1)*dx] > b[y+i*dy][x+i*dx]) {
c[y+i*dy][x+i*dx]='*';
i++;
}
x=x+(i)*dx;
y=y+(i)*dy;
find_gradient();
}
programis realizaciis Sedegs aqvs saxe:
in original matrix,
locmax= 100
its place is (y,x)=(6,3)

programis realizaciis Sedegs aqvs saxe:

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

55

60

63

64

63

60

55

48

39

28

15

-1

-1

66

71

74

75

74

71

66

59

50

39

26

11

-1

-1

75

80

83

84

83

80

75

68

59

48

35

20

-1

-1

82

87

90

91

90

87

82

75

66

55

42

27

-1

-1

87

92

95

96

95

92

87*

80

71

60

47

32

-1

-1

90

95

98

99

98

95*

90

83*

74

63

50

35*

-1

-1

91

96

99

100*

99*

96

91

84

75*

64

51*

36

-1

-1

90

95

98

99

98

95

90

83

74

63*

50

35

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

-1

26


. n a[]
i (
) O(1) ,
i a+i .
, ,
,
,

. , ,
, .
,
, .
,
,
.
,
.
. ,

, .
,
.
. n a[n]
b. ()
, b ,

- .
. :
1. b ,
( n-1).

27

2. n-1
, : b ,
, - ...
, ,
.
,
,
. f( a[], k, b) - a[]
k b ,
a[k-1]- b-,
, k-1 ,
f( a[], k-1; b)-. ,
,
(k>0) .
(k=0) , .. ,

T(k)

f( a[], k, b) {
1

k=0
;

c1

b ==a[k-1]
(k-1) ;

c2

f( a[],
k-1, b);

T(k-1 )

}
: f( a[],
n, b.)
. ,
,
, :
void search(int array[], int size, int key)
{
if ( 0 == size )
{
printf( "value not found!");
return;
}
if (key == array[size-1])
28

{
printf( "value found in array with index %d" , size-1 );
return;
}
search(array, size-1, key);
}
if 1-
, if 2-
, .

, . , n 0 ,
,
, - b-
.
,
,
.
(= )

,
.
,
T(n)= 2 .
,
T(n) 1 .
, ,
. ,
n - (
),
. ..
T(n) = 2n ,
T(n) n . ,
.
,
,
.
, k- ,
T(n) = 2(n-k) .
,
1 n1
2 n
T n 2 n k i n 1 ,
n k 0
n i 1
29

, , T(n)
n .
() ?
. ,
T(n) 2n , T(n) n . , T(n)

n ( c1 + c2 ) T(n) n . T(n) n .
(sorting)
, : (
), R0 , R1 ,

, Rn1 - (

) . , ki
Ri .

, ki (
) .
, ,
() :

75

3000

6000

40

25000

2500

35

2000

15000

. .. ,
. ,
,
(, , )
. ,

, (
).
, ,

.
.
30

. , bubble sort
.
amocanis Camoyalibeba.
Semavali monacemebi: Canawerebi R0, R1, , Rn-1. yovel Ri Canawers Seesabameba Ki Canaweri
e.i. agreTve mocemulia K0, K1, , Kn-1. Kiebs Soris ganmartebulia binaruli
damokidebuleba .
gamomavali monacemebi: gadalagebuli Ri Semavali monacemebi, Tu es saWiroa, ise, rom
Ki
gasaRebebisTvis samarTliania K i
Ki .
0

magaliTad, warmovidginoT,
(gamartivebuli) monacemebisagan:

rom

n 1

Semdegi

faili

Sedgeba

bankis

meanabreTa

gvari
gegeSiZe
mesxi

saxeli
giorgi
petre

asaki
75
40

anabari larebSi
3000
25000

anabari dolarebSi
6000
2500

sabaZe

pavle

35

2000

15000

da a. S.. TiToeuli striqoni aris Canaweri, romelic Sedgeba xuTi gansxvavebuli


velisgan. sxvadasxva SemTxvevaSi, SesaZloa saWiro gaxdes Canawerebis gadaxarisxeba
(sortireba, gadalageba, gadawyoba) ise, rom anabari dolarebSi dalagdes zrdadobis
mixedviT (mesxi, gegeSiZe, sabaZe) da am SemTxvevaSi Canaweris gasaRebs warmoadgens veli
anabari dolarebSi. sxva SemTxvevaSi, magaliTad bankTan arsebuli sadazRvevo
firmisTvis SesaZloa saWiro gaxdes Canawerebis gadalageba ise, rom meanabreTa asaki
dalagdes klebadobis mixedviT (am SemTxvevaSi ukve dalagebulia am gasaRebis mixedviT).
Cvens mier ganxiluli magaliTi Tavisi simartivis miuxedavad Zalze tipiuria im
azriT, rom am SemTxvevaSi yoveli gasaRebi aris namdvili ricxvi, xolo binaruli
damokidebuleba aris, am SemTxvevaSi, Cveulebrivi utoloba ricxvebs Soris.
SemdegSi, zogadobis SeuzRudavad, ganvixilavT kidev ufro gamartivebul
SemTxvevebs, rodesac yoveli Canaweri aris igive Tavisi Tavis gasaRebi, anu emTxveva mas
da warmoadgens namdvil ricxvs. am dros binaruli damokidebuleba aris Cveulebrivi
utoloba ricxvebs Soris. am SemTxvevaSi Cvens amocanas warmoadgens ricxvebis dalageba
zrdadobiT an klebadobiT.
inglisurenovan literaturaSi, Camoyalibebuli amocanisTvis gamoiyeneba termini
sortireba - sorting. qarTulSi SeiZleba gamoviyenoT terminebi dalageba, gadawyoba,
gadaxarisxeba.
Tu yvela R1, R2, , Rn Canaweri moTavsebulia erTi da igive tipis mexsierebaSi,
magaliTad, operatiul mexsierebaSi, maSin viyenebT termins Siga sortireba.
sortireba amorCeviT (selection sort): ganvixiloT martivi SemTxveva, rodesac Canawerebi
warmoadgenen namdvil ricxvebis a0 , a1 , , an 1 masivs. algoriTmis zogadi gegma
(fsevdokodi) aseTia:
31

1. sawyis masivSi vipovoT minimumi ai yvela ricxvs Soris da gavucvaloT adgilebi


0

mas da pirvel adgilze myof a0 ricxvs.


2. 1-dan (n-1)-mde indeqsebis mqone ricxvebs

Soris

vipovoT

minimumi

ai

da

gavucvaloT adgilebi mas da meore adgilze myof ricxvs.


3. pirvel da meore punqtSi aRwerili moqmedebebi gameordes agreTve ricxvebisTvis
indeqsebiT i dan (n-1) mde, yoveli i 2, , n 2 -sTvis.
Semdeg cxrilSi naCvenebia, Tu rogor muSaobs algoriTmi konkretuli masivis
SemTxvevaSi. ruxi feriT moniSnulia ricxvebi, romlebis mimdinare bijze cvlian
adgilebs. SedarebiT Ria ferisaa ujrebi, romlebSic Cawerili ricxvebi ukve
dalagebulia.

biji
0

14

11

16

12

19

11

16

14

12

19

16

14

12

19

11

16

14

12

19

11

11

14

12

19

16

11

12

14

19

16

11

12

14

19

16

11

12

14

16

19

algoriTmis bloksqema da programuli kodis ZiriTadi nawili moyvanilia qvemoT. ufro


srulad, programuli kodis Sesaxeb ix. [6] 98gv., [4] 257gv.; am algoriTmis rekursiuli
blok-sqema ix. [1] 3t. 170gv.

32

a0, a1, , an-1

i=0

i < n-1

ai ... ai
0

n 1

T
i ++

m=i

gacvla

j = i +1

ai am

rogorc algoriTmis aRweridan


da moyvanili blok-sqemidan Cans, #3
striqonis sirTulea (fasia)
n 1
n 1
n n 1
c4 n i = c4 i =
c4 ,
2
i 1
i 1
xolo #4 striqonis
sirTule,
n 1 n 2 c .
analogiurad, aris
5
2
gacvlaTa ai aminimal raodenobaa (n-1).

j<n

T
m= j

Semdeg
cxrilSi
moyvanilia
pirdapiri
amorCevis
programa
SELECTIONSORTis
striqonebi,
romlebsac
miwerili
aqvs
fasi
(operaciaTa
raodenoba)
da
ganmeorebaTa ricxvi, rac aucilebelia
sirTulis Sesafaseblad saukeTeso,
saSualo
da
uares
SemTxvevebSi.
mivaqcioT yuradReba, rom minimaluri
elementis (anu minimumis) Sesabamis
indeqss vuwodebT minimals.

aj < am

j ++

# kodis striqoni

fasi ganmeorebaTa ricxvi

cvladebis aRwera: int m,i,j,minimal, temp;


monacemebis inicializacia: a0 , a1 , , an 1 masivis Seyvana

c1

for (i = 0; i < n-1; i++)

c2

n -jer

c3

( n 1 ) - jer

{
minimal = i;

for (j = i+1; j < n; j++)


{

c4

n 1

n i

- jer

i 1

if (a[j] < a[minimal])

c5

n 1

n 1 i

- jer

i 1

minimal = j;

c6

c7

( n 1 ) - jer

c8

}
6

temp=a[i];
a[minimal]=temp;

a[i]=a[minimal];

}
gadaxarisxebuli matricis gamobeWdva

33

rac Seexeba minimal = j operaciis SesrulebaTa raodenobas igi damokidebuli


iqneba Semaval monacemebze da amitom masTan dakavSirebiT saWiroa ufro detaluri
analizis Catareba.
advilad Cans, rom algoriTmisTvis saukeTeso SemTxvevaa maSin, rodesac Semavali
monacemebi ukve dalagebulia zrdadobiT a0 a1 ... an 1 .
minimal = j saerTod ar sruldeba.
minimal = j
operaciis SesrulebaTa saSualo
raodenobis dasaTvlelad moxerxebulia gavixsenoT pirvel
leqciaSi
masivSi
maqsimumis
povnisTvis
(igivea
minimumisTvis) Catarebuli analizi: Cven miviReT, rom n
sigrZis masiviSi maqsimumis povnisTvis saWiroa aRniSnuli
tipis operaciis Sesruleba saSualod Hn 1= 12 + 13 + 14 +

aseT SemTxvevaSi operacia


1
1
1

i 1, , n 1 . am
safexurze arsebiTad vsargeblobT TvisebiT: saSualoTa
jami jamis saSualos tolia. gvrCeba gamosaTvleli jami

1
n

jerze

masivis

n 1

i 1

sigrZe

aris

(n-i),

1
3
1
3
1
3

1
n 1
1
n 1
1
n 1

1
n
1
n
1
n

1
n 1

1
n

1
n 1

1
n

- jer. Cven minimums vpoulobT (n-1)jer da yovel

1
2
1
2
1
2

1
2

1
3

n 1

H n i =

H
i 1

. rom davinaxoT rogori advilia am jamis

gamoTvla ganvalagoT Hnis n cali Sesakrebi n cal striqonSi da SevxedoT miRebul


matricas: mTavari diagonalis qveda samkuTxedSi ganlagebulia swored CvenTvis
saintereso jami. zeda samkuTxedSi diagonalTan erTad (naxazze gaferadebuli ujrebia)
elementTa jami, vertikalurad Tu CamovyvebiT 1 aris pirvel svetSi erTxel, meore
svetSi aris orjer 12 , mesame svetSi samjer 13 da a.S. bolo svetSi 1n aris njer da
amgvarad zustad nis tolia. radgan mTel matricaSi myof elementTa raodenoba aris n
Hn, amitom gamodis
n 1

H
i 1

= n Hn n.

sabolood, saSualo Sefaseba gamodis ( n Hn 2n -1) c6 .


uaresi SemTxveva, cxadia ver gadaaWarbebs ciklebis trialis saerTo raodenobas
da SeiZleba davweroT, rom iqneba O(n2). Zalian sainteresoa am ricxvis ufro zusti
Sefasebac, rac kidev ufro faqiz analizs moiTxovs (ix. [1], t3., 171 gv., 192gv.).
dasasruls, aRvniSnoT amorCevis algoriTmis kidev Semdegi Tvisebebi:
1. amorCevis algoriTmi naklebad aris damokidebuli Semaval monacemebSi arsebul
kanonzomierebebze
da
ukve
dalagebul
masivTan
muSaobs
iseve,
rogorc
daulagebelTan (ix, [4], 258gv.).
2. yoveli Canaweri gadaadgildeba maqsimum erTxel anu misi sirTule wrfivia gacvlaTa
mimarT da es am algoriTmis udavo Rirsebaa [6] 98gv., 104gv. algoriTmis
gaumjobeseba SesaZlebelia sxvadasxva gziT, rasac mivyavarT bevr saintereso da
mniSvnelovan algoriTmamde [1] 171-190gv.

34

sortireba buStulis meTodiT (bubble sort):


algoriTmis ideaa mocemul a0 , a1 , , an 1
ricxvebSi CavaTvalieroT yvela wyvili da
gadavalagoT, sadac darRveulia zrdadobiT
dalageba.
algoriTmis
ase
martivi
Camoyalibeba gvaZlevs martiv Canawers (ix.
[6], 101gv):

a0, a1, , an-1

i = n-1

i >0
i--

ai ... ai
0

n 1

T
j=1

for (i=n-1; i>0; i--) {


for (j=1; j<=i; j++)
{
ji
if (a[j-1] > a[j])
{SevucvaloT adgilebi a[j-1] da
j ++
T
a[j]}
}
aj < aj -1
}
sicxadisTvis, nabij nabij vnaxoT Tu rogor
T
muSaobs algoriTmi romelime konkretul
gacvla
Semaval monacemebze anu, rogorc amboben,
a
j 1 a j
Cavata
roT
i=3
7
6
3
10
algoj=1
riTmis trasireba:
aviRoT ricxvebi 7, 6, 3, 10 da vnaxoT rogor
6
7
3
10
daalagebs maT aRwerili algoriTmi.
j=2
am algoriTmis erTerTi dadebiTi Tviseba
isaa,
rom
gare ciklis yoveli gavlis Semdeg erTi
6
3
7
10
mainc elementi ikavebs Tavis ukidures marjvena
j=3
adgils. swored es aris gaTvaliswinebuli,
rodesac Siga ciklis ajamva xdeba imde. naxazze
6
3
7
10
es
elementebi,
romlebic
gadavidnen
Tavis
saboloo marjvena adgilas da romlebsac Siga
6
3
7
10
cikli
aRar
Seexeba,
moTavsebulni
arian
i =2
j=1
nacrisfer zolSi.
cudia is, rom SedarebaTa raodenoba
3
6
7
10
nebismieri Semaval monacemebisTvis aris erTi da
igive da aris
j=2
n 1
n 1
n n 1
3
6
7
10
=
.
i

1
i =

2
i 1
i 1
amis
gaumjobeseba
SeiZleba,
Tu
i =1
davakvirdebiT,
rom
rodesac
morigi
3
6
7
10
gadaTvalierebis dros ar moxdeba erT mainc
wyvilSi
adgilSenacvleba,
es
niSnavs,
rom
j=1
faqtiurad
dalageba
ukve
miRebulia.
Cven
3
6
7
10
magaliTze es moxda i=2 da j=2 SemTxvevisTvis da
amdenad, nabiji i=1 zedmetia. am naklis aRmofxvra
35

SesaZlebelia, Tu SemovitanT damatebiT cvlads, romelic daafiqsirebs moxda Tu ara


adgilSenacvleba.
qvemoT moyvanilia programis kodi, sadac am rolSi aris cvladi test. axla ukve
SedarebaTa raodenoba, iseve rogorc gacvlaTa raodenoba, damokidebuli xdeba Semaval
monacemebze da azri eZleva ufro zusti analizis Catarebas.
saukeTeso SemTxveva iqneba, cxadia, rodesac adgilSenacvlebebi saerTod araa
saWiro. es ki moxdeba Tu masivi ukve dalagebulia zrdadobiT. pirvelive gavlis Semdeg
cvladi test mogvcems amis Sesaxeb Setyobinebas da programis Sesruleba Sewydeba.
ganvixiloT SemTxveva, rodesac mocemuli Semavali cvladebi dalagebulni arian
klebadobiT. e.i., yvelaze marcxena adgilas aris yvelaze didi, mis marcxniv sididiT
meore da a.S. maSin imisaTvis, rom
yvelaze
didma
elementma
miaRwios for(i = n-1; i > 0; i--)
{
yvelaze marjvena Tavis adgils, man unda
test=0;
gaiaros n 1 cali adgilSenacvleba.
for(j = 1; j <= i; j++)
sididiT
meore
elementi
pirveli
adgilSenacvlebis mere moxdeba ukidures
marcxena adgilas da axla ukve mas
dasWirdeba n 2 adgilSenacvleba, rom
miaRwios

Tavis

adgils.

if(a [j] > a [j+1]) {


SevucvaloT adgilebi a[j-1] da a[j];
test=1;
}
}
/*end for j*/
if(test==0) break;
} /*end for i*/

amgvarad am
n n 1
SemTxvevaSi saWiro xdeba
cali
2
adgilSenacvleba, rac cxadyofs, rom ganvixileT uaresi SemTxveva.

saSualo SemTxvevis analizisTvis vuSvebT, rom erTnairad mosalodnelia


Sewyveta nebismier nabijze. pirveli gavlis Semdeg programis SeCerebis SemTxvevaSi
SedarebaTa raodenoba iqneba n 1 . meore gavlis Semdeg programis SeCerebis
SemTxvevaSi SedarebaTa raodenoba iqneba n -1 + n -2. analogiurad, Tu programa gaCerda i
nabijis Semdeg, SedarebaTa raodenoba iqneba
n 1
n 1
i 1
n n 1 i i 1
j
j
j=
=

2
2
j i
j 1
j 1
([3] 79-80gv.). rogorc aRvniSneT, sul aris

n 1

cali gavlaTa raodenoba, amitom

saSualo gamodis

1 n 1 n n 1 ii 1 n 2 n 1

2 =
.
6
n 1 i 1 2
rogorc vxedavT, saSualo da uaresi SemTxvevebi erTi rigisaa.
SesaZlebelia algoriTmis kidev ufro daxvewa im indeqsis damaxsovrebiT, sadac
moxda bolo adgilSenacvleba, gavlebis mimarTulebis da luw-kentovnebis mimarT
SecvliT, magram es meTodebi ver iZlevian sagrZnob gaumjobesebas (ix. [1] 3t. 130137gv.). magram Tu daviwyebT aramezobeli gasaRebebis Sedarebas, maSin am gzaze
SesaZlebelia gacilebiT ukeTesi algoriTmebis miReba (ix. [1] 3t. 137-157gv.).

36


, n a[]
.
.

: , .
.
()
,
.
,
8
, , :
a[] i ,
(i+1) a[i]
:
1. (a[i]>a[i-1]), a[i]
, a[] (i+1)
;
2. , a[i] a[i-1] ,
a[i-1]- , a[i-1]-
.
3. , a[i]
.
insertion(a[],i)- ,
,
,

i 1
i2
i 3
i 4
i 5
i 6
i 7
i 8

14
11
8
8
2
2
2
2

11
14
11
11
8
8
8
7

insertion(a[],i) {

8
8
14
14
11
11
11
8

16
16
16
16
14
12
12
11

2
2
2
2
16
14
14
12

12
12
12
12
12
16
16
14

19
19
19
19
19
19
19
16

7
7
7
7
7
7
7
19
T(i)
37

a[i] > a[i-1], ;

, a[i] a[i1]-;

i 1 , ;

insertion(a[],i-1);

c1
c2
c3
T(i-1)

}
, :
,
, .
:
void insertion(int *a, int i)
{
if (a[i]>a[i-1]) return;
swap(a+i, a+i-1);

if (i <= 1)

return;

//

//

// ,

insertion(a, i-1);
// ,

}
.
,

:
for (i=1; i<n; i++) insertion(a, i);
(
) ,
. , n 0 .
,
. , insertion
i - T(i) = 1. ,
(n-1) c1 , n .
,
. , insertion(a[],i)-
:
T(i) = 2 i .
,
38

n 1

T(n) =

2i

n n 1

i 1

n 2 .
insertion(a[],i)- . a[i]
i 1 , .
-.
a[i] > a[i-1] 1 .
a[i] a[i-1]- a[i-2]- , insertion(a[],i)
insertion(a[],i-1)- 3.
, 5 ...
, : 2 (i 1) 1 .
, : 2 i .
:

1 i
1

2k 1 1 i 1 .

i 1 k 0
i 1

T(i) =
T(i) = i .
,
for (i=1; i<n; i++)

insertion(a, i);

( ) :
n 1

T(n) =

i n .
2

(1)

i 1

T(n) n2 . (1) ;
i ,
(1).

39

sortireba Serwymis meTodiT (merge sort)


sortirebis es meTodi 1945 wels SeimuSava jon fon neimanma. Cven ganvixilavT
am meTodis rekursiul realizacias. rekursiis saSualebiT kargad xerxdeba amocanis
dayofa imave Sinaarsis qveamocanebad. algoriTmis muSaoba pirobiTad SeiZleba
gavanawiloT 3 etapad:
1. xdeba sawyisi masivis dayofa or Tanabari zomis qvemasivad;
2. pirvel etapze miRebuli masivebi cal-calke sortirdeba;
3. xdeba dasortirebuli masivebis gaerTianeba (Serwyma).
rekursiuli bijia gadasvla mTliani jgufidan or qvejgufze. muSaobis procesSi
miRebuli qvemasivebis dayofa grZeldeba manam, vidre TiTo elementian masivebamde ar
davalT. esaa rekursiis baza, igi
emyareba im mosazrebas, rom erTi elementisgan
Sedgenili jgufi faqtiurad dalagebulia. Semdeg viwyebT mezobeli sortirebuli
qvemasivebis gaerTianebas, vidre ar miviRebT gadaxarisxebul sawyis masivs. gaerTianebis
processi arsebiTia SevinarCunoT dalageba zrdadobis mixedviT. Cven aRvwerT ori
daxarisxebuli masivisgan axali daxarisxebuli masivis miRebis erT bunebriv meTods,
romelic jer grafikulad warmovidginoT Semdegi naxazis saSualebiT (ruxi feriT is
elementebia
aRniSnuli,
romelTa
Sedarebac
xdeba
mocemul
etapze):
8

16

21

39

26

16

21

39

26

16

7
7

10

14

19

10

14

16
7

26

21

16

39

10

14

10

26

39

14

26

21

19

39

14

19

)
8

10

10
14

19

)
8

21

19

21

39

28

21
7

16

10

14

16

28

39

19

19

10

14

16

21 28

29 39

40

amgvarad
algoriTmis
mTavar
nawils
warmoadgens
ricxvTa
ori
dalagebuli
jgufis Serwyma erT jgufad. ganvixiloT
ori ricxviTi masivi a0 a1 an da

b0 b1 bm . yvelaze advilia isini


SevrwyaT mesame (n + m) ganzomilebis
masivis gamoyenebiT. Sesabamisi programis
kodi moyvanilia, magaliTad, [4]-Si 332gv.-ze
(garkveuli gamujobesebebiT [6]-Si 164gv.-ze
da [2]-Si, 2001w.-is gamocema 30gv.). Serwyma
xdeba
rigrigobiT
a da
b
masivebis
elementebis SedarebiT da Sesabamis adgilze
c masivSi minimumis gadataniT. cxadia, unda
vizrunoT im SemTxvevaze rodesac erTerTi a
da bs Soris amoiwureba da darCenili
nawili meoresi unda pirdapir gadavitanoT
cSi. am ideis moyvanil realizacias sakmaod
bevri
nakli
aqvs,
algoriTmuli
TvalsazrisiT rogorebicaa: didi damatebiTi
mexsierebis gamoyeneba, ciklSi motriale
zedmeti Semowmebebi da a.S. , magram aqvs
Rirsebac is advilad aRsaqmelia.

a0, , an-1
b0, , bm-1
i, j, k = 0

j =m

i=n

T
ck = ai

i ++

ai < bj

ck = bj

k ++

j ++

k = n + m-1

c0 c1 ... cn m 1

arsebobs Serwymis iseTi realizaciebi, romlebic imave masivebSi aTavseben


dasxarixebel elementebs, Tumca maTi programuli gamarTva maRal ostatobas moiTxovs.
gansakuTrebiT efeqturia bmuli siebis gamoyeneba. SeiZleba iTqvas, rom am SemTxvevaSi
ormxriv saintereso efeqtebs aqvs adgili. bmuli siebis gamoyenebiT SerwymiT
sortirebaSi damatebiTi mexsierebis problema ixsneba, xolo Tavis mxriv sortirebis
yvela meTodTagan swored SerwymiT sortirebaa rekomendirebuli bmuli siebis
dasalageblad.
rekursiuli algoriTmis realizaciisTvis moxerxebulia aRwerili Serwyma
warmovidginoT erTi da igive masivis farglebSi. SevTanxmdeT, rom erTi
(dasaxarisxebeli) masivis ori sortirebuli fragmentis ap, aq+1, , aq da aq+1, a q+2, , ar
-s Serwymas axdens funqcia MERGE(a,p,q,r), romelic am fragmentebs aerTianebs erT
jamuri sigrZis daxarisxebul fragmentSi, xolo sawyisi masivis monakveTis (indeqsebiT
p - dan r - mde) dalagebis rekursiuli algoriTmis realizacia axdens funqcia
MERGE-SORT(a,p,r). maSin, MERGE-SORT(a,p,r) - is fsevdokods aqvs saxe (ix.
[2], 26-27 gv.):
MERGE-SORT(a, p, r)
if ( p < r ) {
q = (p + r)/2
// igulisxmeba mTelad gayofa
MERGE-SORT(a,p,q)
MERGE-SORT(a, q+1, r)
MERGE(a, p, q, r)
}
41

mTeli masivis dalagebisTvis sakmarisia gamoviZaxoT funqcia MERGE-SORT(a,0,n-1).


ganvixiloT algoriTmis muSaoba konkretul magaliTze:
11

11

11

11

17

11

11

17 27 32

17 27 32

17

27 32

17

27

19

19

42 27 21

42 27

42

27 32

11 17 27 32

32

42 27 21

42 27 21

27 32

11 17

27 32

17

27

27 42

21

19

21

19

21

21 27 42

19

19

19

19 21 27 42

11 17 19 21 27 27 32 42

algoriTmis analizisTvis jer ganvixiloT Serwyma. saukeTeso SemTxveva gveqneba,


rodesac erTi masivis, magaliTad a masivis, yvela elementi naklebia meore, b masivis,
elementebze. maSin Sedareba Sesruldeba njer. Tu a da b masivebis elementebi
ganlagebulni arian mimdevrobiT a0 b0 a1 b1 ... maSin es iqneba uaresi SemTxveva da
Sedareba Sesruldeba n + m -1 jer.
axla gadavideT rekursiis sirTulis analizze. rekurentuli formula davweroT
calcalke uaresi da ukeTesi SemTxvevebisTvis. rodesac gvaqvs erTelementiani masivi,
maSin SedarebaTa raodenoba nulia. saukeTeso SemTxvevisTvis gamodis fomula
0 rodesac n 1

T n
n
n
2 T 2 2 rodesac n 1
da uaresi SemTxvevisTvis
0 rodesac n 1

T n
n n 1 rodesac n 1
2 T

42

saukeTeso SemTxvevisTvis pirdapir muSaobs ZiriTadi rekurentuli lema


(SegviZlia uSualod maTematikuri induqciis gamoyenebac) da sirTule aris O(n log 2 n ).
uaresi SemTxvevisTvis pasuxs gvaZlevs ZiriTadi rekurentuli lemis analogiuri
msjelobebi (cxadia, SegviZlia uSualod maTematikuri induqciis gamoyenebac), romlebic
ganvixiloT calke. simartivisTvis aviRoT SemTxveva, rodesac n 2k 2log2 n
maSin
T(n) = T 2k = 2 T

2
2k
2

1=

= 2 T 2k 1 2k 1 = 2 2 T 2k 2 2k 1 1 2k 1 = 22 T 2k 2 2k 2 2k 1
k 1

k 1

== 2k T 1 2k k 2i = 2k k 2i = n log 2 n
i 0

i 0

log 2 n 1

2i =

i 0

= n log 2 n n 1 .
amgvarad uaresi SemTxvevac igive O(n log 2 n ) rigisaa rac saukeTeso, da bunebrivia amave
rigis iqneba saSualo SemTxvevac.

,
: n a[n]
a p ,a p 1 , ,a r q

p q r , a p ,

a q 1 ,

,a q

,a r .

a[n] ,
(, , )
:

a p ,

a p ,

,a r

,a r , a p ,

a q 1 ,

,a q

,a r

, q p q r .
(partition).
q .


a p , ,a q a q 1 , ,a r .

43

a p ,

,a r

QUICKSORT(a,p,r)-,

PARTITION(a,p,r)-,
:
QUICKSORT(a, p, r)
{
1

if (p < r)
{

q = PARTITION(a,p,r);

QUICKSORT(a, p, q);

QUICKSORT (a, q + 1, r);


}

}
, C-
,
.

QUICKSORT(a,0,n-1).

,
,
. , p r , QUICKSORT(a,p,p)

, a p .
,

n-

(n+1) a[n+1]. ,
QUICKSORT(a,0,n)-. 0<n, q =
PARTITION(a,0,n); , ,
a 0 , ,a q a q 1 , ,a n

a q 1 ,

a 0 ,

,a q -

,a n - . , 3

4 a 0 ,

,a q a q 1 ,

,a n .

,
( ),
. ,
.

() PARTITION. :
PARTITION (a, p, r)
44

{
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.

x = a[p];
i = p-1;
j = r+1;
while(1)
{
while(1)
{
j--;
if (a[j] <= x ) break;
}
while(1)
{
i++;
if (a[i] >= x) break:
}
if( i < j )
{
a[i] a[j] -;
}
else return(j);
}
16 4 11 27 8 13 40 23 31 2 19 11 7
i=0, j=12
7 4 11 27 8 13 40 23 31 2 19 11 16
7 4 11 27 8 13 40 23 31 2 19 11 16
i=3, j=11
7 4 11 11 8 13 40 23 31 2 19 27 16
7 4 11 11 8 13 40 23 31 2 19 27 16
i=6, j=9
7 4 11 11 8 13 2 23 31 40 19 27 16

,
. , ,

, ,


. , 4- while
j-
i-, PARTITION(a, p, r)
.

45


T(n)- n
. , T(1)= c1 1 .
, i n i ,
T(n) = n + T(i) + T(n-i),
n n , n
PARTITION
. (n

PARTITION- n ,
, i, j n+3 ).
,
.
, ,
- . ,

. ,
T(n) = T(n-1)+ n ,
T(1) 1 - :

n
T(n) = T(n-1)+ n = k = k n 2 .
k 1
k 1
, k -
n

, k .
,
:
T(n) = 2 T n / 2 n .

n - n
:

T(n) = 2 T n / 2 n = 2 2 T n / 4 n / 2 n = 4 T n / 4 2 n =

( .., n- log n -, , )
= 2log n T 1 log n n ,

T(n) = = n 1 log n n = n log n .


. ,
.

46

,
, - .
,
,
, x (,
).
.

.
. 15- -7 ( 23).

.
,
. 23-
, 23- .
,
. ,
,
1 . )
, ) ,
.
, .
-9 ( 2).
( ) -
(,
, -
).
, ,
) )
( 10- 14-, 31, 23, 40, 27, 24).
: 1
, ,
1 .

47

16

11

27

13

40 23

31

19

11

17

24

16

11 17

13

40 23

31

19

11

27

24

16

11

17

13

23

31

19

11

40 27

24

16

11 17

13

11

31

19

23

40 27

24

16

11

13

11

19

31

23

40 27

24

17

11

17

13

11

19

16

)
)

17

13

11 11

19

16

)
)

17

13

11 11

19

16

11

11

)
)
)

31

23

31

24 27

40

23

24

31 27

40

23

24 27

40

11

13

11 17

19

16

23

24

31 27

40

11

11

13 17

19

16

23

24

31 27

40

11

13 16

19

17

23

24

31

27

40

11

13 16

19

17

23

24

31

27

40

11

11

13 16

11

11

13

16

17

17

19

23

24

31

27

40

19

23

24

31

27

40

48

monacemTa ierarqia
umciresi monacememi, romlis aRqmac SeuZlia kompiuters, aris 0 an 1. mizezi
martivia, radgan jerjerobiT mxolod iseTi eleqtronuli sqemebi mzaddeba,
romlebsac SeuZliaT mxlod or mdgrad mdgomareobaSi yofna _ erTi aseTi
mdgomareobaa + anu 1, xolo meore _ anu 0. monacemTa am umcires erTeuls ewodeba
biti (inglisuri termini bit warmoadgens binari digit is Semoklebas, rac niSnavs
orobiT cifrs). nebismieri monacemi, rac muSavdeba kompiuteris mier, warmoidgineba
nulebis da erTebis kombinaciis saxiT.
informacia, romelsac nebismieri programa amuSavebs, warmoadgens raime procesis
maTematikur an sxva saxis aRweras. Sesabamisad, programuli garemo uzrunvelyofs
amgvari aRwerebis ZiriTadi elementebis _ ricxvebisa da simboloebis mxardaWeras.
magaliTad, C Si gaTvaliswinebulia monacemTa sami ZiriTadi tipi:
mTeli ricxvebi: int;
aTwiladebi: float;
simboloebi: char.
erTis mxriv, TiToeuli maTgani Sedgeba bitebis garkveuli raodenobisagan (rac
konkretul sistemazea damokidebuli), xolo meores mxriv isini TviTon warmoadgenen
monacemTa sxva, ufro rTuli konstruqciebis anu struqturebis safuZvels.
konkretul operaciul sistemaSi, ricxvebis warmodgenisTvis gankuTvnilia
bitebis garkveuli raodenoba. Sesabamisad, mTeli ricxvebis diapazoni, romlis
uzrunvelyofac SeuZlia sistemas, damokidebulia mTeli ricxvis warmodgenisTvis
gankuTvnili bitebis raodenobaze. analogiurad, aTwiladi ricxvebis warmodgenisTvis
gankuTvnili bitebis raodenobazea damokidebuli namdvili ricxvebis warmodgenis
sizuste. ZiriTadi tipebis varirebis xarjze miiRweva optimaluri balansi dakavebul
mexsierebasa da diapazons (mTeli ricxvebisTvis) an dakavebul mexsierebasa da sizustes
Soris (aTwiladebisTvis). am mizniT, magaliTad mTeli ricxvebisTvis gamoiyeneba agreTve
long int, short int tipebi, xolo aTwiladebisTvis double.
amJamad, daprogramebaSi miRebulia orientireba programis miznebze da ara
kompiuteris SesaZleblobebze, ris xarjzec programebi ufro universaluri da
gadatanadi (sxva sistemebze) gamodis. magaliTad, short int is tipis ricxvi
ganixileba rogorc obieqti, romelsac SeuZlia mniSvnelobis miReba diapazonSi -32768
idan 32767 is CaTvliT.
iseve rogorc simboloebi da ricxvebi Sedgeba bitebisgan, veli Sedgeba
simboloebisa da ricxvebisgan. magaliTad, konkretuli adamianis gvari, an saxeli, an
asaki warmoadgens vels.
ramdenime velisgan, romlebic logikurad arian erTmaneTTan dakavSirebuli,
iqmneba Canaweri. C Si Canaweris Seqmna sxvadasxvanairad SeiZleba. am mizniT, TviTon C
gvTavazobs monacemTa tips struct, romelsac Canaweris struqturas vuwodebT. igi
Sedgeba ramdenime velisagan. magaliTad, Tu programa iqmneba romelime kompaniis
klientebis angariSebTan samuSaod, maSin TiToeuli klientis Sesabamisi Canaweri
SesaZloa Sedgebodes Semdegi velebisgan: angariSis nomeri, saxeli, gvari da saldo (anu
balansi). Tu aseTi Canaweris struqturas davarqmevT saxels clientData, maSin igi
aRiwereba Semdegnairad:
struct clientData {
49

int accNmb;
char lastName[ 15 ];
char firstName[ 10 ];
double balance;

// angariSis nomeri
// gvari
// saxeli

}
cxadia, kompaniaSi mravali TanamSromelia, amitom mosalodnelia, rom gveqneba aseTi
Canawerebis mTeli simravle
100 Jordan Nic 345.95
514 Herman Joe 0.00
da ase Semdeg.
erTmaneTTan dakavSirebuli, erTi da igive struqturis Canawerebis erTobliobas
ewodeba (Canawerebis) faili. failis donemde, programirebis ena C uzrunvelyofs
monacemebis mxardaWeras Sesabamisi tipebis saSualebiT. yovel konkretul sistemaSi,
yoveli konkretuli tipis monacemebisTvis fiqsirebulia bitebis raodenoba, romlebic
gamoyofilia monacemis warmosadgenad. bitebis raodenobis dasadgenad SegviZlia
gamoviyenoT operatori sizeof.
Canawerebis faili warmoadgens iseTi simravlis magaliTs, romelic, rogorc
wesia, icvleba algoriTmis (programis) Sesrulebis procesSi. amitom xSirad mas
agreTve uwodeben dinamiur (dynamic) simravles. failebTan muSaobisas, sxvadasxva
algoriTmebi sxvadasxva operaciebs iyeneben. ZiriTadi aris failSi Canaweris Camateba an
waSla, elementis moZebna da zogierTi sxva, romlebzec odnav qvemoT visaubrebT.
imisaTvis, rom movZebnoT saWiro Canaweri, unda vicodeT Tu ra maxasiaTeblis
mixedviT veZebT mas. sxva sityvebiT, yovel CanawerSi erTi veli mainc unda iyos
ganxiluli rogorc Canaweris gasaRebi (key). am SemTxvevaSi, danarCeni velebi
ganixileba rogorc Tanamgzavri monacemebi (satellite data). Canawers veZebT gasaRebis
winaswar mocemuli mniSvnelobis mixedviT, anu veZebT im Canawers (Canawerebs), romlis
gasaRebs aqvs aseTive mniSvneloba. saWiro Canaweris moZebnis mere SegviZlia SevcvaloT
am CanawerSi moTavsebuli Tanamgzavri monacemebi.
vigulisxmoT, rom algoriTmis Sesrulebis procesSi monacemebi inaxeba romelime
saerTo (algorisTmisTvis saWiro yvela monacemisTvis) mexsierebaSi. monacemebTan
muSaobisas saWiroa SegveZlos mexsierebaSi TiToeuli monacemis misamarTis gansazRvra.
C gvTavazobs Zlier mxardaWeras am mimarTulebiT, rogorc qvemoT vnaxavT.
moqmedebebi (operaciebi) monacemebze
erT erTi ZiriTadi motivi monacemebis sxvadasxva tipebad dayofisa isaa, rom
kompilators saSualeba hqondes gaarkvios ra moqmedebebia daSvebuli (anu ra
funqciebia gansazRvruli) konkretul monacemze. amgvarad, monacemTa yoveli tipi,
sabazo Tu Sedgenili, gulisxmobs rom gansazRvrulia nebadarTul operaciaTa simravle.
saWiroebis SemTxvevaSi, programists TviTon SeuZlia daamatos operaciebi (da
biblioTekebic) funqciebis gansazRvris gziT.
erT erTi ZiriTadi operacia aris monacemis misamarTis gansazRvra. es operacia
Zalian faqizad aris organizebuli C Si da mas calke ganvixilavT. jer jerobiT
sakmarisia davafiqsiroT, rom Tu x aris raime tipis monacemi, maSin &x warmoadgens
mis misamarTs mexsierebaSi.
50

operaciebi iyofa or jgufad. erTi jgufis operaciebs ewodebaT kiTxvebi


(moTxovna, SekveTa; inglisurad _ queries) da isini xasiaTdebian imiT rom arc cvlian
monacemebs; sxva danarCeni operaciebi iwveven monacemis cvlilebas. ganvixiloT ramdenime
xSirad gamoyenebadi operacia failebze.
Search(S,k): esaa kiTxva, romelic mocemuli S failis da k gasaRebis mixedviT
pasuxad abrunebs im Canaweris misamarTs, romelic Seicavs k s. Tu aseTi
Canaweri ar moiZebna, pasuxad daabrunebs mudmivs NULL, uaryofiTi pasuxis
niSnad.
Insert(S,x): S failSi Caamatebs Canawers, romlis misamarTs warmoadgens x
(igulisxmeba, rom am momentisTvis am Canaweris yvela veli ukve Sevsilia).
Delete(S,x): S failidan waSlis Canawers, romlis misamarTs warmoadgens x.
Minimum(S): abrunebs S failis im Canaweris misamarTs, romelSic moTavsebulia
umciresi gasaRebi (igulisxmeba, rom gasaRebebi wrfivadaa dalagebuli).
Maximum(S): abrunebs S failis im Canaweris misamarTs, romelSic moTavsebulia
udidesi gasaRebi.
programulad, operaciebi ganisazRvreba funqciebis saSualebiT. imisda mixedviT, Tu ra
struqturas gamoviyenebT failis dasamuSaveblad icvleba im funqciebis programuli
kodi, romlebsac viyenebT am operaciebis gansaxorcieleblad.
monacemebis adresaciis gavrcelebuli modelebi.
moqmedebebi (operaciebi) misamarTebze
monacemTa misamarTebTan samuSaod C sakmaod mdidar SesaZleblobebs gvTavazobs.
ganvixiloT maTi nawili.
yovel cvlads da mudmivs aucileblad gaaCnia sami maxasiaTebeli: saxeli,
mniSvneloba (inicializaciis Semdeg yovelTvis gansazRvruli) da misamarTi. x cvladis
misamarTs warmoadgens &x sidide. saWiroebis SemTxvevaSi misi gamobeWdva SeiZleba %d
an %p formatiT. sinamdvileSi, &x operacia (x is misamarTis aReba) gacilebiT
informatiulia, radgan monacemis misamarTi inaxavs informacias monacemis tipis Sesaxeb.
radgan es sakiTxi uaRresad mniSvnelovania da Tanabrad exeba rogorc programul, aseve
aparatul aspeqts, amitom mokled gavecnoT kompiuterSi monacemebis adresaciis yvelaze
gavrcelebul sqemebs.
C - sTvis yvelaze bunebrivi modeli TiToeuli simbolos (baitis) adresaciis
saSualebas iZleva. amas ewodeba adresacia baitebis mixedviT. mexsierebaSi ufro
msxvili monacemis (magaliTad, mTeli ricxvis an aTwiladis) mier dakavebuli adgilis
misamarTi, rogorc wesi, emTxveva misi pirveli simbolos misamarTs. imisda mixedviT,
tu ras vuwodebT pirvels, kompiuterebi iyofa or kategoriad.
Intel 80x86 da Pentium is mikroprocesorebSi arqiteqtura realizebulia bitebis
ganlagebiT marjvnidan marcxniv (e. w. maxvilboloiani arqiteqtura) da 32 bitiani
mTeli ricxvis misamarTi emTxveva misi ufrosi (udidesi nomriT) baitis misamarTs.
xolo Motorola 680x0 is mikroprocesorebSi arqiteqtura realizebulia bitebis
ganlagebiT marcxnidan marjvniv (e. w. blagvboloiani arqiteqtura) da 32 bitiani
mTeli ricxvis misamarTi emTxveva misi umcrosi baitis misamarTs. gansxvaveba imaSia,
51

rom maxvilboloiani arqiteqturis SemTxvevaSi, im baitSi romelic warmoadgens mTeli


ricxvis (an romelime sxva, erT baitze msxvili monacemis) misamarTs, moTavsebulia
ricxvis udidesi Tanrigebis Sesabamisi cifrebi, xolo blagvboloiani arqiteqturis
SemTxvevaSi, im baitSi romelic warmoadgens mTeli ricxvis (an romelime sxva, erT
baitze msxvili monacemis) misamarTs, moTavsebulia ricxvis umciresi Tanrigebis
Sesabamisi cifrebi (ufro dawvrilebiT, ix. [5], gv. 200). Semdegi martivi programa
amowmebs, Tu romel baitSi (ufrossi Tu umcrosSi) moxvdeba, erTiani, romelic mieniWa
grZel mTel ricxvs. amisTvis, mexsiarebaSi am ricxvis mier dasakavebel adgils
saziaros vxdiT simboloebis igive sigrZis masivTan. Tu masivis bolo elementi erTiani
aRmoCndeba, maSin adresacia xdeba marcxnidan marjvniv, Tu erTiani aris simbolo
nulovani nomriT, maSin adresaciaa marjvnidan marcxniv. sxva SemTxvevebSi es programa
ar iZleva arqiteqturis gamocnobis saSualebas.
#include<stdlib.h>
#include<stdio.h>
union {
long Long;
char Char[sizeof(long)];
} u;
main()
{
u.Long = 1;
if (1 == u.Char[0]) printf("right -> left \n");
else if (0 == u.Char[sizeof(long)-1]) printf("left ->
right \n");
else printf("uncertained \n");
system("PAUSE");
}
Tu mexsierebas warmovidgenT rogorc bitebisgan Sedgenil did monakveTs, maSin
&x iZleva rogorc aTvlis wertils, aseve bitebis im raodenobas dadebiTi
(misamarTebis zrdis) mimarTulebiT, rac aucilebelia mocemuli tipis monacemis
warmodgenisTvis, e.i. bitebis sizeof(monacemi) raodenobisgan Sedgenil erTeuls anu
masStabs. faqtiurad, gvaqvs ricxviTi wrfis diskretuli analogi: saTave + erTuli +
mimarTuleba. amis Semdeg gveZleva mexsierebaSi navigaciis saSualeba am aTvlis
wertilidan orive mimarTulebiT erTeulis jeradi sidideebiT. ganvixiloT konkretuli
magaliTi.
main()
{
int a=22;
printf ("%d
printf ("%d
printf ("%d
printf ("%d
}

\n",
\n",
\n",
\n",

&a );
sizeof(int));
&a - 1);
&a +4);
52

es programa damokidebulia ara marto sistemaze, aramed drois yovel konkretul


SualedSi operatiuli mexsierebis datvirTvis xarisxzec da sxvadasxva gaSvebis dros
sxvadasxva Sedegi SeiZleba mogvces. Tumca, icvleba mxolod aTvlis wertili, xolo
masStabi ucvleli rCeba. am programis erT erTi Sesrulebis Sedegi iyo:
2293620
4
2293616
2293636

rac niSnavs, rom a cvladis misamarTis erTi (mTeli tipis cvladis misamarTis
masStabiT) erTeuliT marcxniv waZvris Semdeg miRebuli misamarTi Semcirdeba 4 baitiT
(=8 bits), xolo 4 erTeuliT marjvniv waZvris Semdeg misamarTi izrdeba 16 baitiT.
erTi pirobiTi erTeuli rom 4 baitis tolia, amas adasturebs meore striqoni,
romelic gviCvenebs, rom mocemul sistemaSi sizeof(int)=4. Tu cvladi iqneboda sxva
tipis, misamarTebi Sesabamisad Seicvleboda.
ufro metic, Cven SegviZlia vnaxoT Tu ra informacia aris moTavsebuli mocemul
misamarTebze. amisaTvis unda gamoviyenoT misamarTidan mniSvnelobis amoRebis operacia
romelic varskvlaviT aRiniSneba, an gamoviyenoT funqcia &x[i], sadac x aris raime
tipis cvladi, xolo i mTeli ricxvia. gviCvenebs, Tu ra mniSvnelobaa moTavsebuli &x
+i misamarTze. kvlav ganvixiloT magaliTi.
main()
{
int a[6]={3,2,5,36, 39,7};
printf ("%d \n", a);
printf ("%d \n", &a);
printf ("%d \n", &a[1]);
printf ("%d \n", *(a+4));
printf ("%d \n", *(&a[1]+3) );
printf ("%d \n", (&a[1])[3] );
}
am programis erT erTi Sesrulebis Sedegi iyo:
2293584
2293584
2293588
39
39
39

pirveli ori striqoni gviCvenebs, rom masivis misamarTi warmoadgens masivis saxelis
mniSvnelobas. Semdegi striqonebi gviCveneben Tu rogor SeiZleba Secvlili misamarTidan
mniSvnelobebis aReba.
garda mniSvnelobebis aRebisa, SesaZlebelia mniSvnelobebis Secvlac, magram amis
gakeTeba mxolod im SemTxvevaSi aris mizanSewonili, Tu mexsierebis mocemuli
fragmenti sistemis mieraa gamoyofili da misi Secvla arafers daazianebs.

53

pointerebi (mimTiTebeli)
Zalian xSirad aucilebelia monacemis misamarTis damaxsovreba. es niSnavs, rom
TviTon misamarTi unda ganvixiloT monacemad. es sruliad bunebrivia, radgan, rogorc
vnaxeT, misamarTi inaxavs monacemis tips. formalurad, am mizniT Semodis pointeris
tipi, rac sxva araferia, Tu ara konkretuli tipis monacemis misamarTi. praqtikulad,
pointeri Zalian amartivebs bevr sakiTxs, maT Soris aRniSvnebsac. nimuSad ganvixiloT
winas msgavsi magaliTi.
main()
{
int a[6]={3,2,5,36, 39,7};
int *p;
p=&a[4];
printf ("%d \n", &a[4]);
printf ("%d \n", p );
printf ("%d \n", *(p-3) );
printf ("%d \n", p[-3] )
}
am programis Sesrulebis Sedegad vixilavT:
2293600
2293600
2
2

am teqnikis gamoyenebiT sirTules ar gaakeTebs masivis organizeba, romlis pirveli da


bolo indeqsi iqneba nebismieri mTeli ricxvi (ara aucileblad nulidan dawyebuli).

:
1.
2.
3.
4.
5.

. " ", 3- ., 2001


. , . , . ": ", ., ,
. " ", 2-
. " ++, 1- 4", "", 2001,
. , . " "

54

You might also like