Algoritmalar II Ders 1: Alan zaman takası yöntemi.

Slides:



Advertisements
Benzer bir sunumlar
Yığınlama Sıralaması (Heap Sort)
Advertisements

FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Yinelemeli Algoritma Analizi & Asimptotik Notasyon
Ayrık Yapılar Algoritma Analizi.
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
İkili Ağaçlar İkili Arama Ağaçları
Sorting Methods Basics of Sorting Elementary Sorting Algorithms
Algoritmalar DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
Algoritmalar DERS 4 Çabuk sıralama Böl ve fethet Bölüntüler
Boyer-Moore Algoritması ve Analizi
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
MIT503 Veri Yapıları ve algoritmalar Veri ağaçları
BPR152 ALGORİTMA VE PROGRAMLAMA - II
SAYILARI SIRALAYALIM İYİ SEYİRLER.
EXCEL DE VERİ TABANI (DATABASE) İŞLEMLERİ
Chapter 6: Using Arrays.
SINIFLANDIRMA VE REGRASYON AĞAÇLARI
YMT219: Veri Yapıları Ders Saatleri: Pazartesi 9:15-12, 17:30-20:15
ONDALIK KESİRLER , , , , , , , , , , , ,.
HIZLI SIRALAMA ALGORİTMALARI(QUICK SORT)
C PROGRAMLAMA DİZİLER (ARRAYS).
ONDALIK KESİRLER , , , , , , , , , , , ,.
Ders İçeriği Liste Soyut veri yapısı (ADT)
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bugünkü Konular Döngüler ve Akış Diyagramları C de Döngü Tanımlama
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritmalar ve Programlama I Ders 8:DİZİ (VEKTÖR) KAVRAMI
Veri yapıları Hafta3 Dizi Yapıları.
AVL(Adel’son-Vel’skiĭ and Landis) Ağacı AVL ağacı, iki alt ağacının yükseklikleri farkının en fazla 1 olabildiği dengeli ikili arama ağacıdır. AVL ağacında.
Floyd Algoritması Floyd Algoritması Dijkstra algoritmasının daha genel halidir. Çünkü şebekedeki herhangi iki düğüm arasındaki en kısa yolu belirler. Algoritma,
Sıralama. Sıralama, bir dizideki sayısal elemanların küçükten büyüğe veya büyükten küçüğe, sayısal olmayan bir dizideki elemanların ise A’ dan Z’ ye.
Chapter 7 Space and Time Tradeoffs Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI Kafkas Üniversitesi Mühendislik Fakültesi.
Dinamik programlama ve Açgözlü algoritma
Algoritmalar II Ders 6 Açgözlü Algoritmalar.
0-1 Sırt Çantası Problemi
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
Algoritmalar II Ders 8 Açgözlü Algoritmalar.
Algoritmalar II Ders 13 Çizgelerde tüm ikililer arasında en kısa yollar.
Insertion Sort Fikir: Oyun kartlarını sıralamaya benzer.
Algoritmalar II Ders 7 Açgözlü Algoritmalar.
Algoritmalar II Ders 4 Dinamik Programlama Yöntemi.
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
İleri Algoritma Analizi
İleri Algoritma Analizi
9. Ders Tüm ikililer arasında en kısa yollar
Algoritmalar II Ders 3 Dinamik Programlama Yöntemi.
İleri Algoritma Analizi
İleri Algoritma Analizi
Algoritma Nedir? Algoritmayı, herhangi bir problemin çözümü için izlenecek yolun adımlar halinde yazılması olarak tanımlayabiliriz. Algoritma, bir problemin.
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Chapter 6 Dönüştür ve Yönet (Transform-and-Conquer)
Chapter 3 Brute Force Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
NİŞANTAŞI ÜNİVERSİTESİ
İleri Algoritma Analizi
Veri Yapıları ve Algoritmalar
Algoritmalar II Ders 3 Dinamik Programlama Yöntemi.
NİŞANTAŞI ÜNİVERSİTESİ
Eşitsizlikler Hasan KORKMAZ İzmir Fen Lisesi
İleri Algoritma Analizi
İleri Algoritma Analizi
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
Chapter 4 Divide-and-Conquer
Bölüm 5 Azalt ve yönet (Decrease-and-Conquer)
1 EXCEL DE VERİ TABANI (DATABASE) İŞLEMLERİ Excel de bir veritabanı oluşturulabilir veya başka programlarda (Access gibi) oluşturulmuş olan Veri Tabanları.
Sunum transkripti:

