magliveli.files.wordpress.com€¦ · web viewპრაქტიკული...
TRANSCRIPT
პრაქტიკული მეცადინება 1
1. რეკურენტული ფორმულით განსაზღვრული მიმდევრობისთვის:
ა.
ბ.
გ. როცა და როცა ;
დ. როცა და როცა ;
ე. როცა და როცა შეადგინეთ რეკურსიული ალგორითმი და შესაბამისი C-ფუნქცია.
2. მოცემული ფუნქცია
ა.
ბ. ;
გ.
დ. ;
ე.
ვ. ;
ზ. ;
თ. ჩაწერეთ რეკურენტული ფორმულით, შემდეგ შეადგინეთ რეკურსიული ალგორითმი და შესაბამისი C-ფუნქცია.
ამოხსნა:
1
მაგალითი 1. ბ) ამოხსნა. რეკურსიული ალგორითმი:
ალგორითმი {
1. თუ =1 დააბრუნე 1 და ალგორითმი დაასრულე.
2. თუ ( >1) შეასრულე ალგორითმი ( )-თვის, შედეგი გაამრავლე 2-ზე,
მიუმატე 1 და დააბრუნე მიღებული მნიშვნელობა (ანუ ).}
შესაბამისი -ფუნქცია:long P( int n )
{
if (n==1) return 1;
if (n>1) return 2*P(n-1)+1;
}
მაგალითი 2. ე)
ამოხსნა. შესაბამისი რეკურენტული ფორმულა : რეკურსიული ალგორითმი:
ალგორითმი {
1. თუ =1 დააბრუნე და ალგორითმი დაასრულე.
2. თუ ( >1) შეასრულე ალგორითმი ( )-თვის, მიუმატე და დააბრუნე მიღებული მნიშვნელობა.
}
შესაბამისი -ფუნქცია:float K(int n)
{
if (n==1) return 1;
if (n>1) return K(n-1)+1/(n*n);
}
2
პრაქტიკული მეცადინება 2
1. მოცემულია მთელი რიცხვების n ელემენტიანი a[n] მასივი. დაწერეთ რეკურენტული ფორმულა მისი პირველი n ელემენტის:
ა) ჯამის განსაზღვრისთვის;ბ) კვადრატების ჯამის განსაზღვრისთვის;გ) შებრუნებული სიდიდეების ჯამის განსაზღვრისთვის (ვგულისხმობთ რომ მათ
შორის ნულის ტოლი არ გვხვდება);დ)კვადრატებისა და ერთიანების ჯამის შებრუნებული სიდიდეების ჯამის
განსაზღვრისთვის. შეადგინეთ რეკურსიული ალგორითმი და შესაბამისი C- ფუნქცია.
2. მოცემულია მთელი რიცხვების n ელემენტიანი a[n] მასივი. დაწერეთ რეკურენტული ფორმულა პირველ k ელემენტს შორის
ა) ლუწების ჯამის განსაზღვრისთვის;ბ) ლუწინდექსიანი ელემენტების ჯამის განსაზღვრისთვის;ბ) 3-ის ჯერადი რიცხვების ჯამის განსაზღვრისთვის.
ასეთების არ არსებობის შემთხვევაში საჭიროა შესაბამისი გზავნილის დაბეჭდვა. შეადგინეთ რეკურსიული ალგორითმი და შესაბამისი C- ფუნქცია.
3. მოცემულია მთელი რიცხვების n ელემენტიანი a[n] მასივი. დაწერეთ რეკურენტული ფორმულა , რომელიც მოძებნის მაქსიმუმს
ა) პირველ k რიცხვს შორის, ბ) ბოლო k რიცხვს შორის, გ) კენტ ნომრიან ელემენტებს შორის, დ)* ლუწ ელემენტებს შორის (არ არსებობის შემთხვევაში შესაბამისი შეტყობინებით)
შეადგინეთ რეკურსიული ალგორითმი და შესაბამისი C- ფუნქცია.
3
პრაქტიკული მეცადინება 3
1. მოცემულია ნამდვილი რიცხვების n ელემენტიანი a[n] მასივი და რაიმე b რიცხვი. შეადგინეთ რეკურსიული ალგორითმი, რომელიც მოძებნის b-ს:
ა. პირველ k ელემენტს შორის. ბ. ბოლო k ელემენტს შორის .გ*. პირველ k ელემენტიდან ლუწებს შორის მოძებნის b-ს.(ასეთების არ არსებობის შემთხვევაში საჭიროა შესაბამისი გზავნილის დაბეჭდვა. )
შეადგინეთ შესაბამისი C- ფუნქცია.
2. მოცემულია ნამდვილი რიცხვების ელემენტიანი a[n][n] მასივი და რაიმე b რიცხვი. შეადგინეთ რეკურსიული ალგორითმი, რომელიც მოძებნის b-ს:
ა. პირველი k სტრიქონის ელემენტებს შორის. ბ. ბოლო k სვეტის ელემენტებს შორის .გ. პირველი k სტრიქონისა და პირველი k სვეტის ელემენტებს შორის.
შეადგინეთ შესაბამისი C- ფუნქცია.
პრაქტიკული მეცადინება 4
1. მოცემული ნამდვილი x რიცხვისთვის და მთელი n რიცხვისთვის,
ფუნქციის გამოსათვლელად გამოიყენეთ რეკურენტული ფორმულა. შეადგინეთ რეკურსიული ალგორითმი და შესაბამისი C- ფუნქცია.
2. მოცემული ნამდვილი x რიცხვისთვის და მთელი n რიცხვისთვის,
ფუნქციის გამოსათვლელად გამოიყენეთ რეკურენტული ფორმულა. შეადგინეთ რეკურსიული ალგორითმი და შესაბამისი C- ფუნქცია.(სწრაფი ვერსია)
3. დაწერეთ რეკურსიული ალგორითმი რომელიც მოცემულ b რიცხვს ჩასვავს ზრდადობით დახარისხებულ a[n] მასივში შესაბამის ადგილზე.
4
პრაქტიკული მეცადინება 5
1. a მასივს აქვს სახე: 12 5 19 9 40 61 4 27 . ამ მონაცემებზე აჩვენეთ, თუ როგორ იმუშავებს მასივის გაყოფის ალგორითმი Partition(a,0,7) დასაბრუნებელი მნიშვნელობის მითითებით.
ამოხსნა:
x=12
k -1 0 1 2 3 4 5 6 7 8
a[k] 12 5 19 9 40 61 4 27
i j
k -1 0 1 2 3 4 5 6 7 8
a[k] 12 5 19 9 40 61 4 27
i j
k -1 0 1 2 3 4 5 6 7 8
a[k] 4 5 19 9 40 61 12 27
i j
k -1 0 1 2 3 4 5 6 7 8
a[k] 4 5 9 19 40 61 12 27
j i
5
q=Partition(a,0,7)=2.
2. ქვემოთ მოცემული a მასივისთვის აჩვენეთ, თუ როგორ იმუშავებს მასივის გაყოფის ალგორითმი Partition(a,3,10) დასაბრუნებელი მნიშვნელობის მითითებით: 45 12 6 23 38 14 67 5 89 3 11 50 72
პრაქტიკული მეცადინება 6
2. a მასივს აქვს სახე: 15 11 49 13 73 . ამ მონაცემებზე აჩვენეთ, თუ როგორ იმუშავებს ჩქარი სორტირების ალგორითმი qsort(a,0,4), ფსევდოკოდის ძირითადი შეტყობინებების (ანუ სტრიქონების) მიმდევრობის მითითებით.
ამოხსნა
qsort(a,0,5)
0<5
q=partition(a,0,5)=2
qsort(a,0,2)
0<2
q=partition(a,0,2)=0
qsort(a,0,0)
qsort(a,1,2)
1<2
q=partition(a,1,2)=1
qsort(a,1,1)
qsort(a,2,2)
qsort(a,3,5)
3<5
q=partition(a,3,5)=3
qsort(a,3,3)
qsort(a,4,5)
4<5
q=partition(a,4,5)=4
qsort(a,4,4)
-1 0 1 2 3 4 5 6
27 15 11 49 13 73
11 15 13 49 27 73
13 15 11
11 15 13
11
15 13
13 15
13
15
49 27 73
27 49 73
27
49 73
49 73
49
6
qsort(a,5,5)
3. a მასივს აქვს სახე:
45 7 89 12 9 47 11 91 34 5 0 20 33
ამ მონაცემებზე აჩვენეთ, თუ როგორ იმუშავებს ჩქარი სორტირების ალგორითმი qsort(a,3,6), ფსევდოკოდის ძირითადი შეტყობინებების (ანუ სტრიქონების) მიმდევრობის მითითებით.
4. a მასივს აქვს სახე: 17 78 2 39 14 51 23 2 34 25 20 13 ამ მონაცემებზე აჩვენეთ, თუ როგორ იმუშავებს ჩქარი სორტირების ალგორითმი qsort(a,2,7), ფსევდოკოდის ძირითადი შეტყობინებების (ანუ სტრიქონების) მიმდევრობის მითითებით.
ამოცანა 1. მოცემულია მთელი რიცხვების მასივი i 1 2 3 4 5 6 7 8 9
a[i] 12 40 15 67 3 24 31 10 16ამ მონაცემებით ააგეთ გროვა ფსევდოკოდის ძირითადი შეტყობინებების (ანუ სტრიქონების) მიმდევრობის მითითებით.
ამოხსნა.
lenght[a]=9, heap_size=9
BUILD_HEAP(a) {
for(i=9/2; i>=1; i--)
HEAPIFY(a,i);
}
7
i=4
HEAPIFY(a,4)
l=8 , r=9;
8<9 მაგრამ 10>67 largest=4;
9=9 მაგრამ 16>67 largest არ შეცვლილა;
4 = 4 // i=largest
i=3
HEAPIFY(a,3)
l=6 , r=7;
6<9 && 24>15 largest=6; //შესრულდა if შეტყობინება
7<9 && 31>24 largest=7; //შესრულდა if შეტყობინება
3 7 // largest i
15 31 // a[3] a[7];
HEAPIFY(a,7)
l=14 , r=15
14>9 largest=7; //შესრულდა else შეტყობინება
15>9 largest არ შეცვლილა;
7 = 7 //a[7] ფოთოლია
i=2
HEAPIFY(a,2)
l=4 , r=5;
4<9 && 67>40 largest=4; //შესრულდა if შეტყობინება
5<9 მაგრამ 3>67 largest არ შეცვლილა;
2 4 //largest i
40 67 //a[2] a[4];
HEAPIFY(a,4)
l=8 ,r=9
8
8<9 მაგრამ 10>40 largest=4;
9=9 მაგრამ 16>40 largest=4;
4 = 4 //largest=i
i=1
HEAPIFY(a,1)
l=2 , r=3;
2<9 && 67>12 largest=2;
3<9 მაგრამ 31>67 largest=2;
1 2 //largest i
12 67 //a[1] a[2];
HEAPIFY(a,2)
l=4 ,r=5
4<9 && 40>12 largest=4;
5<9 მაგრამ 3>40 largest=4;
2 4
12 40 //a[2] a[4];
HEAPIFY(a,4)
l=8 ,r=9
8<9 მაგრამ 10>12 largest=4;
9=9 && 16>12 largest=9;
4 9
12 16 //a[2] a[4];
HEAPIFY(a,9)
l=18 , r=19
18 9 largest=9;
19 9 largest=9;
9 = 9
9
//a[9] ფოთოლია
10
მოცემულია რიცხვების მიმდევრობა: 47, 23, 51, 15, 40, 49, 21. შეადგინეთ მათგან ძებნის ორობითი ხე ბჟების ჩვენებით. ჩანაწერების მისამართები აღნიშნეთ , და ა. შ. მოიყვანეთ ხის გრაფიკული წარმოდგენა:
1)
\ 47 \ \
2)
3)
4)
11
23 \ \\ 47 \
\ 47 23 \ \
51 \ \
5
6)
12
23 \\ 47
15 \ \51 \ \
\ 47 23
15 \ \51 \ \
40 \ \
\ 47 23
a2
a5a4
47
5123
a1a3
7)
13
15 \ \51 \
40 \ \ 49 \ \
\ 47 23
15 \51 \
40 \ \ 49 \ \
21 \ \
=3
=2
=1
1
0
=0
შემდეგი მონაცემებისგან ააგეთ ძებნის ორობითი ხე: 47 23 51 15 40 49 21.
ჩათვალეთ რომ პირველი მონაცემი მოთავსებულია მისამართზე, მეორე _ზე, და ა.შ.
1. აჩვენეთ ხის სიმაღლის გამოთვლის ალგორითმის მუშაობა ბიჯების მიხედვით
height( )
u = height( ) // left( )=
u = height( ) // left( )=
u = height( )=-1 // left( )=
v = height( ) // right( )=
14
0
=1
1 0
=0
u = height( )=-1 // left( )=
v = height( )=-1 // right( )=
max (-1,-1)+1=
max(-1,0)+1 =
v = height( ) //right( )=
u = height( )=-1 //left( )=
v = height( )=-1 //right( )=
max(-1,-1)+1=
max(1,0)+1=
v =height( ) // right( )=
u = height( ) // left( )=
u = height( )=-1 //left( )=
v = height( )=-1 //right( )=
max(-1,-1)+1=
v = height( )=-1
max(0,-1)+1 =
max(2,1)+1=
=0
=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0
15
2. აჩვენეთ ST_search( , 21) ალგორითმის მუშაობა ბიჯების მიხედვით
ST_search( , 21)
&& 21 47
21 < 47
ST_search ( , 21) //left( )=
&& 21 23
21 < 23
ST_search ( , 21) //left( )=
&& 21 15
21>15
ST_search ( , 21) //right( )=
მაგრამ 21=21
return
16
პრაქტიკული მეცადინება 10
ამოცანა: ქვემოთ მოცემული მთელი არაუარყოფით რიცხვების n =9 ელემენტიანი a[n] მასივი დაახარისხეთ გადათვლით სორტირების (countingsort) ალგორითმის საშუალებით, აჩვენეთ ბიჯების მიხედვით როგორ იცვლება დამხმარე c[k+1]
(k=max{a[0],a[1],...,a[n-1]})
და გამომავალი b[n] მასივი.
ამოხსნა:
# კოდის სტრიქონი
1ცვლადების აღწერა: int i,n,k; int a[n], b[n]; a მასივის და n სიდიდის შეყვანა,k სიდიდის განსაზღვრა
2 for (i=0; i<=k; i++){3 c[i]=0;}4 for (i=0; i<n; i++) {5 c[a[i]]++; }6 for (i=1; i<=k; i++) {7 c[i]+=c[i-1]; }8 for (i=n-1; i>=0; i--) {
9 b[c[a[i]]-1]=a[i]; c[a[i]]--; }
10 b მასივის გამოტანა
i 0 1 2 3 4 5 6 7 8a[i] 3 5 0 3 3 1 5 3 2
k=max{3, 5, 0, 3, 3,1, 5, 3, 2}=5, c[k+1]=c[6]
i 0 1 2 3 4 5c[i], I for -ის შემდეგ 0 0 0 0 0 0c[i], II for-ის შემდეგ 1 1 1 4 0 2c[i], III for-ის შემდეგ 1 2 3 7 7 9
=0
=0
17
IV for-ის მუშაობის შედეგი ბიჯების მიხედვით:
1) i=8, a[8]=2, c[a[8]]=c[2]=3 b[3-1]=b[2]=2, c[2]=2;2) i=7, a[7]=3, c[a[7]]=c[3]=7 b[7-1]=b[6]=3, c[3]=6;3) i=6, a[6]=5, c[a[6]]=c[5]=9 b[9-1]=b[8]=5, c[5]=8;4) i=5, a[5]=1, c[a[5]]=c[1]=2 b[2-1]=b[1]=1, c[1]=1;5) i=4, a[4]=3, c[a[4]]=c[3]=6 b[6-1]=b[5]=3, c[3]=5;6) i=3, a[3]=3, c[a[3]]=c[3]=5 b[5-1]=b[4]=3, c[3]=4;7) i=2, a[2]=0, c[a[2]]=c[0]=1 b[1-1]=b[0]=0, c[0]=0;8) i=1, a[1]=5, c[a[1]]=c[5]=8 b[8-1]=b[7]=5, c[5]=7;9) i=0, a[0]=3, c[a[0]]=c[3]=4 b[4-1]=b[3]=3, c[3]=3;
b[9] c[6]
i 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5i=8 2 1 2 2 7 7 9i=7 2 3 1 2 2 7 7 9i=6 2 3 5 1 2 2 6 7 9i=5 1 2 3 5 1 2 2 6 7 8i=4 1 2 3 3 5 1 1 2 6 7 8i=3 1 2 3 3 3 5 1 1 2 5 7 8i=2 0 1 2 3 3 3 5 0 1 2 4 7 8i=1 0 1 2 3 3 3 5 5 0 1 2 4 7 7i=0 0 1 2 3 3 3 3 5 5 0 1 2 3 7 7
სავარჯიშო 1. მოცემულია მთელი არაუარყოფით რიცხვების n =10 ელემენტიანი მასივი a[n]={2, 3, 1, 2, 3, 0, 5, 7, 1, 2 } დაახარისხეთ გადათვლით დახარისხების (countingsort) ალგორითმის საშუალებით, აჩვენეთ ბიჯების მიხედვით როგორ იცვლება დამხმარე c[k+1] ,(k=max{a[0],a[1],...,a[n-1]}) და გამომავალი b[n] მასივი.
სავარჯიშო 2*. მოცემულია მთელი რიცხვების n ელემენტიანი a[n] მასივი;
k1=min{a[0],a[1],...,a[n-1]}<0, k2=max{a[0],a[1],...,a[n-1]}
დაწერეთ ზემოთ მოცემული გადათვლით დახარისხების (countingsort) ალგორითმის მოდიფიცირებული (მეხსიერების დაზოგვის მიზნით) ალგორითმის ფსევდოკოდი.
18
19