Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

MIT503 Veri Yapıları ve algoritmalar Sıralama algoritmaları Y. Doç. Dr. Yuriy Mishchenko.

Benzer bir sunumlar


... konulu sunumlar: "MIT503 Veri Yapıları ve algoritmalar Sıralama algoritmaları Y. Doç. Dr. Yuriy Mishchenko."— Sunum transkripti:

1 MIT503 Veri Yapıları ve algoritmalar Sıralama algoritmaları Y. Doç. Dr. Yuriy Mishchenko

2 Algoritma geliştirme Ders planı – Sıralama algoritmaları ve böl-ve-fethet yöntemi – Naif sıralama – seçme sıralama, ekleme sıralama, kabarcık sıralama – Hızlı sıralama (quicksort), birleşme sıralama (mergesort), hipsort (heapsort) – Özel tamsayı sıralama – sayım sıralama, kova sıralama, radix sıralama

3 Sıralama sorunu Sıralama sorunu hatırlatma – Bir sayısal dizi var, N uzunluğunda – O dizideki sayıların sıralanmış olmasını istiyoruz 152111375269226579111315

4 Naif sıralama Naif sıralama algoritmaları – Seçme sıralama – Ekleme sıralama – Kabarcık sıralama

5 Seçme sıralama Ana fikri – Çıktı dizisinin birinci pozisyonu için verilen dizideki en küçük sayıyı bulup çıktının 1. pozısyonuna koyuyoruz – Çıktı dizisinin ikinci pozisyonu için verilen dizideki en küçük kalan sayıyı bulup çıktının 2. pozısyonuna koyuyoruz – Üçüncü pozısyon için, verilen dizideki en küçük kalan sayısını bulup tekrar çıktının 3. pozısyonuna koyuyoruz – v.b.

6 Seçme sıralama 152111375269x birinci buraya bakın en küçük 215111375269x ikinci yeni en küçük 221315117569x üçüncü yeni en küçük 221551311769x dördüncü yeni en küçük

7 Seçme sıralama Seçme sıralama sözde kodu sonuç:=boş dizi p:=giriş dizi p boş değil iken a:=p’deki min nesne seçin; sonuç:=(sonuç, a); p’den a’yı çıkartın; döngü sonu yaz sonuç p’dan a’yı çıkartın a:=p’den min nesne seçin yaz p başlangıç bitiş yok Sonuca a’yı ekleyin p’de kalan nesneler var? var

8 Seçme sıralama Seçme sıralamada, bütün kalan diziyi tekrar tekrar incelememiz lazım İlk pozısyon için, N sayı incelememiz lazim İkinci pozısyon için, N-1 sayı incelememiz lazim Üçüncü pozısyon için, N-2 sayı incelememiz lazim vb Toplam, N(N-1)/2=O(N 2 ) operasyon yapıyoruz

9 Ekleme sıralama Ana fikri – Sonucu sıralanmış şekilde baştan oluşturuyoruz – Bunun için, verilen diziden bir sayı alırken o sayıyı her zaman sonuca doğru bir pozisyona ekliyoruz (ama bunun için ikiye bölme kullanmıyoruz) – Doğru pozisyonu bulmak için bütün var olan çıktı dizisini tekrar tekrar incelememiz lazım

10 Ekleme sıralama Naif sıralama: ekleme sıralama 152111375269x15x girdi sonuç 152111375269x215x girdi sonuç 152111375269x2 15x girdi sonuç 152111375269x2111513x girdi sonuç

11 Ekleme sıralama Seçme sıralama sonuç:=boş dizi p:=giriş dizi p boş değil iken a:=p’den birinci nesne alin i:=0 döngü // doğru pozisiyonu bul i:=i+1 döngü (sonuç[i]>a) iken a, sonucun i-1 pozisiyonuna ekleyin p’den a’yı çıkartın döngü sonu yaz sonuç p’dan a’yı çıkartın a:=p’den ilk nesne seçin yaz p başlangıç bitiş yok a, sonucun i-1 pozisiyonuna ekle p’de nesneler var? var sonuç[i]>a hair evet i=i+1