Algoritmalar II Ders 1: Alan zaman takası yöntemi

Chapter 7 Alan ve Zaman Takası

Alan zaman takasi Dinamik programlama (bir sonraki bölüm) Zamandan kazanmak için hafızadan fazladan alan kullanılan algoritmalar: Giriş verileri veya bir kısmı üzerinde yapılan ön işlemlerin sonuçları daha sonra kullanılmak üzere hafızada tutulur. Sayarak sıralama Karakter dizisi arama algoritmaları Hesaba dayalı adresleme (hashing) Dinamik programlama (bir sonraki bölüm)

Sayarak sıralama Verilen sayılar içinde bulunan her sayıdan küçük sayıların sayısını sayıyor Bu sayıların sayısını hafizada tutuyor Bir sayı için bu sayıdan küçük sayıların sayısı, bu sayının sıralı listede nerede bulunduğunu gösteriyor Örneğin, bir sayı için bu sayıdan küçük sayıların sayısı 10 ise bu sayı listede 11. yerdedir. Şimdi tüm elemanların yerini bilerek onları sıralı bir biçimde yeni bir diziye yazabiliriz Bu algoritmaya sayarak sıralama (counting sort) denir

Karar ağaçlarının yardımıyla KARŞİLAŞATIRMA TABANLİ SİRALAMA: KARŞILAŞTIRMA TABANLI SIRALAMA ALGORİTMASI İÇİN ALT SINIR BULUNABİLİR Nasıl? Karar ağaçlarının yardımıyla

Sırala a1, a2, …, an Karar ağacı örneği 1:2 2:3 123 1:3 132 312 213 231 321 Her iç düğüm i:j ile gösyerildi, burada i, j {1, 2,…, n}. Sol altağaça ai  aj ise geçilir. Sağ altağaç ai  aj durumunu göstermektedir.

Her iç düğüm i:j ile gösterildi, burada i, j {1, 2,…, n}. Karar ağacı örneği Sırala a1, a2, a3 9, 4, 6  1:2 9  4 2:3 1:3 123 1:3 213 2:3 132 312 231 321 Her iç düğüm i:j ile gösterildi, burada i, j {1, 2,…, n}. Sol altağaçta ai  aj. Sağ altağaçta ai  aj.

İç düğüm i:j ile gösterildi, burada i, j {1, 2,…, n}. Karar ağacı örneği Sıralama a1, a2, a3 9, 4, 6  1:2 2:3 1:3 9  6 123 1:3 213 2:3 132 312 231 321 İç düğüm i:j ile gösterildi, burada i, j {1, 2,…, n}. Sol altağaçta ai  aj. Sağ altağaçta ai  aj.

Her iç düğüm i:j ile gösterildi i, j {1, 2,…, n}. Karar ağacı örneği Sırala a1, a2, a3 9, 4, 6  1:2 2:3 1:3 123 1:3 213 2:3 4  6 132 312 231 321 Her iç düğüm i:j ile gösterildi i, j {1, 2,…, n}. Sol altağaçta ai  aj. Sağ altağaçta ai  aj.

Sıralama a1, a2, a3 9, 4, 6  Karar ağacı örneği 4  6  9 1:2 2:3 1:3 123 1:3 213 2:3 132 312 231 321 4  6  9 Her yaprak , ,…, (n) aşağıdaki karşılaştırmayı göstermektedira(1) a(2)    a(n)

Karar ağacı karşılaştırma algoritmasını modelleyebilir: Karar ağacı modeli Karar ağacı karşılaştırma algoritmasını modelleyebilir: Her veri sayısı n için bir ağaç var Algoritmaya ikili karşılaştıma yapıldığı yerde bu ikilileri birleştiriyor gibi bakılabilir. Ağaç tüm ikili karşılaştırmaları içermektedir. Algoritmanın işlem zamanı = alınan yolun uzunluğu. En kötü durumda işlem zamanı = ağaç yüksekliği.

