Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Greedy Algorithms. Açgözlü(Greedy) yaklaşım Dinamik programlama tekniği gibi optimizasyon sorularına uygulanır Uygulanması çok daha kolay bir yaklaşımdır.

Benzer bir sunumlar


... konulu sunumlar: "Greedy Algorithms. Açgözlü(Greedy) yaklaşım Dinamik programlama tekniği gibi optimizasyon sorularına uygulanır Uygulanması çok daha kolay bir yaklaşımdır."— Sunum transkripti:

1 Greedy Algorithms

2 Açgözlü(Greedy) yaklaşım Dinamik programlama tekniği gibi optimizasyon sorularına uygulanır Uygulanması çok daha kolay bir yaklaşımdır Problem optimallık prensibini sağlamalıdır (DP gibi). Problemin aynı zamanda greedy-seçim özelliği olmalıdır. Her adımda o adımda en iyi görünen elemanı seçiyoruz (yerel optimal seçim) – yerel optimal seçim yaparak global optimal çözümü bulacağımızı umut ediyoruz

3 3 -3 Açgözlü yaklaşım Bir problemin ardışık kararlar dizisi sonucu çözülebileceğini varsayalım. Açgözlü yaklaşım şudur: her adımdaki karar o adım için en iyi karardır(yerel optimaldir). Bu yerel optimal çözümler sonuçta global optimal çözümü(asıl problemin çözümünü) oluşturuyorlar. Çok az sayıda optimizasyon problemine açgözlü yaklaşım uygulanabilir.

4 3 -4 Basit bir örnek Problem: n sayı arasından toplamları en çok olan k sayı bulunuz. Algorithm: for i = 1 to k dizideki en büyük sayıyı al aldığın sayıyı diziden sil.

5 3 -5 Özel bir çizgede en kısa yol problemi Problem: Aşağıdaki çizgede v 0 dan v 3 e olan en kısa yolu bulunuz greedy yöntem bu problemi çözer. En kısa yol: = 7.

6 3 -6 Çok kademeli bir çizgede en kısa yol Problem: Aşağıdaki çok kademeli çizgede v 0 dan v 3 e olan en kısa yolu bulunuz Greedy method: v 0 v 1,2 v 2,1 v 3 = 23 Optimal: v 0 v 1,1 v 2,2 v 3 = 7 The greedy method does not work.

7 3 -7 Problemin çözümü d min (i,j): i ve j arasındaki en kısa uzaklık olsun. Problem dinamik programlama yöntemiyle çözülebilir.

8 3 -8 Etkinlik seçimi problemi Problem: n etkinlik var, S = {1, 2, …, n}, her i etkinliğinin başlangıç zamanı s i ve bitiş zamanı f i, s i  f i var. i etkinliği [s i, f i ] zaman aralığında yapılıyor. i ve j etkinlikleri için s i  f j veya s j  f i ise bu etkinlikler uyumludur denir. Eleman sayısı maksimum ve tüm elemanları ikişerli uyumlu olan etkinlikler kümesi aranıyor.

9 3 -9 Örnek: Çözüm kümesi = {1, 4, 8, 11} Algorithm: Başlangıçta çözüm kümesi boş küme olsun Adım 1: Bitiş zamanları f i dizisini küçükten büyüğe doğru sırala, sıralama sonrası f 1  f 2  f 3  …  f n. Adım 2: Çözüm kümesinde bulunan tüm etkinliklerle uyumlu olan sıradaki i etkinliğini çözüm kümesine ekle. Adım 3: Bakılmamış etkinlik kalmadıysa dur. Aksi durumda, Adım 2 ye git. İşlem zamanı: O(nlogn) i sisi fifi

10 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.

11 3 -11 Örneğin adım adım çözümü: Solution = {1, 4, 8, 11} isisi fifi Kabul 114Evet 235Hayır Evet 538Hayır 7610Hayır 8811Evet 9812Hayır 10213Hayır Evet

12 3 -12 Son teslim tarihleri bulunan işler Problem: n iş var, S={1, 2, …, n}, her i işinin son teslim tarihi d i  0 ve getirisi p i  0 veriliyor. Her işi bir birimlik zaman diliminde yapabiliyoruz ve bir işi teslim etmeden başka işi yapamıyoruz. i işini son teslim tarihinden önce teslim etmeden p i getirisini kazanamıyoruz. Amac en çok para kazanmaktır. Optimal çözüm= {1, 2, 4}. Toplam kazanç= = 40. i12345 pipi didi 22133

