910 likes | 1.41k Views
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
E N D
MIT503 Veri Yapıları ve algoritmalarAlgoritma temsili Y. Doç. Yuriy Mishchenko
Veri yapıları ve veri tipleri Ders planı • Algoritma temsili • Sözde kod (PseudoCode) • Akış şemaları
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
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
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
Algoritma temsili • Bir dizide sayı bulma • İki örnek
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
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
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
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
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
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
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
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
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
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
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
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)
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
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ü
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 • ...
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
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
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
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
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
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
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)
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
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
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ü
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
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
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)
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)
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)
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
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
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
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)
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
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
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
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
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
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
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
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
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
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