Data Structure (Part 1)
Bu məqalədə giriş olaraq Data Structure haqqında ümumi məlumat veriləcək.
Data structure məlumatların müəyyən bir şəkildə təşkil edilməsi və saxlanılması üçün istifadə olunan bir metod və ya texnikadır.
JavaScript və digər proqramlaşdırma dillərində Data structure’lar məlumatları daha səmərəli şəkildə idarə etməyə, saxlanmağa və emal etməyə imkan verir. Bu structure’lar, verilənlərin sürətli və effektiv şəkildə əldə edilməsi, əlavə edilməsi və silinməsi üçün optimallaşdırılmışdır və Computer Science əsas konsepsiyalarından biridir.
Data structure’ları proqramlaşdırmanın təməl daşıdır və effektiv proqramlar yazmaq üçün vacibdir. Bu məqalələr seriyasında JavaScript-də ən çox istifadə olunan Data structure’ları nəzərdən keçirəcəyik və onların necə işlədiyini, necə tətbiq olunduğunu və hansı hallarda istifadə edildiyini öyrənəcəyik.
Not: Data Structure daha yaxşı qavramaq və müsahibələrdə uğurlu olmaq üçün bir çox termin adı ingilis dilində saxlanılmışdır.
Data structure, verilənlərin səmərəli şəkildə saxlanması, əldə edilməsi və işlənməsi üçün kompüter yaddaşında verilən obyektlərinin saxlanılması və ya təşkil edilməsidir. Data structure’ları primitiv (məsələn: tam ədədlər, simvollar) və ya reference (məsələn: massivlər) kimi təsnif edilə bilər. Onlar alqoritmlərin işlədiyi təməl bloklardır və sistem performansına əhəmiyyətli dərəcədə təsir edir.
Niyə Data structure öyrənməliyik?
İlk öncə qeyd etmək lazımdir ki, müsahibə zamanı ən çox soruşulan və buna uyğun alqoritm yazılması tələb olunan mövzulardan biridir.
1.Efficient Data Access: Data structure’ları, böyük verilənlərdə konkret elementlərin daha asan və sürətli şəkildə əldə edilməsini təmin edən metodlar təklif edir. Bu, verilənlərin sürətli axtarış və əldə edilməsi üçün vacibdir.
2.Fast Operations: Yaxşı dizayn edilmiş Data structure’ları ilə, əlavə etmə, silmə və axtarış kimi ümumi əməliyyatlar səmərəli şəkildə həyata keçirilə bilər. Bu, vaxt mürəkkəbliyini azaldır və ümumi performansı artırır.
3.Optimized Memory Usage: Data structure’ları yaddaşın ayrılması və istifadəsini optimallaşdırır, sistem resurslarının səmərəli istifadəsini təmin edir. Bu, yaddaşın düzgün idarə olunması və istifadəsi üçün vacibdir.
4.Algorithm Design: Bir çox alqoritm müəyyən Data structure’ları üzərində qurulub. Bu strukturları anlamaq, problem həlli üçün səmərəli alqoritmlərin dizayn edilməsinə kömək edir.
5.Real-World Modeling: Data structure’ları real dünyada istifadə olunan, məsələn: sosial şəbəkələrin, fayl sistemlərinin, verilənlər bazalarının modelləşdirilməsini reallaşdırır
6.Code Reusability: Data structure’larından istifadə, proqramçılara kodu yenidən istifadə etməyə və ümumi problemlərə qarşı dayanıqlı olmağa imkan verir. Bu, inkişaf müddətini qısaldır və kodun keyfiyyətini artırır.
Data Structure’larının ortaq xüsusiyyətləri
Memory Management: Data structure’ları yaddaşı səmərəli istifadə etməli və lazımsız yaddaş istifadəsini minimallaşdırmalıdır. Düzgün yaddaş idarəetməsi yükü azaldır və performansı artırır.
Access and Operations: Data structure’ları verilən elementlərə tez əldə etməyə və əsas əməliyyatları az vaxtda yerinə yetirməyə imkan verir.
Performance: Data structure’ları, əlavə etmə, silmə və axtarış kimi ümumi əməliyyatlar üçün optimal vaxt (daha az vaxt) təmin etməlidir.
Flexibility: Data structure’ları verilənlərin ölçüsündə və ya tələblərində dəyişiklikləri uyğunlaşdırmaq üçün uyğun olmalıdır
Abstraction: Data structure’ları verilənlərin təşkilindəki mürəkkəbliyi abstraktlaşdıraraq, verilənlərin idarə edilməsinin daha yüksək səviyyəli bir görünüşünü təmin edir
Data Structure’ın klassifikasiyası (Classification of Data Structure)
- Linear data structure: məlumat elementlərinin ardıcıllıqla düzülüb, hər element özündən əvvəlki və növbəti yanaşmış elementlərə qoşulduğu bir quruluşdur.
- Static data structure: sabit yaddaş ölçüsünə malikdir. Statik verilənlər quruluşundakı elementlərə giriş asandır.
- Dynamic data structure: ölçü sabit deyil. Runtime zamanı təsadüfi şəkildə yenilənə bilər, bu da kodun yaddaş (məkan) kompleksliyi baxımından effektiv olmasını göstərir.
- Non-linear data structure: məlumat elementlərinin ardıcıllıqla yerləşdirilmədiyi və tək bir nəfərdə bütün elementlərin taramasının mümkün olmadığı quruluşlardır.
Execution Time Cases (icra halların tipləri)
Alqoritm, müəyyən bir problemi həll etmək və ya bir vəzifəni yerinə yetirmək üçün tərtib edilmiş əməliyyatlar ardıcıllığıdır. Alqoritmlər, məlumatların işlənməsi və manipulyasiyası üçün əsas qüvvələrdir. Onlar müxtəlif metodları əhatə edir, məsələn sorting (sıralama) , search (axtarış) və s. Növbəti məqalələrdə alqoritmlər tək tək izah olunacaq.
Alqoritmin icra vaxtı müxtəlif amillərdən, o cümlədən giriş məlumatlarından və onların paylanmasından (harada yerləşməsindən) asılıdır. Execution time fərqli halları, alqoritmin performansını təhlil etməyə kömək edir və 3 əsas tipə bölünür
1.Ω(N), Big Omega:best-case — Ən yaxşı hal, alqoritmin ən optimal şəraitdə işlədiyi ssenaridir. Bu halda, alqoritm minimum icra vaxtı tələb edir. Məsələn, xətti axtarışda (linear search) axtarılan elementin verilənlər siyahısının ilk mövqeyində tapılması ən yaxşı haldır,çünki alqoritm qısa zamanda nəticəni verəcək.
2.θ(N), Big Theta:average-case — Orta hal, alqoritmin müxtəlif giriş dəstləri üzrə ortalama performansını təmsil edir. Bu, alqoritmin bütün mümkün girişlər üzərində necə işləyəcəyini daha obyektiv şəkildə qiymətləndirmək üçün istifadə olunur.Xətti axtarışda (linear search) alqoritmi düşünək. Bu alqoritm verilənlər siyahısında müəyyən bir elementi axtarır. Əgər biz axtarılan elementin hər bir mövqedə olma ehtimalının bərabər olduğunu düşünsək, orta hal icra vaxtı bütün mümkün mövqelərdəki axtarış vaxtlarının ortalamasıdır.
3.O(N), Big O:worst-case — Bu, alqoritmin ən səmərəsiz şəkildə işlədiyi ssenarini təmsil edir. Məsələn, ikili axtarışda (binary search) ən pis hal, hədəf elementin sıralanmış siyahıda və ya massivdə olmadığı zaman baş verir.
Gəlin real bir nümünə üzərindən execution caseləri anlayaq.
Bir array’imiz var və biz burada verilmiş bir elementi searching (axtarış) etmək istəyirik.
Array’ımız olsun [1,3,5,6,2,5,6,7] şəklində və biz burada execution case’lərə baxaq.
Best Case — axtardığımız element 1 olarsa,
Worst case — axtardığımız element 7 vəya massivdə olmayan 12 ədədi olarsa. Çünki alqoritm elementi tapmaq üçün sona qədər axtarış etməli olacaq. Düşünək ki bu çox böyük data olar bilər bu xeyli zaman alacaqdır.
Average case — Axtardığımız element məsələn 5 və ya 6 olarsa.
Bütün bu xususiyyətləri toplayıb deyə bilərik ki, alqoritm:
- Less Memory: Memory Complexity (daha az yaddaşda yer tutmalıdır)
- Fast: Time Complexity (sürətli olmalıdır)
- Less line of code — daha az kod sətrindən ibarət olmalıdır
- Easy to Read (Readability): kod oxunaqlı olmalıdır
- Robustness — crash olmamalı və düzgün olmayan nəticə verməməlidir
- Correctness —həmişə düzgün nəticə verməlidir
Bu siyahını daha da artırmaq olar. Amma saydıqlarımız içərisində ən vacibi Time complexity və Memory (Space) Complexity’dir. Bu iki xususiyyət bizim Execution Time Cases dediyimiz tipləri müəyyənləşdirir və növbəti məqalədə bu barədə geniş danışılacaq
Növbəti məqələ bu mövzular haqqında danışılacaq:
- Time Complexity
- Space complexity
- Big O Notation
- Data Structure’ın klassifikasiyası haqqında geniş məlumat
Diqqətiniz üçün təşəkkürlər
Writers: Arif Hasanov,Hajagha Hasanli