Her karşılaştırmalı sıralama Karar ağacına dönüştürülebilir class InsertionSortAlgorithm { for (int i = 1; i < a.length; i++) { int j = i; while ((j > 0) && (a[j-1] > a[i])) { a[j] = a[j-1]; j--; a[j] = a[i]; }} 1:2 2:3 123 1:3 132 312 213 231 321

Karar ağacı yüksekliği için alt sınır Teorem. n elemanlı bir karar ağacının yüksekliği = (n lg n) dir. İspat. Ağacın yaprak sayısı n! dir (n! Tane farklı durum olduğundan) İkili ağacın yüksekliği h ise yaprak sayısı 2h olur. Yani n!  2h .  h  lg(n!) (lg artandır)  n lg n – n lg e = (n lg n) .

KARŞİLAŞTİRMALİ SIRALAMA ALGORİTMASİ İÇİN ALT SİNİR Heapsort ve merge sort asimptotik en iyi ( optimal) karşılaştırmalı sıralama algoritmalarıdır.

İŞLEM ZAMANI? Bu algoritmada A[i]<A[j ] karşılaştırılması yapılmaktadır Algoritma seçmeli sıralama (selection sort) ile aynı sayıda karşılaştırma işlemi yapmaktadır Ve ek olarak ek bir alana gereksinimi vardır

Doğrusal zamanda sıralama Sayarak sıralama: Karşılaştırma yoktur. Giriş: A[1 . . n], buradaA[ j]{1, 2, …, k} . Çıkış: B[1 . . n], sıralı. Yardımcı dizi: C[1 . . k] .

do C[A[ j]]  C[A[ j]] + 1 ⊳ C[i] = |{key = i}| for i  2 to k Sayarak sıralama for i  1 to k do C[i]  0 for j  1 to n do C[A[ j]]  C[A[ j]] + 1 ⊳ C[i] = |{key = i}| for i  2 to k do C[i]  C[i] + C[i–1] ⊳ C[i] = |{key  i}| for j  n downto 1 do B[C[A[ j]]]  A[ j] C[A[ j]]  C[A[ j]] – 1

Sayarak sıralama örneği 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: B:

A: 4 1 3 4 3 C: B: for i  1 to k do C[i]  0 Döngü 1 1 2 3 4 5 1 2 3 B: for i  1 to k do C[i]  0

do C[A[ j]]  C[A[ j]] + 1 ⊳ C[i] = |{key = i}| Döngü 2 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 B: for j  1 to n do C[A[ j]]  C[A[ j]] + 1 ⊳ C[i] = |{key = i}|

do C[A[ j]]  C[A[ j]] + 1⊳ C[i] = |{key = i}| Döngü 2 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 1 B: for j  1 to n do C[A[ j]]  C[A[ j]] + 1⊳ C[i] = |{key = i}|

do C[A[ j]]  C[A[ j]] + 1⊳ C[i] = |{key = i}| Döngü 2 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 1 1 B: for j  1 to n do C[A[ j]]  C[A[ j]] + 1⊳ C[i] = |{key = i}|

do C[A[ j]]  C[A[ j]] + 1⊳ C[i] = |{key = i}| Döngü 2 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 1 2 B: for j  1 to n do C[A[ j]]  C[A[ j]] + 1⊳ C[i] = |{key = i}|

do C[A[ j]]  C[A[ j]] + 1⊳ C[i] = |{key = i}| Döngü 2 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 2 2 B: for j  1 to n do C[A[ j]]  C[A[ j]] + 1⊳ C[i] = |{key = i}|

do C[i]  C[i] + C[i–1] ⊳ C[i] = |{key  i}| Döngü 3 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 2 2 B: C': 1 1 2 2 for i  2 to k do C[i]  C[i] + C[i–1] ⊳ C[i] = |{key  i}|

do C[i]  C[i] + C[i–1] ⊳ C[i] = |{key  i}| Döngü 3 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 2 2 B: C': 1 1 3 2 for i  2 to k do C[i]  C[i] + C[i–1] ⊳ C[i] = |{key  i}|

do C[i]  C[i] + C[i–1] ⊳ C[i] = |{key  i}| Döngü 3 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 2 2 B: C': 1 1 3 5 for i  2 to k do C[i]  C[i] + C[i–1] ⊳ C[i] = |{key  i}|

A: 4 1 3 4 3 C: 1 1 3 5 B: 3 C': 1 1 2 5 for j  n downto 1 Döngü 4 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 1 3 5 B: 3 C': 1 1 2 5 for j  n downto 1 do B[C[A[ j]]]  A[ j] C[A[ j]]  C[A[ j]] – 1

A: 4 1 3 4 3 C: 1 1 2 5 B: 3 4 C': 1 1 2 4 for j  n downto 1 Döngü 4 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 1 2 5 B: 3 4 C': 1 1 2 4 for j  n downto 1 do B[C[A[ j]]]  A[ j] C[A[ j]]  C[A[ j]] – 1

A: 4 1 3 4 3 C: 1 1 2 4 B: 3 3 4 C': 1 1 1 4 for j  n downto 1 Döngü 4 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 1 2 4 B: 3 3 4 C': 1 1 1 4 for j  n downto 1 do B[C[A[ j]]]  A[ j] C[A[ j]]  C[A[ j]] – 1

A: 4 1 3 4 3 C: 1 1 1 4 B: 1 3 3 4 C': 1 1 4 for j  n downto 1 Döngü 4 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 1 1 4 B: 1 3 3 4 C': 1 1 4 for j  n downto 1 do B[C[A[ j]]]  A[ j] C[A[ j]]  C[A[ j]] – 1

A: 4 1 3 4 3 C: 1 1 4 B: 1 3 3 4 4 C': 1 1 3 for j  n downto 1 Döngü 4 1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: 1 1 4 B: 1 3 3 4 4 C': 1 1 3 for j  n downto 1 do B[C[A[ j]]]  A[ j] C[A[ j]]  C[A[ j]] – 1

(k) (n) (k) (n) (n + k) Analiz for i  1 to k do C[i]  0 for j  1 to n do C[A[ j]]  C[A[ j]] + 1 (n) for i  2 to k do C[i]  C[i] + C[i–1] (k) for j  n downto 1 do B[C[A[ j]]]  A[ j] C[A[ j]]  C[A[ j]] – 1 (n) (n + k)

Eğer k = O(n) ise işlem zamanı (n) olur. İŞLEM ZAMANI Eğer k = O(n) ise işlem zamanı (n) olur. Ama sıralama için işlem zamanı (n lg n) idi. Hata nerede? Cevap: Karşılaştırmalı sıralama için (n lg n) doğrudur. Sayarak sıralama karşılaştırmalı sıralama değil.

Dayanıklı sıralama Sayarak sıralama dayanıklı sıralamadır: yani eşit elemanların sırasını değiştirmez A: 4 1 3 B:

Sayı tabanı (Radix) sıralama Köken: Herman Hollerith, 1890 yılında genel nüfus sayımı için kart sayma makinesi (card-sorting machine) üretti Basamak basamak sıralar. Hollerith’in fikri (kötü fikir): sıralamaya en önemli basamaktan başlar. İyi fikir: Sıralamaya birler basamağından başlar ve yardımcı dayanıklı sıralama algoritması kullanır.

Her sütuna bir karakter yazılır. “Modern” IBM kartı Her sütuna bir karakter yazılır.

Sayı tabanlı sıralama 3 2 9 4 5 7 6 5 7 8 3 9 4 3 6 7 2 0 3 5 5 7 2 0 3 5 5 4 3 6 4 5 7 6 5 7 3 2 9 8 3 9 7 2 0 3 2 9 4 3 6 8 3 9 3 5 5 4 5 7 6 5 7 3 2 9 3 5 5 4 3 6 4 5 7 6 5 7 7 2 0 8 3 9

Basamaklara göre tümevarım Farz edelim ilk t – 1 basamak sıralıdır Neden doğru çalışır? Basamaklara göre tümevarım Farz edelim ilk t – 1 basamak sıralıdır t ye göre sıralıyalım 7 2 0 3 2 9 4 3 6 8 3 9 3 5 5 4 5 7 6 5 7 3 2 9 3 5 5 4 3 6 4 5 7 6 5 7 7 2 0 8 3 9

Basamaklara göre tümevarım İlk t – 1basamak sıralı olsun Neden doğru çalışır? Basamaklara göre tümevarım İlk t – 1basamak sıralı olsun t ye göre sıralayalım 7 2 0 3 2 9 4 3 6 8 3 9 3 5 5 4 5 7 6 5 7 3 2 9 3 5 5 4 3 6 4 5 7 6 5 7 7 2 0 8 3 9 t basamağında farklı olan 2 sayı doğru sıralanmış olur

Basamaklara göre sıralama İlk t – 1 basamak doğru sıralanmış olsun. Neden doğru çalışır? Basamaklara göre sıralama İlk t – 1 basamak doğru sıralanmış olsun. t ye göre sıralayalım 7 2 0 3 2 9 4 3 6 8 3 9 3 5 5 4 5 7 6 5 7 3 2 9 3 5 5 4 3 6 4 5 7 6 5 7 7 2 0 8 3 9 t basamağı farklı olan 2 sayı doğru sıralanmış olur . Eşit olanlar ise girişteki gibidir  doğru sıralanmıştır

Yardımcı sıralama olarak sayarak sıralama kullanalım . İŞLEM ZAMANI ANALİZİ Yardımcı sıralama olarak sayarak sıralama kullanalım . Her basamakta (n + 9) zaman geçer, d basamak varsa d(n + 9)= (dn )

Hatırlatma: Karakter dizisi arama brute force desen: metin içinde m karakterli dizi aranıyor metin: (uzun) n karakterli bir dizi Brute force algoritması Adım 1 Deseni metnin başına yerleştir Adım 2 Soldan sağa desenin her karakterini metnin uygun karakteri ile karşılaştır, desen bulunduysa çık Adım 3 Desen bulunmadığı sürece metin bitene kadardeseni bir sağa kaydır ve adım 2 ye geç

ÖN İŞLEM YAPMAKLA KARAKTER DİZİSİ ARAMA Bazı karatakter dizisi arama algoritmaları desen ve metin kullanılarak ön işlem yapmak ve bu işlemlerin sonucunu hafızada tutmak üzere tasarlanmıştır Knuth-Morris-Pratt (KMP) algoritması deseni soldan sağa tarayarak arama için yararlı bir bilgi toplar ve hafızada tutar Boyer -Moore algoritması deseni saüdan sola tarar ve bilgiti 2 tabloda tutar Horspool algoritması Boyer-Moore algoritmasının basitleştirilmiş versiyonudur sadece 1 tablo kullanır

Horspool Algoritması Desen üzerinde ön işlem yaparak bir kaydırma (shift) tablosu yaratılır, bu tablodaki sayılar karakterler arasında eşleşme olmadığı durumda desenin ne kadar kaydırılması gerektiğini göstermektedir Kaydırma tablosu için metindeki her c karakteri desenin son karakteri ile karşılaştırılır

Ne kadar kaydırmak gerekir? Metinde desenle eşleşebilecek ilk (desen uzunluğuna göre en sağdaki) karakter için olası durumlar: Karakter desende yok .....c...................... (c desende yok) BAOBAB Karakter desende var (ama eşleşme yok) .....O...................... (O desende bir kere var) BAOBAB .....A...................... (A desende 2 kez var) Eşleşme gerçekleşmiş olabilir .....B......................

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Kaydırma tablosu Metindeki c karakteri desende varsa bu karakterin, desenin sağdan ilk m-1 karakteri arasında kaçıncı olduğu bulunur Aksi durumda kaydırma sayısı bu karakter için m dir. Desen arama işlemi yapılmadan önce metindeki tüm karakterler için kaydırma tablosu Örneğin, BAOBAB deseni için kaydırma tablosu A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 6 6 6 6 6 6 6 6 6 6 6 6 3 6 6 6 6 6 6 6 6 6 6 6

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Örnek A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 6 6 6 6 6 6 6 6 6 6 6 6 3 6 6 6 6 6 6 6 6 6 6 6 _ 6 BARD LOVED BANANAS BAOBAB BAOBAB (başarısız arama)