Teknobot AI Veri Yapıları (Data Structures)

Veri Yapıları (Data Structures)

Bilgisayar biliminde veri yapısı, genellikle verilere etkin erişim için seçilen bir veri organizasyonu, yönetimi ve depolama biçimidir.[1][2][3] Daha kesin olarak, bir veri yapısı, veri değerlerinin, aralarındaki ilişkilerin ve verilere uygulanabilecek işlevler veya işlemlerin bir koleksiyonudur,[4] yani, veriler hakkında cebirsel bir yapıdır.

Kullanım

Veri yapıları, soyut veri türlerinin (ADT) temelini oluşturur. ADT, veri tipinin mantıksal biçimini tanımlar. Veri yapısı, veri türünün fiziksel biçimini uygular.[5]

Farklı veri yapıları türleri, farklı uygulama türleri için uygundur ve bazıları belirli görevler için oldukça uzmanlaşmıştır. Örneğin, ilişkisel veritabanları genellikle veri alımı için B-ağacı dizinlerini kullanırken[6] derleyici uygulamaları tanımlayıcıları aramak için genellikle karma tabloları kullanır.[7]

Veri yapıları, büyük veritabanları ve internet indeksleme hizmetleri gibi kullanımlar için büyük miktarda veriyi verimli bir şekilde yönetmek için bir araç sağlar. Genellikle verimli veri yapıları, verimli algoritmalar tasarlamanın anahtarıdır. Bazı biçimsel tasarım yöntemleri ve programlama dilleri, yazılım tasarımında temel düzenleme faktörü olarak algoritmalardan ziyade veri yapılarını vurgular. Veri yapıları, hem ana bellekte hem de ikincil bellekte depolanan bilgilerin depolanmasını ve alınmasını organize etmek için kullanılabilir.[8]

Uygulama

Veri yapıları genellikle bir bilgisayarın, kendisi bellekte saklanabilen ve program tarafından manipüle edilebilen bir bellek adresini temsil eden bir bit dizisi olan bir işaretçi tarafından belirtilen, belleğindeki herhangi bir yerde verileri alıp depolama yeteneğine dayanır. Böylece, dizi ve kayıt veri yapıları, veri öğelerinin adreslerinin aritmetik işlemlerle hesaplanmasına, bağlantılı veri yapıları ise veri öğelerinin adreslerinin yapının kendi içinde depolanmasına dayanmaktadır.

Bir veri yapısının uygulanması, genellikle bu yapının örneklerini oluşturan ve işleyen bir dizi prosedür yazmayı gerektirir. Bir veri yapısının verimliliği, bu işlemlerden ayrı olarak analiz edilemez. Bu gözlem, soyut bir veri türü teorik kavramını, üzerinde gerçekleştirilebilecek işlemler tarafından dolaylı olarak tanımlanan bir veri yapısını ve bu işlemlerin matematiksel özelliklerini (yer ve zaman maliyetleri dahil) motive eder.[9]

Örnekler
Genellikle daha basit ilkel veri türleri üzerine inşa edilmiş çok sayıda veri yapısı türü vardır. İyi bilinen örnekler şunlardır:[10]

Bir dizi, belirli bir sıradaki, tipik olarak tümü aynı türden olan bir dizi öğedir (dile bağlı olarak, tek tek öğelerin tümü aynı türde olmaya zorlanabilir veya hemen hemen her türde olabilir). Öğelere, hangi öğenin gerekli olduğunu belirtmek için bir tamsayı dizini kullanılarak erişilir. Tipik uygulamalar, dizilerin öğeleri için bitişik bellek sözcükleri tahsis eder (ancak bu her zaman bir gereklilik değildir). Diziler sabit uzunlukta veya yeniden boyutlandırılabilir olabilir.
Bağlantılı liste (yalnızca liste olarak da adlandırılır), düğüm adı verilen, her düğümün kendisinin bir değeri olduğu ve bağlantılı listedeki bir sonraki düğümü işaret ettiği, herhangi bir türden veri öğelerinin doğrusal bir koleksiyonudur. Bağlantılı bir listenin bir diziye göre başlıca avantajı, değerlerin listenin geri kalanının yerini değiştirmeden her zaman verimli bir şekilde eklenebilmesi ve çıkarılabilmesidir. Belirli bir öğeye rasgele erişim gibi belirli diğer işlemler, ancak listelerde dizilere göre daha yavaştır.
Kayıt (demet veya yapı olarak da adlandırılır), toplu bir veri yapısıdır. Bir kayıt, tipik olarak sabit sayıda ve sırayla diğer değerleri içeren ve genellikle adlara göre dizine alınmış bir değerdir. Kayıtların öğelerine genellikle alanlar veya üyeler denir. Nesne yönelimli programlama bağlamında, kayıtlar, onları nesnelerden ayırmak için düz eski veri yapıları olarak bilinir.[11]
Karma tablolar, grafikler ve ikili ağaçlar.