13 3 -13 Algorithm: Başlangıçta çözüm kümesi boştur Adım 1: Getiriler p i dizisini artmayan biçimde sırala. Sıralama sonrası p 1  p 2  p 3  …  p n. Adım 2: Son teslim tarihi geçmemiş sıradaki i işini al ve [r-1, r] zaman aralığında yapmayı planla. Burada r sayısı 1  r  d i koşulunu sağlayan ve [r-1, r] zaman aralığının boş olduğu en büyük r tam sayısıdır. (Tabii eğer bu koşula uyan r sayısı varsa) Adım 3: Tüm işlere bakılmışsa dur. Aksi durumda 2. adıma geç. İşlem zamanı: O(n 2 )

14 3 -14 Örnek. Çözüm kümesi = {1, 2, 4} Toplam kazanç = = 40 ipipi didi 1202[1, 2] aralığını seç 2152[0, 1] aralığını seç 3101reddet 453[2, 3] aralığını seç 513reddet

15 Sırt Çantası( Knapsack) Problemi Ünlü sırt çantası problemi: – Hırsız bir muzeye giriyor. Her tarafta resimler, heykeller ve mücevherler var. Hırsızın çok iyi gözleri vardır, bakar bakmaz bu nesnelerin ne kadar para edeceklerini görüyor. Ayrıca ağırlıklarını da hesaplayabiliyor. Hırsızın belirli bir kapasitesi olan sadece bir çantası vardır. Bu hırsızın çok para kazanabilmesi için hangi nesneleri seçmesi gerekir?

16 3 -16 Sırt çantası problemi n nesne var, ağırlıkları w i > 0 fiyatları p i > 0 çanta kapasitesi: M maksimize et 0  x i  1, 1  i  n

17 3 -17 Sırt çantası problemi algoritma: Açgözlü algotitma: Adım 1: p i /w i sayılarını artmayacak biçimde sırala Adım 2: Sıralı dizye göre çantanın alabileceği sıradaki nesneyi (veya sonuncu ise çantaya yerleşebilecek parçasını) çantaya koy. n = 3, M = 20, (p 1, p 2, p 3 ) = (25, 24, 15) (w 1, w 2, w 3 ) = (18, 15, 10) Sol: p 1 /w 1 = 25/18 = 1.32 p 2 /w 2 = 24/15 = 1.6 p 3 /w 3 = 15/10 = 1.5 Optimal çözüm: x 1 = 0, x 2 = 1, x 3 = 1/2 toplam kazanç = = 31.5

18 0-1 sırt çantası problemi Sırt çantasının kapasitesi W ve S kümesi veriliyor (bu kümede n nesne vardır) Her i nesnesinin ağırlığı w i ve kazancı b i ( w i, b i ve W pozitif tam sayılardır) Problem: Hangi nesneleri seçelim ki kazanç en fazla olsun? Diğer problemden farkı: Nesneleri bölemiyoruz

19 0-1 Sırt çantası problemi: W = 20 wiwi bibi AğırlıkDeğer Çanta Max ağırlık: W = 20 Items

20 Sırt çantası problemi 0-1 sırt çantası problemi: – Hırsız n tane nesne arasından bazılarını seçmelidir, burada i. nesnenin değeri b i ve ağırlığı w i – Çanta kapasitesi W Not: b i, w i, ve W tam sayılardır “0-1” anlamı: bir nesneyi ya bütün olarak alacak, ya da hiç alamayacak kesirli sırt çantası problemi: – Hırsız nesnelerin bir parçasını da alabilir

21 0-1 Sırt çantası problemi

22 0-1 Sırt çantası problemi: brute-force yaklaşım Aklımıza gelen ilk algoritmayla çözersek: n nesne var, 2 n durum Her durum için değerleri hesapla, koşulu sağlayanlar arasından toplam değeri en büyük olanı bul İşlem zamanı O(2 n )

23 Sırt çantası problemi Kesirli problem açgözlü yaklaşımla yapılır – Nasıl? 0-1 problemi ise açgözlü yaklaşımla yapılamaz – Açgözlü: değer/ağırlık en fazla olanı al – Örnek: 3 nesnenin ağırlıkları 10, 20, ve 30 kg, çanta kapasitesi 50 kg olsun Nesne değerleri 60, 100, 120 lira olsun. Açgözlü algoritmaya göre önce 1. sonra da 2. nesne alınacak, yani 160 lira kazanç olur. Oysa 2. ve 3. nesneleri alırsa 220 lira kazanır

24 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.

25 0-1 problemi Açgözlü yaklaşım çalışmadı. Brute Force kötü. Daha iyisi var mı? Var, dinamik programlama yöntemi Sadece altproblemi dikkatli tanımlamak gerekir Altproblemi tanımlamaya çalışalım: Nesne numaraları 1..n olsun. Altproblem: S k = {1, 2,.. k} numaralı nesneler arasından optimal olanları seç

