სტრუქტურების თეორია 2014

8
© GGach ალგორითმები და მონაცემთა სტრუქტურები 2014 სტრუქტურების ნაწილის კოლოქვიუმის საკითხები პასუხებით 1. რას ნიშნავს მონაცემთა აბსტრაგირება, ანუ მონაცემთა აბსტრაქტული ტიპი(ADT)? 2. რას ნიშნავს მონაცემთა სტრუქტურების განზოგადებათა ჯგუფები (მონათესავე ჯგუფები, families of abstractions). STL -ში ასეთი ჯგუფის მაგალითები. 3. ახსენით, კონტეინერის ელემენტზე წვდომის დრო როგორ არის დამოკიდებული მეხსიერებაში კონტეინერის განთავსების მეთოდზე. მოიყვანეთ მაგალითები.

Transcript of სტრუქტურების თეორია 2014

Page 1: სტრუქტურების თეორია 2014

© GGach

ალგორითმები და მონაცემთა სტრუქტურები 2014

სტრუქტურების ნაწილის კოლოქვიუმის საკითხები პასუხებით

1. რას ნიშნავს მონაცემთა აბსტრაგირება, ანუ მონაცემთა აბსტრაქტული ტიპი(ADT)?

2. რას ნიშნავს მონაცემთა სტრუქტურების განზოგადებათა ჯგუფები (მონათესავე ჯგუფები, families of

abstractions). STL -ში ასეთი ჯგუფის მაგალითები.

3. ახსენით, კონტეინერის ელემენტზე წვდომის დრო როგორ არის დამოკიდებული მეხსიერებაში

კონტეინერის განთავსების მეთოდზე. მოიყვანეთ მაგალითები.

Page 2: სტრუქტურების თეორია 2014

© GGach

4. რატომ ვუწოდებთ bind2nd -ს ფუნქციის ადაპტერს? მოიყვანეთ მისი გამოყენების მაგალითები.

5. რატომ ვუწოდებთ not1-ს ფუნქციის ადაპტერს? მოიყვანეთ მისი გამოყენების მაგალითები.

6. რა არის იტერატორი? რაში მდგომარეობს მისი გამოყენების აუცილებლობა და მოსახერხებლობა?

7. ვთქვათ, რომელიღაც ალგორითმის იმპლემენტაციაში არგუმენტად გადაცემულ it იტერატორზე

სრულდება შემდეგი მოქმედებები: ; ! ; ;it it a it b

დაასახელეთ იტერატორების ყველაზე ვრცელი კატეგორია, რომელსაც ეკუთვნის it.

პასუხი: Input Iterator

8. ვთქვათ, რომელიღაც ალგორითმის იმპლემენტაციაში არგუმენტად გადაცემულ იტერატორზე

სრულდება შემდეგი მოქმედებები: ; * ; ;it it a it b

დაასახელეთ იტერატორების ყველაზე ვრცელი კატეგორია, რომელსაც ეკუთვნის it.

პასუხი: Forward Iterator

Page 3: სტრუქტურების თეორია 2014

© GGach

9. ვთქვათ, რომელიღაც ალგორითმის იმპლემენტაციაში არგუმენტად გადაცემულ იტერატორზე

სრულდება შემდეგი მოქმედებები: ; * ; * ! ; ;it it a it a it b

დაასახელეთ იტერატორების ყველაზე ვრცელი კატეგორია, რომელსაც ეკუთვნის it.

პასუხი: Forward Iterator

10. ვთქვათ, რომელიღაც ალგორითმის იმპლემენტაციაში არგუმენტად გადაცემულ იტერატორზე

სრულდება შემდეგი მოქმედებები: ; - -;* ; * ! ; ;it it it a it a it b

დაასახელეთ იტერატორების ყველაზე ვრცელი კატეგორია, რომელსაც ეკუთვნის it.

პასუხი: Bidirectional Iterator

11. ვთქვათ, რომელიღაც ალგორითმის იმპლემენტაციაში არგუმენტად გადაცემულ იტერატორზე

სრულდება შემდეგი მოქმედებები: ; ; *( 17)it it it . დაასახელეთ იტერატორების ყველაზე

ვრცელი კატეგორია, რომელსაც ეკუთვნის it.

პასუხი: Random Access Iterator

12. როგორ განიმარტება იტერატორების [first,last) დიაპაზონი (range)? რა თვისებები უნდა

ჰქონდეს ამ წყვილს, რომ დიაპაზონი კორექტულად იყოს განმარტებული?

13. შეგვიძლია თუ არა ბიბლიოთეკის ალგორითმის გამოყენებით მონაცემების კოპირება

დიაპაზონიდან ფაილში? ეკრანზე? მოიყვანეთ მაგალითი.

ბიბლიოთეკის ალგორითმის გამოყენებით ჩვენ შეგვიძლია მონაცემების კოპირება როგორც

ეკრანზე, ასევე ფაილში და ამას კარგად აკეთებს ბიბლიოთეკის ფუნქცია copy.

მაგალითი : ფაილში კოპირება. ვთქვათ გვაქვს მთელი რიცხვებით შევსებული ვექტორი და გვინდა

ამ ვექტორის ელემენტები ფაილში დავაკოპიროთ .

ofstream ofs(“copied.txt”);

ostream_iterator<int> os(ofs,”\t”);

copy(v.begin(), v.end(), os );