12 Ekleme sıralama Ekleme sıralamada, doğru pozisyonu bulmak için bütün çıktı dızısını incelememiz gerekiyor Bu nedenle, bu algoritma için ortalama N(N-1)/2=O(N 2 ) operasyon gerekiyor Girdi olarak neredeyse sıralanmış dizi varsa, çok hızlı algoritma olabilir (bu durumda daha avantajlı algoritmadır)

13 Kabarcık sıralama Kabarcık sıralama, çok popüler algoritmadır ve her zaman “algoritmalar” derslerinde verilir Ana fikri – Diziyi inceliyoruz – Bir yanlış sırada çift varsa, yani soldaki sayı sağdaki sayı’dan daha büyükse, çiftteki sayıların pozısyonlarını değiştiriyoruz – Sonra var olan diziyi tekrar inceliyoruz, bu şekilde devam ediyoruz

14 Kabarcık sıralama Naif sıralama: kabarcık sıralama 152111375269x girdi 215111375269x girdi 213111575269x girdi 213151175269x girdi 211151375269x girdi 211713155269x girdi

15 Kabarcık sıralama Naif sıralama: kabarcık sıralama 152111375269x215111375269x2 111575269x213151175269x2 151375269x211713155269x kabarcık – üstüne gidiyor girdi