26 Altproblemin tanımı Nesne numaraları 1..n olsun. Altproblem: S k = {1, 2,.. k} numaralı nesneler arasından optimal olanları seç Bu altproblem tanımı doğru gibi ama. Soru şu: Asıl problem olan (S n ) in çözümünü (S k ) cinsinden yazabilir miyiz? Ne yazık ki, hayır….

27 Altproblem tanımı Max ağırlık: W = 20 S 4 için: Toplam ağırlık: 14; Toplam kazanç: 20 w 1 =2 b 1 =3 w 2 =3 b 2 =4 w 3 =4 b 3 =5 w 4 =5 b 4 =8 wiwi bibi AğırlıkDeğer 9 Nesne # S4S4 S5S5 w 1 =2 b 1 =3 w 3 =4 b 3 =5 w 4 =5 b 4 =8 w 5 =9 b 5 =10 S 5 için: Toplam ağırlık: 20 Toplam kazanç: 26 S 4 için çözüm S 5 için çözümün altparçası değil!!! ?

28 Altproblem tanımı (devamı) Görüldüğü gibi S 4 için olan çözüm S 5 için olan çözümün altparçası değil Bunun anlamı şudur: altproblemi iyi tanımlamadık ve başka bir tanıma gereksinim vardır! Yeni bir parametre dahil edelim: w<=W parametresi çantanın değişken kapasitesini göstermektedir. Bu parametreyi 0 dan W ya kadar artırarak B[k,w] yi hesaplayacağız.

29 Altproblem için özyinelemeli formül Anlamı şudur: ilk k tane nesneden oluşan S k kümesinin kapasitesi w olan çanta için en iyi altkümesi 2 sinden biri olur: 1) Ya S k-1 kümesinin kapasitesi w olan çanta için en iyi altkümesidir, 2) Ya da S k-1 kümesinin kapasitesi w-w k olan çanta için en iyi altkümesine k nesnesinin eklenmişidir n Formül:

30 Özyinelemeli formül S k kümesinin kapasitesi w olan çanta için en iyi altkümesi, k. nesneyi içerebilir veya içermez 1. durum: w k >w ise k. nesne çözümün içinde olamaz, bu nesne kapasitesi w olan çantaya giremez. 2. durum: w k <=w ise k. nesne çözümde ola da bilir, olamaya da bilir, büyük olanı alırız

31 0-1 Sırt Çantası Algoritması for w = 0 to W B[0,w] = 0 for i = 0 to n B[i,0] = 0 for w = 0 to W if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w

32 İşlem zamanı for w = 0 to W B[0,w] = 0 for i = 0 to n B[i,0] = 0 for w = 0 to W İşlem zamanı? O(W) n defa tekrar ediyor O(n*W) brute-force algoritması O(2 n )

33 Örnek n = 4 (nesne sayısı) W = 5 (maksimum kapasite) Elemanlar (ağırlık, değer): (2,3), (3,4), (4,5), (5,6)

34 Örnek for w = 0 to W B[0,w] = W i

35 Örnek for i = 0 to n B[i,0] = W i

36 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=1 b i =3 w i =2 w=1 w-w i =-1 Nesneler: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) 4 0

37 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=1 b i =3 w i =2 w=2 w-w i =0 Items: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6) 4 0 3

38 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=1 b i =3 w i =2 w=3 w-w i =1 Items: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

39 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=1 b i =3 w i =2 w=4 w-w i =2 Items: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

40 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=1 b i =3 w i =2 w=5 w-w i =2 Items: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

41 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=2 b i =4 w i =3 w=1 w-w i =-2 Nesneler: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

42 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=2 b i =4 w i =3 w=2 w-w i =-1 Nesneler: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

43 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=2 b i =4 w i =3 w=3 w-w i =0 Nesneler: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

44 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=2 b i =4 w i =3 w=4 w-w i =1 Nesneler 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

45 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=2 b i =4 w i =3 w=5 w-w i =2 Nesneler 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

46 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=3 b i =5 w i =4 w=1..3 Nesneler: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

47 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=3 b i =5 w i =4 w=4 w- w i =0 Nesneler: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

48 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=3 b i =5 w i =4 w=5 w- w i =1 Nesneler: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

49 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=3 b i =5 w i =4 w=1..4 Nesneler: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)

50 Örnek if w i <= w // item i can be part of the solution if b i + B[i-1,w-w i ] > B[i-1,w] B[i,w] = b i + B[i-1,w- w i ] else B[i,w] = B[i-1,w] else B[i,w] = B[i-1,w] // w i > w W i i=3 b i =5 w i =4 w=5 Nesneler: 1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)


"Greedy Algorithms. Açgözlü(Greedy) yaklaşım Dinamik programlama tekniği gibi optimizasyon sorularına uygulanır Uygulanması çok daha kolay bir yaklaşımdır." indir ppt

Benzer bir sunumlar


Google Reklamları