იგივე იქნება ეკრანზე კოპირება .

ostream_iterator<int> os(cout, “\t”);

copy(v.begin(), v.end(), os );

Page 4: სტრუქტურების თეორია 2014

© GGach

14. რა მიზნით გამოიყენება ფუნქციები სტრინგიდან მონაცემების შეტანის ნაკადები? მოიყვანეთ

მაგალითები.

15. რა შემთხვევაში ხდება იტერატორების გაუქმება ვექტორში? მოიყვანეთ მაგალითი.

vector<char> v;

v.push_back('a');

v.push_back('b');

v.push_back('c');

v.push_back('d');

v.push_back('e');

for(vector<char>::iterator i=v.begin(); i!=v.end(); i++)

cout << *i <<" " ;

cout <<endl;

vector<char>::iterator i, j, k;

i = find(v.begin(), v.end(), 'b');

j = find(v.begin(), v.end(), 'c');

k = find(v.begin(), v.end(), 'd');

v.erase(j);

for(vector<char>::iterator i=v.begin(); i!=v.end(); i++)

cout << *i <<" " ;

cout <<endl;

// *i dabewdavda 'b'-s, da axlacs dabeWdavs am simbolos;

cout << *i << endl;

// *k dabe'wdavda 'd'-s, magram ar dabeWdavs am simbolos;

cout << *k << endl;

Page 5: სტრუქტურების თეორია 2014

© GGach

16. რა შემთხვევაში ხდება იტერატორების გაუქმება სიაში? მოიყვანეთ მაგალითი.

17. რატომ ეწოდება სტეკს კონტეინერის ადაპტერი? რომელი კონტეინერის ადაპტირება შეუძლია მას?

მოიყვანეთ მაგალითები.

სტეკი არის ძალიან მარტივი მონაცემთა სტრუქტურა ვექტორთან, სიასთან და დეკთან შედარებით,

რადგან თითოეულ მათგანზე რეალიზებულია გაცილებით მეტი მეთოდი, ვიდრე სტეკზე. სტეკის

მოქმედების პრინციპი აღიწერება დევიზით: ბოლო მოვიდა - პირველი წავიდა (Last-in, first-out ანუ

LIFO). STL-ში სტეკის ორგანიზებითვის ხდება კონტეინერთა ადაპტირება: ავიღებთ ვექტორს, სიას ან

დეკს, შევუცვლით ინტერფეისს და დავტოვოთ მხოლოდ სტეკისთვის საჭირო მეთოდებს.

სტეკის მიღება შეგვიძლია ამ მიზნით ვექტორის, დეკის და სიის ადაპტირებით:

Page 6: სტრუქტურების თეორია 2014

© GGach

18. რატომ ეწოდება რიგს კონტეინერის ადაპტერი? რომელი კონტეინერის ადაპტირება შეუძლია მას?

მოიყვანეთ მაგალითები.

19. რა არის პრიორიტეტებიანი რიგი? რომელი კონტეინერის ადაპტირება შეუძლია მას? მოიყვანეთ

მაგალითები.

20. რა მეთოდები (ფუნქციები) აქვს სტეკს? აღწერეთ თითოეული მათგანი.

.size() რომელიც გვიბრუნებს სტეკის ზომას,

.push() რომელიც სტეკის თავში ამატებს ელემენტს,

.pop() რომელიც შლის სტეკის ზედა, ბოლოს დამატებულ ელემენტს,

.empty() სტეკის შემოწმება - ცარიელია თუ არა იგი

.top() წვდება უკანასკნელ ელემენტს სტეკში

21. რა მეთოდები (ფუნქციები) აქვს რიგს? აღწერეთ თითოეული მათგანი.

რიგზე განსაზღვრულია შემდეგი ოპერაციები :

.size() რომელიც გვიბრუნებს რიგის ზომას,

.push() რომელიც რიგს ბოლოში ამატებს ელემენტს,

.pop() რომელიც შლის პირველ ელემენტს ანუ იგივეა რაც .pop_front() ,

.front() გვიბრუნებს რიგის პირველ ანუ პირველად დამატებულ, ყველაზე ძველ ელემენტს ,

.empty() რიგის შემოწმება - ცარიელია თუ არა იგი

.back() წვდება უკანასკნელ ელემენტს რიგში

Page 7: სტრუქტურების თეორია 2014

© GGach

22. რა მეთოდები (ფუნქციები) აქვს პრიორიტეტებიან რიგს? აღწერეთ თითოეული მათგანი.

პრიორიტეტებიან რიგზე განსაზღვრულია შემდეგი ოპერაციები :

.size() რომელიც გვიბრუნებს რიგის ზომას,

.push() სვავს ობიექტს სათადარიგო ადგილზე პრიორიტეტის მიხედვით

.pop() რომელიც შლის ზედა ელემენტს (ანუ .top() ელემენტს)

.top() მეთოდი აბრუნებს პირველ ელემენტს. (- მაქსიმალურს ჩვეულებრივ პრიორიტ. რიგში)

.empty() რიგის შემოწმება - ცარიელია თუ არა იგი

fb.com/groups/tsuprogrammers

Page 8: სტრუქტურების თეორია 2014

© GGach

დამატებითი საცნობარო მასალა

იტერატორები

სტეკი

რიგი Enqueue - .push() - .push_back()

Dequeue - .pop() - .pop_front()