Dil desteği

Çoğu montaj dili ve BCPL (Temel Birleşik Programlama Dili) gibi bazı düşük seviyeli diller, veri yapıları için yerleşik destekten yoksundur. Öte yandan, birçok üst düzey programlama dili ve MASM gibi bazı üst düzey derleme dilleri, kayıtlar ve diziler gibi belirli veri yapıları için özel sözdizimine veya diğer yerleşik desteğe sahiptir. Örneğin, C (BCPL’nin doğrudan soyundan gelen) ve Pascal dilleri, vektörlere (tek boyutlu diziler) ve çok boyutlu dizilere ek olarak sırasıyla yapıları ve kayıtları destekler.[12][13]

Çoğu programlama dili, veri yapısı uygulamalarının farklı programlar tarafından yeniden kullanılmasına izin veren bir tür kitaplık mekanizmasına sahiptir. Modern diller genellikle en yaygın veri yapılarını uygulayan standart kitaplıklarla birlikte gelir. Örnekler, C++ Standart Şablon Kitaplığı, Java Koleksiyon Çerçevesi ve Microsoft .NET Çerçevesidir.

Modern diller ayrıca genellikle modüler programlamayı, bir kütüphane modülünün arayüzü ile uygulanması arasındaki ayrımı destekler. Bazıları, istemcilerin uygulama ayrıntılarını gizlemesine izin veren opak veri türleri sağlar. C++, Java ve Smalltalk gibi nesne yönelimli programlama dilleri genellikle bu amaç için sınıfları kullanır.

Bilinen birçok veri yapısının, birden çok hesaplama iş parçacığının bir veri yapısının tek bir somut örneğine aynı anda erişmesine izin veren eşzamanlı sürümleri vardır.[14]

 

Kaynaklar:

https://en.wikipedia.org/wiki/Data_structure

https://en.wikipedia.org/wiki/Data_structure#/media/File:Python_3._The_standard_type_hierarchy.png

WIKI References

1)Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introduction to Algorithms, Third Edition (3rd ed.). The MIT Press. ISBN 978-0262033848.
2)Black, Paul E. (15 December 2004). “data structure”. In Pieterse, Vreda; Black, Paul E. (eds.). Dictionary of Algorithms and Data Structures [online]. National Institute of Standards and Technology. Retrieved 2018-11-06.
3)”Data structure”. Encyclopaedia Britannica. 17 April 2017. Retrieved 2018-11-06.
4)Wegner, Peter; Reilly, Edwin D. (2003-08-29). Encyclopedia of Computer Science. Chichester, UK: John Wiley and Sons. pp. 507–512. ISBN 978-0470864128.
5)”Abstract Data Types”. Virginia Tech – CS3 Data Structures & Algorithms.
6)Gavin Powell (2006). “Chapter 8: Building Fast-Performing Database Models”. Beginning Database Design. Wrox Publishing. ISBN 978-0-7645-7490-0.
7)”1.5 Applications of a Hash Table”. University of Regina – CS210 Lab: Hash Table. Archived from the original on 2021-04-27. Retrieved 2018-06-14.
8)”When data is too big to fit into the main memory”. homes.sice.indiana.edu.
9)Dubey, R. C. (2014). Advanced biotechnology : For B Sc and M Sc students of biotechnology and other biological sciences. New Delhi: S Chand. ISBN 978-81-219-4290-4. OCLC 883695533.
10)Seymour, Lipschutz (2014). Data structures (Revised first ed.). New Delhi, India: McGraw Hill Education. ISBN 9781259029967. OCLC 927793728.
11)Walter E. Brown (September 29, 1999). “C++ Language Note: POD Types”. Fermi National Accelerator Laboratory. Archived from the original on 2016-12-03. Retrieved 6 December 2016.
12)”The GNU C Manual”. Free Software Foundation. Retrieved 2014-10-15.
13)Van Canneyt, Michaël (September 2017). “Free Pascal: Reference Guide”. Free Pascal.
14)Mark Moir and Nir Shavit. “Concurrent Data Structures” (PDF). cs.tau.ac.il. Archived (PDF) from the original on 2011-04-01.

İlgili Yazılar