Professional Documents
Culture Documents
Algoritmebi Da Monacemta Struqturebi I
Algoritmebi Da Monacemta Struqturebi I
( )
, , ,
,
.
. ,
( ) .
, , , , ,
, , ...
; -
, , ( ..
). ,
,
. ,
( ORACLE).
.
.
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.
mi
m
pi xi =
i 1
mi
m
i 1
xi =
1
m
m x
i
i 1
, ,
.
..
,
-
.
,
,
.
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 , (
) (
):
{
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 .
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
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
T (n) T (n 1) T n 2 c1 ,
sadac c1 aris amocanis or amocanad
(2)
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.
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 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
log N
N
NlogN
N2
N3
2N
109
1012
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
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
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
19
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
a
1 , anu rodesac a < c, maSin jami
c
samarTliania Teoremis pirveli gancxadeba.
1) rodesac
log c n
ac
i 0
Sefaseba O n log n .
a i
c
SemosazRvrulia da
i 0
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
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.
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>
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.
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)
-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
Soris
vipovoT
minimumi
ai
da
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
32
i=0
i < n-1
ai ... ai
0
n 1
T
i ++
m=i
gacvla
j = i +1
ai am
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
c1
c2
n -jer
c3
( n 1 ) - jer
{
minimal = i;
c4
n 1
n i
- jer
i 1
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
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
1
2
1
2
1
2
1
2
1
3
n 1
H n i =
H
i 1
H
i 1
= n Hn n.
34
i = n-1
i >0
i--
ai ... ai
0
n 1
T
j=1
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
Tavis
adgils.
amgvarad am
n n 1
SemTxvevaSi saWiro xdeba
cali
2
adgilSenacvleba, rac cxadyofs, rom ganvixileT uaresi SemTxveva.
2
2
j i
j 1
j 1
([3] 79-80gv.). rogorc aRvniSneT, sul aris
n 1
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[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
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
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
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
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
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);
}
, 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 ,
. ,
.
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
\n",
\n",
\n",
\n",
&a );
sizeof(int));
&a - 1);
&a +4);
52
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
:
1.
2.
3.
4.
5.
54