1 / 87

MIT503 Veri Yapıları ve algoritmalar A lgoritma temsili

MIT503 Veri Yapıları ve algoritmalar A lgoritma temsili. Y. Doç. Yuriy Mishchenko. Veri yapıları ve veri tipleri. Ders planı Algoritma temsili S özde kod (PseudoCode) A kış şemaları. Algoritmalar. Algoritma, bir matematiksel problemin çözüm planıdır

dinah
Télécharger la présentation

MIT503 Veri Yapıları ve algoritmalar A lgoritma temsili

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 algoritmalarAlgoritma temsili Y. Doç. Yuriy Mishchenko

  2. Veri yapıları ve veri tipleri Ders planı • Algoritma temsili • Sözde kod (PseudoCode) • Akış şemaları

  3. Algoritmalar • Algoritma, bir matematiksel problemin çözüm planıdır • Algoritma, talimat listesiyle belirlenip birçok basamak içerebilir • Basamaklar, genellikle problemin halini değiştirir program Talimatlar A B D E F C A A B E bellek Hal

  4. Veri yapıları • Problemin halini temsil etmek için veri yapıları gerekir • Basit veri yapıları: tamsayılar, gerçek sayılar, mantıksal sayılar ve karakterler • Bileşik basit veri yapıları: diziler, matrisler (birkaç boyutlu diziler) ve seyrek matrisler • İleri veri yapıları (kolleksiyonlar): kümeler, haritalar (fonksiyonlar), yığınlar FİFO/LİFO, kuyruklar • İleri veri yapıları: bağlantılı listeler ve hash tabloları; veri yapılarının uygulanması için kullanılır

  5. Algoritma temsili • Algoritmalar, bir talimat listesiyle belirlenir • Bu talimat listesini temsil etmek için birkaç opsiyon var: • Doğal dil ile belirlenebilir • Bilgisayar kodu ile belirlenebilir • Akış şeması veya sözde kod ile belirlenebilir

  6. Algoritma temsili • Bir dizide sayı bulma • İki örnek

  7. Algoritma temsili • 1. Örnek: sıralanmamış dizide arama • Birinci sayı ile başlayarak hedefi bulana kadar bütün sayılara bakmak lazım • (Bu bir doğal dil ile algoritmanın tanımlanması) Sayıların hepsini yoklayın ... 2 5 7 11 12 13 17 22 23 30 hedef

  8. Algoritma temsili • 1. Örnek: sıralanmamış dizide arama • Birinci sayı ile başlayarak hedefi bulana kadar bütün sayılara bakmak lazım • Bu öneri en çok O(n) operasyon ve ortalama O(n/2) operasyon gerekiyor Sayıların hepsini yoklayın ... 2 5 7 11 12 13 17 22 23 30 hedef

  9. Algoritma temsili • 2. Örnek: sıralanmış dizide arama • (Sıralanmış dizi): • ortadaki (n/2 ‘inci) sayıya ilk önce bakalım • eğer sayı hedeften daha büyük ise, soldaki ortasına bakalım (hedef daha küçük, sadece solda olabilir: sıralanmış!) • yoksa (daha küçük ise), sağdaki ortasına bakalım (hedef daha büyük, sadece sağda olabilir !) • Bu şekilde sona kadar aramayı devam edelim • (Bu bir doğal dil ile algoritmanın tanımlanması) İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef

  10. Algoritma temsili • 2. Örnek: sıralanmış dizide arama • (Sıralanmış dizi): • ortadaki (n/2 ‘inci) sayıya ilk önce bakalım • eğer sayı hedeften daha büyük ise, soldaki ortasına bakalım (hedef daha küçük, sadece solda olabilir: sıralanmış!) • yoksa (daha küçük ise), sağdaki ortasına bakalım (hedef daha büyük, sadece sağda olabilir !) • Bu şekilde sona kadar aramayı devam edelim • Maksimum ve ortalama O(log2 n) operasyon gerekir İkiye bölme araması... 2 5 7 11 12 13 17 22 23 30 hedef

  11. Sözde Kod • Algoritma daha kesin şekilde belirtmek için farklı yöntemleri kullanıyoruz • Algoritma, bilgisayar program ile temsil edilebilir • Aslımda birçok algoritma bilgisayar program ile tanımlanmış ... • Problem – kullanılan programlama dilini bilmeyen arkadaşlar algoritmayı okuyamaz

  12. Sözde Kod • Daha genel şekilde algoritmalar sözde kod kullanarak belirtir • Sözde kod, günlükkonuşma ve aynı zamanda genel programlamadiline benzeyen bir tanımlama dilidir

  13. Sözde Kod • Sözde kod da, birçok algoritmaların adımları doğal dil kullanarak belirtilebilir • Önemli farklılıklar: • Amaç, doğal dil ile belirtilmiş bir algoritma daha belirli şekilde tanımlamak • Kullanılacak bütün “şeyleri” değişken olarak tanımlıyoruz, bütün değişkenlerin veri yapılarını belirtiyoruz • Değişkenler için harf yada kısa adları kullanıyouruz (matematiksel sorunlarda gibi) • Tipik eylemler temsil etmek için özel format kullanıyoruz

  14. Sözde Kod • Çorba pişirme (doğal dili): • Sebzeleri toplayın • Sebzeleri yıkayıp kesin • Tencereye su ekleyip ateşe koyun • Kaynamasını bekleyin • Sebzeleri ekleyin • Biraz tuz ekleyin • Tadına bakın • Pişmişse servis yapın

  15. Sözde Kod • Çorba pişirme algoritması (çevirme): • Bütün kullanılacak şeyleri değişken olarak tanımlıyoruz • Kullanılacak sebzeleri – sebze dizisi S • Kullanılacak tencere – tencere T • Kullanılacak su – su SU • Kullanılacak tuz – tuz TUZ • Tuz miktarı – sayı BİRAZ

  16. Sözde Kod • Çorba pişirme algoritması (değişkenleri kullanırken): • Sebzeleri alın (S olsun) • S’yi yıkayıp kesin • Tencereyi alın (T olsun) • T’ye su eklein (SU olsun) • T’yi ateşe koyun • SU kaynamasını bekleyin • T’ye S’yi ekleyin • BİRAZ miktarı tuz alın (TUZ olsun) • TUZ’yu SU’ya ekleyin • SU tadına bakın; pişmişse servis yapın • Sebzeleri toplayın • Sebzeleri yıkayıp kesin • Tencereye su ekleyip ateşe koyun • Kaynamasını bekleyin • Sebzeleri ekleyin • Biraz tuz ekleyin • Tadına bakın; pişmişse servis yapın

  17. Sözde Kod • Çorba pişirme algoritması (değişkenleri kullanırken): • Sebzeleri alın (S olsun) • S’yi yıkayıp kesin • Tencereyi alın (T olsun) • T’ye su eklein (SU olsun) • T’yi ateşe koyun • SU kaynamasını bekleyin • T’ye S’yi ekleyin • BİRAZ miktarı tuz alın (TUZ olsun) • TUZ’yu SU’ya ekleyin • SU tadına bakın; pişmişse servis yapın • Sebzeleri toplayın • Sebzeleri yıkayıp kesin • Tencereye su ekleyip ateşe koyun • Kaynamasını bekleyin • Sebzeleri ekleyin • Biraz tuz ekleyin • Tadına bakın; pişmişse servis yapın • Bu talimatlar zaaten daha kolayca adım adım yapılabilir ve daha az düşünme/ yaratıcılık gerektiriyorlar

  18. Sözde Kod • Çorba pişirme algoritması (çevirme): • Tipik eylemler belirtmek için özel terimler kullanıyoruz • Değişkene değer atama/koyma ( := ) • Eğer koşul (EĞER-İSE-AKSİHALDE/İF-THEN-ELSE yapısı) • İteratörlü döngü (DÖNGÜ/FOR) • Koşullu döngü (DOĞRUDUR İKEN/WHILE) • Koşullu seçme (SEÇME/CASE) • Fonksiyon tanımlanması (FONKSİYON/FUNCTİON)

  19. Sözde Kod • Çorba pişirme algoritması: • Sebzeleri alın (S olsun) • S’yi yıkayıp kesin • Tencereyi alın (T olsun) • T’ye su eklein (SU olsun) • T’yi ateşe koyun • SU kaynamasını bekleyin • T’ye S’yi ekleyin • BİRAZ miktarı tuz alın (TUZ olsun) • TUZ’yu SU’ya ekleyin • SU tadına bakın; pişmişse servis yapın atama atama atama atama

  20. Sözde Kod • Çorba pişirme algoritması: • Sebzeleri alın (S olsun) • S’yi yıkayıp kesin • Tencereyi alın (T olsun) • T’ye su eklein (SU olsun) • T’yi ateşe koyun • SU kaynamasını bekleyin • T’ye S’yi ekleyin • BİRAZ miktarı tuz alın (TUZ olsun) • TUZ’yu SU’ya ekleyin • SU tadına bakın; pişmişse servis yapın İteratörlü döngü Koşullu döngü Koşullu döngü

  21. Sözde Kod • Çorba pişirme algoritması (sözde kod formatı): • S:=kullanılacak sebzeleri • DÖNGÜ bütün S’deki s için s yıkayın ve kesin • T:=kullanılacak tencere • T’ye su ekleyin • SU:=T’deki su • T’yi ateşe koyun • SU kaynamasını bekleyin • ...

  22. Sözde Kod • Çorba pişirme algoritması (sözde kod formatı): • S:=kullanılacak sebzeleri • ... • SU kaynamamış DOĞRUDUR İKEN bekleyin • T’ye S’yi ekleyin • TUZ:=BİRAZ miktarlı tuz • SU’ya TUZ’yuekleyin • SU tadına bakın • pişmemiş DOĞRUDUR İKEN bekleyin ve SU tadına bakın • servis yapın

  23. Sözde Kod • Çorba pişirme algoritması (bütün sözde kodumuz): • S:=kullanılacak sebzeleri • T:=kullanılacak tencere • TUZ:=BİRAZ miktarlı tuz • DÖNGÜ bütün S’deki s için s yıkayın ve kesin • T’ye su ekleyin • SU:=T’deki su • T’yi ateşe koyun • SU kaynamamış DOĞRUDUR İKEN bekleyin • T’ye S’yi ekleyin • SU’ya TUZ’yuekleyin • SU tadına bakın; • pişmemiş DOĞRUDUR İKEN bekleyin ve SU tadına bakın • servis yapın

  24. Sözde Kod • Çorba pişirme algoritması (sözde kod): • Doğal dili ile tanımlanmış algoritma daha belirli şekilde belirtmek için bunu yapıyoruz • Bütün kullanılacak şeyleri değişken olarak belirtiyoruz • Algoritmada kullanılır zamanında bu (belirli) değişkenleri kullanıyoruz • Değişken Belirtme/Atama, Eğer-İse, Tekrarlama vb tipik eylemler için belirli format kullanıyoruz • S:=kullanılacak sebzeleri • T:=kullanılacak tencere • TUZ:=BİRAZ miktarlı tuz • DÖNGÜ bütün S’deki s için s yıkayın ve kesin • T’ye su ekleyin • SU:=T’deki su • T’yi ateşe koyun • SU kaynamamış DOĞRUDUR İKEN bekleyin • T’ye S’yi ekleyin • SU’ya TUZ’yuekleyin • SU tadına bakın; • pişmemiş DOĞRUDUR İKEN bekleyin ve SU tadına bakın • servis yapın

  25. Sözde Kod • İkiye bölme algoritması (doğal dil): • Sıralanmış “n” boyutta dizisi var • İlk önce ortadaki (n/2 ‘inci) sayıya bakıyoruz • Eğer bu sayı hedeften daha büyükse, soldaki orta (n/4 ‘inci) sayıya bakıyoruz • Aksi halde (daha küçükse), sağdaki orta (3/4n ‘inci) sayıya bakıyoruz • Bu şekilde devam ediyoruz

  26. Sözde Kod • İkiye bölme algoritması: • Bütün kullanılacak şeyleri değişken olarak belirtiriz • Verilmiş sayı dizisimiz – dizi D • Hedefimiz – H • Ortadaki değerleri – O • Dizinin sol yarısı – dizi SOL • Dizinin sağ yarısı – dizi SAĞ • Dizilerin boyutları – “n” falan

  27. Sözde Kod • İkiye bölme algoritması • H, hedef değeridir • D, sıralanmış sayı dizisidir • n, D dizisinin boyutudur • O, D dizisinin (n/2) ortasındaki değeri • Eğer OH’dan daha büyük ise, O, D’nin sol yarısının ortasındaki değeri olsun • Aksi halde (daha küçükse), O, D’nin sağ yarısının ortasındaki değeri olsun • Bu şekilde H’yı bulana kadar devam ediyoruz

  28. Sözde Kod • İkiye bölme algoritması: • Tipik eylemler için özel format kullanırız • Değişkene değer atama/koyma ( := ) • Eğer koşulu (EĞER-İSE-AKSİHALDE/İF-THEN-ELSE yapısı) • İteratörlü döngü (DÖNGÜ/FOR) • Koşullu döngü (DOĞRUDUR İKEN/WHİLE) • Koşullu seçme (SEÇME/CASE) • Fonksiyon tanımlanması (FONKSİYON/FUNCTİON)

  29. Sözde Kod • İkiye bölme algoritması: • H, hedef değeridir • D, sıralanmış sayı dizisidir • n, D dizisinin boyutudur • O, dizinin (n/2) ortasındaki değeri • eğer O H’dan daha büyük ise, O, D’nin sol yarısının ortasındaki değeri olsun • aksi halde (daha küçükse), O, D’nin sağ yarısının ortasındaki değeri olsun • bu şekilde H’yı bulana kadar devam ediyoruz atama atama atama atama atama atama

  30. Sözde Kod • İkiye bölme algoritması: • H, hedef değeridir • D, sıralanmış sayı dizisidir • n, D dizisinin boyutudur • O, dizinin (n/2) ortasındaki değeri • eğer O H’dan daha büyük ise, O, D’nin sol yarısının ortasındaki değeri olsun • aksi halde (daha küçükse), O, D’nin sağ yarısının ortasındaki değeri olsun • bu şekilde H’yı bulana kadar devam ediyoruz eğer-ise-aksihalde

  31. Sözde Kod • İkiye bölme algoritması: • H, hedef değeridir • D, sıralanmış sayı dizisidir • n, D dizisinin boyutudur • O, dizinin (n/2) ortasındaki değeri • eğer O H’dan daha büyük ise, O, D’nin sol yarısının ortasındaki değeri olsun • aksi halde (daha küçükse), O, D’nin sağ yarısının ortasındaki değeri olsun • bu şekilde H’yı bulana kadar devam ediyoruz Koşullu döngü

  32. Sözde Kod atamalar • İkiye bölme algoritması: • H:=hedef değeri • D:= verilen sayı dizisi • n:= D’nin boyutu • O:= D’nin n/2 ‘inci değeri ( bu şekilde yazalım: D(n/2) ) • eğer O H’dan daha büyük ise: D:=D’nin sağa yarısın:= D’nin boyutuO:= D(n/2) aksi halde (daha küçükse): D:=D’nin sağa yarısın:= D’nin boyutuO:= D(n/2) • bu şekilde H’yı bulana kadar devam ediyoruz

  33. Sözde Kod eğer-ise-aksihalde yapısı • İkiye bölme algoritması: • H:=hedef değeri • D:= verilen sayı dizisi • n:= D’nin boyutu • O:= D(n/2) • EĞER O>H İSED:=D’nin sol yarısın:= D’nin boyutuO:= D(n/2) AKSİ HALDE D:=D’nin sağ yarısın:= D’nin boyutuO:= D(n/2) • bu şekilde H’yı bulana kadar devam ediyoruz

  34. Sözde Kod KOŞULLU DÖNGÜ YAPISI • İkiye bölme algoritması: • H:=hedef değeri • D:= verilen sayı dizisi • n:= D’nin boyutu • O:= D(n/2) • (O!=H ve n>1)DOĞRUDUR İKEN EĞER O>H İSE D:=D’nin sol yarısın:= D’nin boyutuO:= D(n/2) AKSİ HALDE D:=D’nin sağ yarısın:= D’nin boyutuO:= D(n/2)

  35. Sözde Kod • İkiye bölme algoritması (bütün sözde kod): • H:=hedef değeriD:= verilen sayı dizisin:= D’nin boyutuO:= D(n/2) (O!=H ve n>1)DOĞRUDUR İKEN EĞER O>H İSE D:=D’nin sol yarısı n:= D’nin boyutu O:= D(n/2) AKSİ HALDED:=D’nin sağ yarısı n:= D’nin boyutu O:= D(n/2)

  36. Sözde Kod • İkiye bölme algoritması (sözde kod): • Doğal dili ile tanımlanmış algoritma daha belirli bir şekilde belirtmek için yapıyoruz • Bütün kullanılacak şeyleri değişken olarak belirtiyoruz • Algoritmada kullanılır zamanda bu (belirli) değişkenleri kullanıyoruz • Değişken belirtme/atama, eğer-ise, tekrarlama vb tipik eylemler için belirli format kullanıyoruz • H:=hedef değeri • D:= verilen sayı dizisi • n:= D’nin boyutu • O:= D(n/2) • (O!=H ve n>1)DOĞRUDUR İKEN EĞER O>H İSE D:=D’nin sol yarısı n:= D’nin boyutu O:= D(n/2) AKSİ HALDE D:=D’nin sağ yarısı n:= D’nin boyutu O:= D(n/2)

  37. Sözde kod yapıları • EĞER-İSE-AKSİHALDE • EĞER koşul İSE doğru ise operasyonlarAKSİHALDE aski halde operasyonlar(EĞERİN SONU) • Eğer koşul doğru ise, belirli operasyonları yapmak demektir

  38. Sözde kod yapıları • EĞER-İSE-AKSİHALDE • IF koşul THEN doğru ise operasyonlarELSE aski halde operasyonlarEND IF • Eğer koşul doğru ise, belirli operasyonları yapma

  39. Sözde kod yapıları • EĞER-İSE-AKSİHALDE (birkaç koşullu form) • IF 1. koşul THEN doğru ise operasyonlarELSE İF 2. koşul THEN doğru ise operasyonlar...ELSE aski halde operasyonlarEND IF

  40. Sözde kod yapıları • EĞER-İSE-AKSİHALDE • EĞER 1. koşul İSE doğru ise operasyonlarEĞER 2. koşul İSE doğru ise operasyonlar...AKSİHALDE aski halde operasyonlar(EĞERİN SONU)

  41. Sözde kod yapıları • DOĞRUDUR İKEN • (koşul) DOĞRUDUR İKEN doğru iken operasyonlar(DÖNGÜ SONU) • Koşul doğrudur iken belirli operasyonları tekrar tekrar yapmak demektir

  42. Sözde kod yapıları • DOĞRUDUR İKEN • WHILE (koşul) DO doğru iken operasyonlarEND WHİLE • Koşul doğrudur iken belirli operasyonları tekrar tekrar yapmak demektir

  43. Sözde kod yapıları • DOĞRUDUR İKEN (2. form) • DÖNGÜ doğru iken operasyonlar(koşul) DOĞRUDUR İKEN • Önceki döngü gibi, ama koşulu döngüyü yaptırtıktan sonra kontrol ederiz

  44. Sözde kod yapıları • DOĞRUDUR İKEN (2. form) • REPEAT doğru ise operasyonlar UNTIL koşulu DO • Önceki döngü gibi, ama koşulu döngüyü yaptırtıktan sonra kontrol ederiz

  45. Sözde kod yapıları • DÖNGÜ (1. form) • DÖNGÜ iteratör, ilk_değeri’NDEN son_değeri’NE KADAR döngü operasyonları(DÖNGÜ SONU) • Belirli operasyonları tekrar tekrar yapmak demektir

  46. Sözde kod yapıları • DÖNGÜ (1. form) • FOR iteratör FROM ilk_değeri TO son_değeri DO döngü operasyonlarıEND FOR • Belirli operasyonları tekrar tekrar yapmak demektir

  47. Sözde kod yapıları • DÖNGÜ (2. form) • DÖNGÜ BÜTÜN değer_listesi’NDEKİ iteratör İÇİN döngü operasyonları(DÖNGÜ SONU) • Bütün “değer listesi” için belirli operasyonları tekrar tekrar yapmak demektir

  48. Sözde kod yapıları • DÖNGÜ (2. form) • FOR iteratör İN değer_listesi DO döngü operasyonlarıEND FOR • Bütün “değer listesi” için belirli operasyonları tekrar tekrar yapmak demektir

  49. Sözde kod yapıları • SEÇME • SEÇME ifade 1. değeri: doğru ise operasyonlar 2. değeri: doğru ise operasyonlar ...ASKİ HALDE: aksi halde operasyonlar(SEÇME SONU) • İfadeye göre değer listesinden bir değeri seçip uyan operasyonları yapmak demektir

  50. Sözde kod yapıları • SEÇME • CASE ifade OF 1. değeri: doğru ise operasyonlar 2. değeri: doğru ise operasyonlar ...OTHERS: aksi halde operasyonlar END CASE • İfadeye göre değer listesinden bir değeri seçip uyan operasyonları yapmak demektir

More Related