Data strukturu & Alqoritmlər

Kamal Novruzov
Pragmatech
Published in
4 min readAug 3, 2020

Data strukturu nədir?

Sadə yolla desək kompüterdə məlumatları rahat şəkildə yadda saxlamaq üçün yoldur. Belə deməyim bir balaca anlaşılmaz ola bilər. Gəlin bunu bir misalla göstərim. Misal üçün: öz qaldığım yerin xəritəsini hazırlamaq istiyirəm. Xəritədə yaşadığım yerin kordinatları qeyd olunmuşdur və bundan əlavə yaşadığım yerə yaxın müxtəlif yerlərin də, kordinatları qeyd etmişəm. Bu kordinatlar vasitəsilə yaşadığım yeri bilə bilərsiniz və ya getmək istədiyim zaman, gedə biləcəyim yerlərin harada yerləşdiyini müəyyən edə bilərsiniz, lakin hansı küçələrdən istifadə edərək ora necə gedə biləcəyimi bilməsəniz, mənim kimi siz istədiyiniz yerə rahatlıqla gedə bilməyiniz mümkün deyildir. Buna misal olaraq özüm belə bir xəritə hazırladım. Bu xəritədə mənim qaldığım yerə yaxın yerləşən yerləri qeyd etdim və obyektlər arasında ən optimal yolları qeyd etdim.

Bəs yaxşı bu obyektlərin yerləşməsini asan yolla necə göstərə bilərəm?

Bunun üçün ilkin olaraq belə bir qutu hazırladım.

Bunun vasitəsilə bizə aydın olur ki evin yaxınlığında nə var və harada yerləşir.

Bunu başqa üsullarla da göstərə bilərəm.

Sonradan bunlardan birinciyə array və ikinciyə hash table və ya hash map üsulu deyildiyini öyrənəcəyik.

Bəs yaxşı belə bir problem olur ki evdən çıxıb ən qısa yolla Xəstəxanaya getmək istəyirəm bunun üçün neynəməliyəm? Bu işdə mənə alqoritmlər kömək edəcək. Bəs alqoritmlər nədir?

Alqoritmlər

Sadə üsulla izahı müxtəlif data strukturları üzərində əməliyyatlar aparmaq üçün əmrlər toplusudur. Misalın dəvamı: Mənim evdən çıxıb ən qısa yolla xəstəxanaya getməyimi kompüterə başa salmağım lazımdı. İşə belə başlayıram:

  1. Hansı obyektlərin yanından keçib gedəcəyimi tap.
  2. Bu obyektlərin hamısı üçün ayrı-ayrılıqda yolları tap.
  3. Əgər iki oxşar məsafə olsa onları müqayisə et.
  4. Ən qısa yolu tap.
  5. Yuxarıda göstərilən ilk 3 üsulu dəvamlı tətbiq et.

Artıq bu problemimi həll etməyim üçün sistematik təlimatlarım var.

Bəzən eyni problemi həll etməyimiz üçün müxtəlif alqoritmlərdən istifadə etməyimiz lazım olur. Bu isə əsas bizim data strukturumuzla bağlı olur.

İndi isə hazırladığım 2 cədvələ geri qayıdaq. 1-ci cədvəldə yerləşəni kompüterin etməsi vaxt alar çünki evin biri birinci sətirdə, digəri isə ikinci sətrdə yerləşir. Əgər siyahım bir az daha böyük olsaydı, kompüter hər əməliyyat üçün hər dəfə geri qayıdıb, yoxlamalı olardı. 2-ci cədvəl isə optimal variantlar çox rahat göstərilmiş və kompüter evdən xəstəxanaya getməyin yolunu rahat tapa bilir. Belə düşünək ki, biri var yazdığın kodu 7–10 saata kompüter oxusun biri də var 5–10 dəqiqəyə.

Daha rahat başa düşülməsi üçün başqa bir misal.

Misal üçün mən marketdə satıcıyam və mağazaya 100 yeni mal gəlir və mən bu malları yerləşdirməliyəm. Mağaza sahibi deyib ki, malların yerləşdirilməsini mağazaya çatdırılma sırasıyla və üstündə adı oxunacaq şəkildə reonda yerləşdirməliyəm. Başa düşüldüyü kimi mal çox və tək işçi mənəm. Bunun üçün 2 yol ağlıma gəlir:

  1. 100 malı ayrı-ayrılıqda sırayla yerləşdirmək üçün yerlər hazırlamaq və burdaki yerlərin eni və uzunu 10-sm. Gələn hər malı sırayla tez-tez yerləşdirmək. (array)
  2. Hər mal üçün ayrı, xüsusi yer hazırlamaq və xüsusi oxlarla hazırlanmış yerləri əlaqələndirmək. (linked-list)

Bu üsullarında ayrı-ayrılıqda hər birinin müsbət və mənfi cəhətləri var. Belə düşünək ki,sonradan mənim ağlıma gəlir ki, 98-ci yerdə olan malın yerləşməsində səhvə yol vermişəm və bunu düzəltməyim lazımdır.

Birinci üsulla yazmağın köməyi ilə bu problemi aradan qaldırmaq çox asandı. İlkin olaraq bilirəmki hər qutunun eni-uzunu 10sm dir. 98-ci yerdə problem varsa 10*98=980. Əla, ora qayıdıb problemi aradan qaldırıram. Bu üsulun mənfi tərəfi isə mallar 100 yox 105 olsa, digər 5 mal üçün ya mən ayrı yerlər yaratmalıyam və birləşdirib digərləriylə birlikdə istifadə etməliyəm və yaxud bütün yerləri dağıdıb təzədən 200 yer hazırlamalıyam.

İkinci üsulla isə bu o qədər də asan deyildir. Bunun səbəbi isə bunlar arasında sadəcə əlaqə var. Bunlar bir-birinə yaxın yerləşməyə də bilər. Bu yoldan istifadə etsəydim, və problemi aradan qaldırmaq istəsəydim. Gərək hər birini tək-tək sayıb 98-ci yeri tapıb səhvi aradan qaldırardım. Gördüyünüz kimi bu üsul vaxt itkisi və güc sərfiyyatına gətirib çıxarır.

Əgər bu gün neçə qutu gələcəyini bilməsəydim linked-list variantı optimal variant sayıla bilərdi çünki linked-list üsulunun (resize) yəni yenidən ölçüləndirmə bacarığı vardır. İlkin istifadə üsulunun adı data strukturunda array-dır. İkincinin adı isə Linked-listdir.

Data strukturunu və alqoritimləri öyrənməyimiz üçün gündəlik həyatımızda baş verən hadisələrlə müqayisə edərək öyrənməyimiz çox əhəmiyyətlidir.

--

--