1 / 63

MIT503 Veri Yapıları ve algoritmalar Ver i Yapıları na Giriş

MIT503 Veri Yapıları ve algoritmalar Ver i Yapıları na Giriş. Y. Doç. Yuriy Mishchenko. Veri yapıları ve veri tipleri. Ders planı V e ri yapıları nedir Neden veri yapıları Basit veri yapıları B ileşik veri yapıları İleri (soyut) veri yapıları. Veri yapıları nedir.

aquila
Télécharger la présentation

MIT503 Veri Yapıları ve algoritmalar Ver i Yapıları na Giriş

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MIT503 Veri Yapıları ve algoritmalarVeri YapılarınaGiriş Y. Doç. Yuriy Mishchenko

  2. Veri yapıları ve veri tipleri Ders planı • Veri yapıları nedir • Neden veri yapıları • Basit veri yapıları • Bileşik veri yapıları • İleri (soyut) veri yapıları

  3. Veri yapıları nedir • Veri yapısı: algoritmadaki değişkenler yani veriler için kullanılan ve bu verilerle yapılabilir işlemleri belirten bir kavram • Değişkenler ve veri yapıları arasındaki farkı: • Değişken, bir tür değer içerebilen bir konteyner • Veri yapısı, bir tür değer ve o değerle yapılabilir işlemler tanımlayan bir obje

  4. Veri yapıları nedir • Örneğin, normal sayılara karşılayan veri yapısı: • Bir değer (sayısal) • O değer için ekleme, çıkartma, çarpma ve bölme işlem tanımları • İşte bunlar birlikte –sayıveri yapısı

  5. Neden veri yapıları? • Herhangi algoritmanın çalışmasının genellikle iki kısmı var: değişken kümesi ve o kümeyi sürekli değiştiren işlem sırası • Değişken kümesine genellikle algoritmanın hali denir veya algoritmanın verileri, algoritmanın verilerini değiştiren işlemlere algoritmanın kodu veya aslında algoritma denir

  6. Neden veri yapıları? • Bu şekilde gerçekleştirilen hesaplamalara algoritma biliminde sonlu durum makinesi denir • Sonlu durum makinesi hesaplamanın bir türü, ama tek türü değil, yani hesaplama farklı şekilde de organize edilebilir

  7. Neden veri yapıları? • Sonlu durum makinesinde bir işlem gerçekleştirmek için, makinenin bir “sonlu”durum var ve işlemi tamamlamak için bu durum bir işlem sırası (yani program) kullanarak adım adım değiştirilir

  8. Neden veri yapıları? • Sonlu durum makinesi, Alan Turing, Konrad Zuse, John von Neumann matematikçiler tarafından 1930-1950 yıllarda geliştirilmiştir • Sonlu durum makinelerine Von Neumann mimarisi veya Turing makinesi de denebilir • Bugün tüm bilgisayarlar Von Neumann mimarisini kullanır yani Turing makineleridir

  9. Neden veri yapıları? • Algoritmalar, bir tür verileri kullanarak belirtilen halini sürekli değiştirerek bir işlemi tamamlar • Algoritmaların ihtiyacı olan ve işlemede kullanılacak verileri belirtip temsil etmek için veri yapıları kullanılır

  10. C Neden veri yapıları? • Veri yapıları, tüm zamanda algoritmanın hali belirtmek ve o hali güncelleştirmek için kullanılır • Dolayısıyla veri yapıları, kullanılacak verilerin doğası ve işlemlere göre seçilir • Örneğin – aritmetik işlemler için sayısal veri yapıları kullanılacak; metin işletme için karakter veri yapıları kullanılacak; arama için dizi ve liste gibi bileşik veri yapıları kullanılacak

  11. C Neden veri yapıları? • Veri yapıların elde olan işe göre uygun ve faydalı şekilde seçilmesi iyi algoritma oluşturmak için son derece önemlidir

  12. Neden veri yapıları? • Örnek • Sayısal veri yapıları matematiksel işlemler tanımlar ve matematiksel işlemler için kullanılabilir • A:=B-4*C

  13. Neden veri yapıları? • Örnek • Diziler (Array), birkaç nesne belirli sırada depolayan bir veri yapısı ve bu nesneleri sırasına göre erişmeye imkan sağlar • Bu şekilde diziler, bir sırada olan ve o şekilde kullanılacak veriler için kullanılabilir • A[1]:=“a”, A[2]:=“b”, A[3]:=“c”

  14. Neden veri yapıları? • Örnek • Kayıt (Record), farklı adlı eleman içerebilen bir veri yapısı • Elemanlar genellikle belirli sayıda ve onların isimlerine göre kayıttan ortaya çıkartılır • Kayıdın elemanlarına genellikle alanlar (“fields”) veya üyeler (“members”) denir, kendisi kayıtlar olabilir • öğrenci.ad:=“Temel” öğrenci.soyad:=“Okuyucu”öğrenci.matematik.final-not:=“AA”

  15. Neden veri yapıları? • Örnek • Hash tablosu kayıt ver yapısına benzer bir deposu • İsim-değer şeklinde verileri organize eder • Elemanlarının sayısı belirli olmayabilir, yani yeni alanlar serbest olarak eklenebilir ve kaldırılabilir • Hash tabloları dinamik veriler için kullanılabilir; normalde bir dizi gibi algoritmalarda kullanılır • öğrenci[“ad”]:=“Temel” öğrenci[“soyad”]:=“Okuyucu”öğrenci[“araba”]:=“Ford öğrenci[“soyad”]:=“Okuyucu””

  16. Neden veri yapıları? • Örnek • Küme (Set) veri yapısı birkaç eleman içerebilir ama elemanlar belirli bir sırada olmaması şartı var, yani eleman kümesi • Kümeler elemanın bir çeşiti bir sırasız şekilde depolanması için kullanılabilir

  17. Neden veri yapıları? • İşe göre doğru veri yapısının kullanılması daha iyi, daha kompakt, daha kolayca okunabilir ve daha verimli şekilde uygulanabilir algortimaların geliştirilmesi için önemlidir

  18. Veri yapıları • Vari yapıları üç gruba bölünebilir • Primitif (temel, basit) veri yapıları • Bileşik (dinamik) veri yapıları • İleri (soyut) veri yapıları

  19. Basit veri yapıları • En basit veri yapıları, matematiksel sayılardır

  20. Basit veri yapıları Tamsayılar • Tamsayı veri yapısı, normal tamsayılara temsil eder • Toplama, çıkartma, çarpma, ve bölme işlemler var • Daha büyük, daha küçük ve eşitlik işlemler var • Önceki ve sonraki ardışıklık işlemi de var

  21. Basit veri yapıları • Aslında bilgisayarın belleğinde hep veriler tamsayı kullanarak temsil edilip depolanır • Programlama dillerinde tamsayı değişken için bellekte kullanılacak alanın uzunluğuna göre genellikle byte, short, int, long tamsayı tipleri var • Byte – 8 bit (1 byte), 0’dan 255’e kadar • Short – 16 bit (2 byte), 0’dan 65 535’e kadar • Int – 32 bit (4 byte), 0’dan 4 294 967 296’e kadar • Long – 64 bit (8 byte), 0’dan 18 446 744 073 709 551 616’e kadar • Tamsayı değişkenleri hem işaretli hem de işaretsiz olabilir; işaretli ise – aralık iki eş negatif ve pozitif parçaya bölünür, örneğin işaretli Byte -127’den 127’e kadar tamsayılar içerir

  22. Basit veri yapıları Gerçek sayılar • Normal gerçek sayılar temsil eder • Tekrar aritmetik toplama, çıkartma, çarpma ve bölme işlemleri var • Daha büyük, daha küçük ve eşitlik karşılaştırma İşlemleri var • Gerçek sayılar için ardışıklık işlemleri yoktur

  23. Basit veri yapıları • Bilgisayarlarda gerçek sayılar uzun bir tamsayı ile temsil edilirve yaklaşık olarak depolanır, yani örneğin gerçek sayı 2,435143855.... bilgisayarda yaklaşık olarak 2,4434154 sayı olarak kaydedilecek • Gerçek sayılar bilgisayarda “mantis” ve “exponent” kullanarak temsil edilir, yani 2.4351E15 aslında 2.4351*1015demek ve burada, 2.4351 mantis ve 15’eexponent tir

  24. Basit veri yapıları • Programlama dillerinde gerçek sayılar normalde float veya doubleveri tipleriyle verilir • Float – 32 bit (4 byte), ±3.4E38aralıkta, 8 basamak mantisli gerçek sayılar • Double – 64 bit (8 byte), ±1.8E308aralıkta, 16 basamak mantisli gerçek sayılar • Gerçek tipten değişkenler sadece işaretlidir

  25. Basit veri yapıları Boolean (mantıksal) sayıları • Sadece iki değer var, yani yanlış (0) ve doğru (1) • OR, XOR, AND ve NOT mantıksal işlemleri var • Normalde mantiksal işlemler için kullanılır Karakterler • Algoritmalarda metinlerle çalişmak için karakter veri yapıları kullanılır • Programlama dillerinde genellikle byte veya shorttamsayı ile temsil eder ve ilişkili 0-255 tamsayılar “a”, “b”, “c” gibi metindeki karakterleri belirtir

  26. Bileşik veri yapıları • Bileşik veri yapıları, verilerin kümeleri toplu olarak algoritmalarda kullanmak için kullanılır

  27. Bileşik veri yapıları Diziler • En temel bileşik veri yapısı – dizi (Array) • Belirli bir sırada olan elemanların dizisini temsil eder • Bilgisayarın beleğinde bir blok olarak depolanır ve elemanları onların sırasını kullanarak belleğinde direkt olarak ve çok hızlı erişilebilir sıra 1 2 3 4 5 6 7 8 elemanlar a 123 b Yuri ders 3.5 503 ttt

  28. Bileşik veri yapıları Diziler • Elemanlara direkt erişim var olması için, diziler uygun bileşik veriler için en verimli depolama araçtır • Uygun veriler demek ki, belirli sırada, belirli sayıda ve boyut olarak eş sıra 1 2 3 4 5 6 7 8 elemanlar a 123 b Yuri ders 3.5 503 ttt

  29. Bileşik veri yapıları Diziler • Dizilerin elemanın atanma/alınma işlemi var; bazen arama işlemi de tanımlanır • Elemanlar, tipik olarak sayısal “indeks” veya “pozisyon” kullanarak erişilir, örneğin DİZİ[indeks]:=DEĞER indeks 1 2 3 4 5 6 7 8 elemanlar a 123 b Yuri ders 3.5 503 ttt

  30. Bileşik veri yapıları Matrisler • İki, üç, vb boyutlu dizilere matris denir • Matrislerin elemanları algoritmalarda benzer şekilde kullanılır, yani MATRİS[i,j] – iki indeks

  31. Bileşik veri yapıları Seyrek matrisler • Seyrek matrisler çoğunlukla 0 içerir, sıfırdan farklı çok az eleman içerir

  32. Bileşik veri yapıları • Seyrek matrisler sadece sıfırdan farklı olan elemanın listesi olarak belirtilebilir, du daha çok ekonomik, bilgisayar belleğinde daha az yer gerekir ve seyrek matrislerle işlemlerin daha hızlı yapılabilmesini sağlar

  33. Bileşik veri yapıları • İkinci en temel bileşik veri yapısı, bağlantılı listelerdir • Eğer dizinin boyutu başından belli ve değişemez olmalı, yani statik, bağlantılı listeler değişebilir yada dinamik diziler için kullanılabilir • Bağlantılı liste, bir elemanın zinciri olarak düşünülebilir

  34. Bileşik veri yapıları Bağlantılı listenin ana fikri: nesne nesne nesne Her elemanda ilişkili veri ve sonraki elemana işaretçi vardır işaretçiler İşaretçileri takip ederek bütün liste geçirilebilir İki yonlü listelerde sonraki ve önceki elemana işaretçilerkullanılır işaretçiler

  35. Bileşik veri yapıları • Bağlantılı listedeki eleman sayısı kollayca değiştirilebilir, sonuna her zaman bir daha eleman eklenebilir

  36. Bileşik veri yapıları Bağlantılı listelerle işlemleri • Ekleme – yeni eleman eklenmesi • yeni eleman listenin sonuna eklenip listeye işaretçi ile bağlanır • Kaldırma – var olan eleman kaldırılması • Kaldırma için, belirtilen elemanı sıradan kaldırıp yanındaki elemanın işaretçileri değiştirilir • Arama – listede belirli eleman aranması • Listenin birinci elemanıyla başlayınca hedef veya sona ulaşmaya kadar işaretçileri takip edilir

  37. Bileşik veri yapıları Bağlantılı listede ekleme ve kaldırma Ekleme nesne nesne nesne Yeni eleman sonuna ekleyip yeni işaretçi ile bağlanır işaretçiler Kaldırma nesne nesne nesne Belirtilen elemanıkaldırıp yanındaki elemanın işaretçileri güncelleştirilir

  38. Bileşik veri yapıları • Bu tip işlemlerin algoritma kullanarak tarafımızdan belirtilmesi gerekir • Yani baştan bu tip işlem nasıl yapılmasını bilmiyoruz, ve ekleme ve kaldırma işlemleri için bağlantılı liste veri yapısını uygulamak için ilişkili algoritmaları vermemiz gerekiyor

  39. Bileşik veri yapıları Bagbaglantili liste = {ilk, son} eleman={.nesne, .onceki,.sonraki} Baglantililisteeklemealgoritmasi liste.ekle(yeni_nesne) • yeni_eleman.nesne=yeni_nesneyeni_eleman.onceki:=son • yeni_eleman.sonraki:=0 • son.sonraki:=yeni_eleman • Baglatililistekaldirmaalgoritmasi • liste.kaldir(hedef) • eleman:=liste.bul(hedef) • onceki_eleman:=eleman.onceki • sonraki_eleman:=eleman.sonraki • onceki_eleman.sonraki:= sonraki_eleman

  40. Bileşik veri yapıları Hash Tabloları • Dinamik boyutta olan veri yapıları için kullanılabilir veri yapısı Hash Tabloları • Hash tabloları, bağlantılı listeler gibi boyutu değişebilir, ama elemanlar için farklı depolama sistemi kullanılır • O yüzden elemanlara erişim işin belirli durumda daha uygun bir metottur

  41. Bileşik veri yapıları • Hash tablolarda elemanlar belirli bir sırada depolanmaz, normal dizilerde gibi index/anahtar – değeri şeklinde depolanır • Elemanlara erişim sağlamak, bir listenin geçirilmesi gerekmiyor, index kullanarak eleman elde edilebilir • Anahtar-değer çiftlerinin sayısı değişebilir, yani sabit değil ve dinamik

  42. Bileşik veri yapıları Hash tablosu nedir? Veri bloğu (bilgisayar belleği) Anahtar - nesne (1) “Anahtar” için belirli “adres fonksiyonu” kullanarak bilgisayar belleğinde bir adresini hesaplarız – “bellekte adresi = H(anahtar)” H’ye “hash fonksiyon” denir, ana özelliği – herhangi farklı iki anahtar için farklı adresler verilmeli

  43. Bileşik veri yapıları Hash tablosu nasıl çalışıyor ? Veri bloğu (bilgisayar billeği) Anahtar - nesne (2) Hash fonksiyonu farklı anahtarlara farklı depolama adresleri verir İkinci özelliği – hash fonksiyonu kullanılabilir verinin adres bloğunu kullanır

  44. Bileşik veri yapıları Hash tablosu nasıl çalışıyor ? Veri deposu (bilgisayar billeği) Anahtar ? (3) Bellekten nesneyi geri almak için, “anahtar”a göre yeni adres hesaplanır ve nesne o adresten direkt olarak alınır

  45. Bileşik veri yapıları Hash tablosu nasıl çalışıyor ? Veri deposu (bilgisayar billeği) Anahtar ? Bu şekilde hash tabloların ana avantajı, herhangi bir nesneyi elde almak için tek operasiyon gerekir – anahtara göre adresi hesaplayıp o adrese bakmak. Yani bağlantılı listede gibi tüm liste geçirilmesi gerekmiyor, N eleman ise hala O(1) zamanda erişim sağlanır (bağlantılı listede O(N))

  46. Bileşik veri yapıları • Hash fonksiyonu, mümkün anahtarların hepsini daha küçük bellek bloğuna yansıtmalı • Örneğin, hash tablolarında anahtarlar olarak tipik olarak metinler kullanılır; 10 karakterli metin 6E17 olanak demektir; bilgisayarın belleğin boyutu en çok 1GB=1E9, yani nasıl çözülür? Mümkün anahtarlar - ÇOK Kullanılabilir bellek adresleri - AZ Gerçek hayatta karşılaşılan anahtarlar AZ !!! Hash fonksiyonu anahtaradres

  47. Bileşik veri yapıları Yani genellikle, bütün mümkün anahtarlar gerçek hayatta karşılaşılamaz Mümkün anahtarlar - ÇOK Kullanılabilir bellek adresleri - AZ Gerçek hayatta karşılaşılan anahtarlar AZ var !!! Hash fonksiyon anahtaradres

  48. Bileşik veri yapıları • Programlamada ve algoritmalarda çok kullanılan veri yapıları yığınlar (stack) ve kuyruklar (queue) dır • Yığınlar ve kuyruklar özel dinamik boyutta diziler • Yığınların ve kuyrukların bilgisayarlarda genellikle işlemci seviyesinde çok verimli uygulanmaları var, yani bu tip dizi algoritma için kullanılması, mümkünse, çok verimlidir

  49. Bileşik veri yapıları Yığınlar • Yığınlar (stack) sıralı giriş kaydetme için kullanılır • Sıralı girişin bir örnek metin satırıdır, yani elemanlar zamanla birer birer gelir • Last-İn-First-Out (LİFO) ve First-İn-First-Out (FİFO yada kuyruk yada queue) iki tür var girdi v e r i y a p ı

  50. Bileşik veri yapıları • Last-in-first-out (LİFO) ve First-in-first-out (FİFO) yığınları arasında farkı 1 girdi girdi 2 LİFO  3 girdi 3 girdi çıktı 1 2 girdi  FİFO 3 girdi 1 çıktı

More Related