16 Kabarcık sıralama Kabarcık sıralama p:=giriş_dizi döngü i:=0 p[i] { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.biz.tr/10/2788640/slides/slide_16.jpg", "name": "Kabarcık sıralama Kabarcık sıralama p:=giriş_dizi döngü i:=0 p[i]

17 Kabarcık sıralama Kabarcık sıralama, ortalama tekrar O(N 2 ) operasyon gerekiyor Girdi olarak neredeyse sıralanmış dizi varsa, tekrar onu hızlı sıralayabilir ve avantajlı algoritmadır

18 Naif sıralama: özet Naif sıralama algoritmalar – Seçme sıralama – O(N 2 ) – Ekleme sıralama – O(N 2 ) – Kabarcık sıralama – O(N 2 ) Naif sıralama algoritmalarının hepsi O(N 2 ) dır

19 Böl-ve-fethet sıralama Hızlı sıralama algoritmaları – Hızlı sıralama (quicksort) – Birleşme sıralama (mergesort)

20 Hızlı sıralama (quicksort) Ana fikri – Naif sıralama algoritması var, O(N 2 ) algoritmasıdır – Dizide bir sayı seçelim ( “pivot” denir), A – A’dan küçük sayıların hepsini sola koyalım, büyükleri sağa koyalım – Soldaki ve sağdaki sayılar ayrı olarak sıralayalım, sonra şöyle sıralanmış altdizileri birleştirelim (kolay çünkü soldakiler hepsi A – yan yana konulması yeterlidir!)

21 Hızlı sıralama (quicksort) Ana fikri – Sol dizi sadece A’dan daha küçük sayıları ve sağ dizi sadece A’dan daha büyük sayıları içerdiği için sol sıralanmış dizi solda sağ sıralanmış dizi sağda koyup hemen sıralanmış sonucu alıyoruz – Pivot olarak genellikle dizinin ortasındanki sayı seçilir

22 Hızlı sıralama (quicksort) Zaman analizi: – Eğer altdizilerin sıralama naif olarak yapılırsa, toplam ortalama sıralama zamanı 2(N/2) 2 + 1 ≈ N 2 /2 – Yani zaten bu iki kat daha hızlı (ilginç değil mi)!

23 Hızlı sıralama (quicksort) Zaman analizi: – Dolayısıyla, altdizileri sıralamak için aynı ikiye bölme yöntemi kullanalım, ve sayre – Sonuçta bu ikiye bölme yaklaşımı sona kadar kullanılırsa ortalama sıralama zamanı O(N log N) olmaktadır – Bu daha sonra konuşacağımız genel böl-ve-fethet algoritma yaklaşımının örneği dir

24 quicksort Quicksort sıralama 152111375269x girdi pivot 226571513119x bölme 226579111315x sol/sağdaki sıralama 226579111315x toplama sıralanmış çıktı... yeni sıralayın; tekrar quicksort kullanın sol dizisağ dizi yeni sıralayın; tekrar quicksort kullanın

25 quicksort quicksort p:=giriş dizi A:=p[orta] sol_dizi=boş dizi sağ_dizi=boş dizi döngü i=0’dan p’nin boyutuna kadar eğer p[i]sol [sol;sağ] başlangıç bitiş hair i++sağ sol=quicksort(sol); sağ=quicksort(sağ);

26 quicksort Quicksort sıralama için ortalama olarak O(N log N) zamandır gerekiyor FAKAT, kötü pivot seçtiği ile O(N 2 ) zamana düşebilir

27 mergesort Ana fikri – Naif sıralama algoritması var, O(N 2 ) algoritmasıdır – Quicksort’e benzeyen, ama sol ve sağ diziler için orijinal dizisini ortasından bölüyoruz, yani “pivot” kullanılmıyor – Sol ve sağ parçaları ayrı ayrı sıralanır, ama daha sonra biraz (çok az) daha karmaşık şekilde geri birleştirilir

28 mergesort Ana fikri – Sol ve sağdaki dizilerde hem küçük hem büyük sayılar olabilir – Dolayısıyla sol ve sağ dizilerin birleştirmek için yan yana koymak yeterli değildir – Fakat şu lineer-zaman yaklaşım kullanılabilir

29 mergesort Mergesort toplama algoritması: – Sağ ve sol altdizisinde soldan sağa giderken iki altdizisinden daha büyük olanı sonuç diziye ekliyoruz

30 mergesort 25117171315182330 Daha küçük İşaretçi

31 mergesort 25117171315182330 Daha küçük 2 Soldan sağa ilerliyor

32 mergesort 25117171315182330 Daha küçük 25

33 mergesort 25117171315182330 Daha küçük 257

34 mergesort 25117171315182330 Daha küçük 25711

35 mergesort 25117171315182330 Daha küçük 2571113 Sonuç sıralanmış şekilde toplanır

36 mergesort 25117171315182330 Daha küçük 257111315

37 mergesort 25117171315182330 25711131517182330

38 mergesort Quicksort sıralamanın tek adımla zaman kazanması şudur – Altsıralama zamanı – 2(N/2) 2 – Birleştirme zamanı N – Toplam zamanı 2(N/2) 2 +N – Yani, çok iyi

39 mergesort Quicksort sıralama yeni O(N log N) zamanda yapılabilir, fakat burada en kötü durumun zamanı da O(N 2 ) zamandır ! Mergesort sıralama, ortalama ve en kötü durumunda O(N log N) operasyon gerekiyor Bu şekilde mergesoft optimal sıralama algoritmasıdır

40 heapsort Bir daha O(N log N) önemli sıralama algoritması var – heapsort (hipsort) algoritması Heapsort, böl-ve-fethet algoritması değildir, aslında “ekleme sıralama” algoritmalarından biridir

41 heapsort Naif ekleme sıralamasında vakit gereksinimi O(N 2 ) idi, ama... Ekleme operasyonunu daha akıllı şekilde yapacaksak daha verimli algoritma sağlanabilir – Ekleme ikiye bölme algoritması yada arama ağaçları kullanarak yapılırsa... – Ekleme işlemi O(log N) zamandır gerekir ve... – Dizi sıralama O(N log N) zamanda yapılacaktır

42 Sıralama Algoritmaları (Böl-ve-Fethet) Naif sıralama algoritmaları – Seçme sıralama – O(N 2 ) – Ekleme sıralama – O(N 2 ) – Kabarcık sıralama – O(N 2 ) Böl-ve-fethet sıralama algoritmaları – Quicksort sıralama – O(N log N) – Mergesort sıralama – O(N log N) Sıralanmış veri yapıları algoritmaları – Heapsort sıralama – O(N log N)

43 Özel sıralama konuları Tamsayı sayım, kova ve radix özel sıralama algoritmaları var O(N) (yani lineer) zaman algoritmalardır Veritabanları için önemli algoritmalardır Veritabanlarının indeksleri çoğunlukla tamsayılar olduğu için, bu algortima çok avantajlı gelir

44 Sayım sıralama Ana fikri – Sayım sıralamada, orijinal dizideki tamsayılar sıralı şekilde incelenir ve o sayıların kaç kez karşılandığı takip edilir – Tüm dizi incelenince, bunlardan sonuç sıralanmış dizi oluşturulur

45 Sayım sıralama 15271375269 Karşılandığı sayı: "2" – 2 kez; "5" – 1 kez; "6" – 1 kez; "7" – 2 kez; "9" – 1 kez; "13" – 1 kez; "15" – 1 kez; Sonuç == (2,2,5,6,7,7,9,13,15) Bitti ! inceleme

46 Sayım sıralama Sayım sıralama algoritması sayım:=boş dizi;// sayıların sayımları döngü i=0’dan p’nin uzunluguna kadar sayım[p[i]]:=sayım[p[i]]+1;// bütün sayılar için karşılandığı kezi not et döngü sonu sonuç:=boş dizi;// sonuç döngü {"k" sayım’daki var olan indeksler için, en küçükten en büyüğe kadar} “k” sayı sonuç'a “sayım[k]” defa ekle; döngü sonu yaz p

47 Kova sıralama Kova sıralama, sayım sıralamaya benzeyen bir yaklaşım Dizide N sayı varsa, dizinin sayı aralığını N altaralığı/kovaya bölüyoruz, sonra... Sayım sıralamada gibi, dizi sırayla inceliyoruz ve sayılar karşılık gelen kovaya ekliyoruz Kovalardaki sayıları ayrı ayrı sıralanır ve kovaların sırasına göre sonuca birleştirilir

48 Kova sıralama Ortalama, kovalar tek sayı içeriyor olacak (yani N sayı N kovaya bölünür), bu nedenle kova sıralama ortalama O(N) vakit gerekmektedir

49 Kova sıralama Kova sıralama n:=p’nin boyutu kova:=n boş diziler;// n tane “kova” hazırlayın, kovaların hepsi // min(p) ve max(p) aralığının bir parçasıdır döngü i=0’dan n’ya kadar k:=p[i]’nin kovası// sayıları karşılık gelen kovalara dağıtın p[i]->kova[k]// p[i] sayıyı karşılık gelen kovaya koyun döngü sonu döngü k=0’dan n’ya kadar kova[k]:=sırala(kova[k]) // kovadaki sayıları sıralayın döngü sonu sonuç:=boş dizi döngü k=0’dan n’ya kadar kova[k] -> sonuç // kovaları, sırasına göre sonuca toplayın döngü sonu yaz sonuç

50 Radix sıralama Radix sıralama (basamak sıralaması) da bir tamsayı sıralama algoritmasıdır Radix sıralamada, tamsayılar birkaç geçişte önce birinci basamaklarına göre sıralanıyor, sonra ikinci basamaklarına göre sıralanıyor, VB Her bir geçiş sayım sıralama kullanarak yapılıyor – lineer zamanda

51 Radix sıralama Radix sıralama O(KN) vakit gerekiyor, eğer K tamsayıların maksimum uzunluğu

52 Radix sıralama İki tür var: “en anlamlı basamağa göre” ve “en anlamsız basamağa göre” türüleri var, bunlar tabi ya ilk yada son basamakla başlayan radix sıralama algoritmalardır

53 ilave sıralama konuları: radix sıralama Radix sıralama: 150211130705020609 girdi 020702050609151311 Birinci geçiş 02 06050709111315 İkinci geçiş birinci bölümikinci bölüm

54 Özet Naif sıralama algoritmaları – Seçme sıralama – O(N 2 ) – Ekleme sıralama – O(N 2 ) – Kabarcık sıralama – O(N 2 ) Böl-ve-fethet sıralama algoritmaları – Quicksort sıralama – O(N log N) – Mergesort sıralama – O(N log N) Heapsort sıralama algoritması – İkiye bölme ekleme sıralama algoritması O(N log N)

55 Özet Tamsayı sıralama algoritmaları – Sayım sıralama – Kova sıralama – Radix sıralama Tamsayılar O(N) zamanda sıralanabilir Veritabanları düzenlemesi için önemli avantajıdır

56 Böl-ve-fethet yaklaşımı Böl-ve-fethet yaklaşımı, bügün gördüğümüz algoritma geliştirme bir esas genel yöntemidir

57 Böl-ve-fethet yaklaşımı Böl-ve-fethet yaklaşımı, “kötü” yada “süperlineer zaman” bir algoritma varsa, uygulanabilir Sorun birkaç altsorununa bölünür ve altsorunları ayrı ayrı "süperlineer zaman" yaklaşım yapılır Bu algoritmanın süperlineer olduğundan dolayı böyle strateji ile avantaj kazanılır

58 Böl-ve-fethet yaklaşımı Böl-ve-fethet’in ana fikri: Bir sorun için bir algoritma var Bu algoritma “kötü”, yani “N” büyüklüğınde olan sorunlar için N 2 yada daha çok zaman gerektiriyor (örneğin–naif sıralama) Böyle durumlarda, süperlineer zaman algoritmanın var olduğunu diyoruz

59 Böl-ve-fethet yaklaşımı Böl-ve-fethet’in ana fikri: N büyüklüğünde olan sorundan birkaç yeni benzer daha küçük (örneğin 2 N/2-altdizi sıralanması) altsorununu yapıyoruz ve bunları orijinal algoritmayı kullanıyoruz

60 Böl-ve-fethet yaklaşımı Böl-ve-fethet yaklaşımının kullanılabilmesi için şöyle koşullar doğru olması lazım: 1.Problem çözme algoritma süperlineer olması lazım; 2.Orijinal problem altproblemlerine bölünebilmesi lazım; 3.Altproglemler orijnal probleme benziyor olması, yani aynı algoritma ile yapılabilmesi lazım; 4.Orijnal problemin çözümü altproblemlerinin çözümlerinden verimli olarak bulunabilmesi lazım.

61 Böl-ve-fethet yaklaşımı Baze önemli kavramlar: Problem çözme zaman gereksinimi, büyük N boyutta olan problemler için gereken çözme zamanı süperlineer, Ta(N)=O(N k ) Altsonuçları birleştirme zaman gereksinimi, büyük N boyutta olan problemler için altsonuçları sonuca birleştirmek için gereken zaman – Tt(N)=O(N) (genellikle lineer)

62 Böl-ve-fethet yaklaşımı Toplam vakit gereksinimi bu durumda şöyledir – 2*Ta(N/2)+Tt(N) EĞER Ta(N/2)+ Ta(N/2)+Tt(N) < Ta(N) İSE, böl-ve- fethet yaklaşımı avantajlı görünüyor

63 Böl-ve-fethet yaklaşımı Böl-ve-fethet yöntemin ünlü uygulamaları: Hızlı Fourier Dönüşümü – Pratik uygulamalarda çok kullanılan, zaman sinyalinin frekansları hesaplama algoritmasıdır (frekans-dönüşümü) – Naif algoritma O(N 2 ) zamandır – Böl-ve-fethet algoritma O(N log N) zamandır Sıralam – Sıralama naif algoritması O(N 2 ) zamandır – Böl-ve-fethet algoritma O(N log N) zamandır


"MIT503 Veri Yapıları ve algoritmalar Sıralama algoritmaları Y. Doç. Dr. Yuriy Mishchenko." indir ppt

Benzer bir sunumlar


Google Reklamları