Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
Algoritmalar II Ders 1: Alan zaman takası yöntemi
2
Chapter 7 Alan ve Zaman Takası
3
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)
4
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
5
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
6
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.
7
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.
8
İç 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.
9
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.
10
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)
11
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.
12
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
13
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) .
14
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.
16
İŞ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
17
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] .
18
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
19
Sayarak sıralama örneği
1 2 3 4 5 1 2 3 4 A: 4 1 3 4 3 C: B:
20
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
21
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}|
22
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}|
23
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}|
24
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}|
25
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}|
26
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}|
27
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}|
28
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}|
29
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
30
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
31
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
32
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
33
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
34
(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)
35
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.
36
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:
37
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.
38
Her sütuna bir karakter yazılır.
“Modern” IBM kartı Her sütuna bir karakter yazılır.
39
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
40
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
41
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
42
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
43
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 )
44
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ç
45
Ö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
46
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
47
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
48
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
49
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 _ 6 BARD LOVED BANANAS BAOBAB BAOBAB (başarısız arama)
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.