Chapter 3 Brute Force Copyright 2007 Pearson AddisonWesley
Chapter 3 Brute Force Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
Kaba Kuvvet Problemin tanımınına dayanan direk yaklaşım Örnekler: 1. an (a > 0, n negatif olamayan bir tamsayıdır) hesaplama 2. n! Sayısını hesaplama 3. 2 matrisin çarpımı 4. Listede verilen değeri arama
Kaba kuvvet sıralama algoritması Seçmeli sıralama Dizideki en küçük elemanı seç ve ilk elemanla değiştir. Sonra 2. elemandan başla, en küçük elemanı bul ve 2. elemanla değiştir. Genel olarak, i. (0 i n-2) geçişte A[i. . n-1] dizisinin en küçük elemanını bul ve A[i] ile değiştir: A[0] . . . A[i-1] | A[i], . . . , A[min], . . . , A[n-1] Example: 7 3 2 5
Seçmeli Sıralama (Selection Sort) • Selection. Sort(A, n) • for i← 1 to n-1 • min←i • for j←i+1 to n • if (A[j]<A[min]) • then min←j • A[i]↔A[min] • Bu algoritmanın işlem süresi θ(n 2) dir.
Dizgi Eşleme (String Matching) • Desen (pattern): m karakterden oluşan ve aranan dizgi (string) • metin (text): n karakterden oluşan ve içinde arama yapılan uzun bir dizgi(string) • problem: metinde desenle eşleşen tüm bir dizgiyi bulmak Kaba kuvvet algoritması Adım 1 deseni metnin en başına yerleştir Adım 2 Soldan sağa giderek desenin her karakterini metnin uygun karakteri ile • • Tüm karakterler eşleşene (başarılı arama); veya Eşleşme başarısız olana kadar karşılaştır Adım 3 Desen bulunmadığı ve metin tükenmediği sürece deseni bir karakter sağa kaydır ve adım 2 ye git
Örnekler 1. Desen: 001011 Metin: 1001010110100101111010 2. Desen: happy Metin: It is never too late to have a happy childhood.
Dizge Eşleme • Brute. Force. String. Matching(T, n, P, m) • for i← 1 to n-m+1 • j← 1 • while j<=m and P[j]=T[i+j-1] • j←j+1 • if j=m+1 • then return i • return -1
Kaba kuvvet polinom hesabı Problem: Aşağıdaki polinomun p(x) = anxn + an-1 xn-1 +… + a 1 x 1 + a 0 x = x 0 noktasındaki değerini hesapla Brute-force algorithm p 0. 0 for i n downto 0 power 1 for j 1 to i //compute xi power x p p + a[i] power return p Zaman analizi: θ(n 2)
Polynomial Hesabı: İyileştirme Sağdan sola yaparak iyileştirebiliriz: Better algorithm p brute-force a[0] power 1 for i 1 to n do power x p p + a[i] power return p Zaman analizi: θ(n)
En yakın 2 nokta problemi 2 boyutlu Kartezyen düzlemde n nokta veriliyor. Birbirine uzaklığı en yakın olan 2 noktayı bulunuz. Brute-force algoritması Her hangi 2 nokta arasındaki uzaklığı hesapla ve uzaklıkları en az olan 2 noktanın indislerini geri gönder.
En yakın 2 nokta kaba kuvvet Algoritması zaman analizi:
Kaba kuvvet güçlü ve zayıf yanları • Güçlü yanları – Geniş kullanılabilirliği – Basit liği – önemli bazı problemler (matris çarpımı, sıralama, arama, dizgi eşleştirme) için kabul edilebilir algoritmaların oluşu • Zayıf yönleri – Nadiren verimli algoritmaların olması – Bazı kaba kuvvet algoritmalarının kabul edilemeyecek kadar yavaş olması – Diğer tasarım tekniklerine göre yapıcı olmaması
Yorucu arama (Exhaustive Search) Verilen bir özelliği olan bir elemanı bir küme içerisinde aramanın kaba kuvvet çözümüdür. Yöntem: – Tüm olası çözümlerin listesini oluştur – Optimizasyon problemlerinde olası çözümleri tek hesapla kötü sonuçları ele ve her defasında o ana kadarki en iyi çözümü elinde tut – Arama bittiğinde elindeki çözümü açıkla
Örnek 1: Gezgin satıcı problemi • Aralarındaki uzaklıklar verilen n şehir vardır. Her şehirde tam olarak 1 defa olmak ve harekete başlanan şehire geri dönmek koşuluyla en kısa tur yapılması istenmektedir. • Çizge kuramı dilinde: Verilen bağlantılı ağırlıklı çizgede en kısa Hamilton devresini bulunuz. 2 • Örnek: a b 8 c 5 3 7 4 d
TSP problemi yorucu arama yöntemi ile Tour a→b→c→d→a a→b→d→c→a a→c→b→d→a a→c→d→b→a a→d→b→c→a a→d→c→b→a Başka tur var mı? Zaman analizi: Cost 2+3+7+5 = 17 2+4+7+8 = 21 8+3+4+5 = 20 8+7+4+2 = 21 5+4+3+8 = 20 5+7+3+2 = 17
Örnek 2: Hırsız çantası problemi n tane eşya vardır: – ağırlıkları: w 1 w 2 … wn – değerleri: v 1 v 2 … vn – Çanta kapasitesi W Çantayı toplam değeri en fazla olan eşyalarla doldurmak gerekir Örnek: Çanta kapasitesi W=16 eşya ağırlık değer 1 2 $20 2 5 $30 3 10 $50 4 5 $10
Çanta problemi için yorucu arama Altküme {1} {2} {3} {4} {1, 2} {1, 3} {1, 4} {2, 3} {2, 4} {3, 4} {1, 2, 3} {1, 2, 4} {1, 3, 4} {2, 3, 4} {1, 2, 3, 4} Ağırlık 2 5 10 5 7 12 7 15 10 15 17 12 17 20 22 Değer $20 $30 $50 $10 $50 $70 $30 $80 $40 $60 not feasible Zaman analizi:
Örnek 3: İş Atama Problemi n kişi ve n iş vardır, her kişiye bir işi yaptırmak istiyoruz. i kişisinin j işini yapmasının maliyeti C[i, j] dir. Toplam maliyeti minimize eden atamayı yapınız. Person 0 Person 1 Person 2 Person 3 Job 0 Job 1 Job 2 Job 3 9 2 7 8 6 4 3 7 5 8 1 8 7 6 9 4 Algoritma : Tüm mümkün atamaları yap, her birinin değerini hesapla ve en ucuzunu seç. Kaç tane mümkün atama vardır?
Atama problemi için yorucu arama C= 9 2 7 8 6 4 3 7 5 8 1 8 7 6 9 4 Atama 1, 2, 3, 4 1, 2, 4, 3 1, 3, 2, 4 1, 3, 4, 2 1, 4, 2, 3 1, 4, 3, 2 Toplam değer 9+4+1+4=18 9+4+8+9=30 9+3+8+4=24 9+3+8+6=26 9+7+8+9=33 9+7+1+6=23 ve b.
Yorucu arama için yorumlar • Pratikte sadece az sayıda verilenler için işe yarayabilir • Bazı durumlarda çok da iyi çözümler vardır! – – – Euler turu problemi için En kısa yol problemi için Minimum örten ağaç problemi için Atama problemi için Hırsız çantaıs problemi için
- Slides: 20