Mit503 veri yap lar ve algoritmalar algoritma geli tirme b l ve fethet yakla m
This presentation is the property of its rightful owner.
Sponsored Links
1 / 70

MIT503 Veri Yapıları ve algoritmalar Algoritma geliştirme – böl-ve-fethet yaklaşımı PowerPoint PPT Presentation


  • 269 Views
  • Uploaded on
  • Presentation posted in: General

MIT503 Veri Yapıları ve algoritmalar Algoritma geliştirme – böl-ve-fethet yaklaşımı. Y. Doç. Yuriy Mishchenko. Algoritma geliştirme. Ders planı Böl-ve-fethet genel yaklaşımı ve kavramları S ıralama sorunu ve böl-ve-fethet yaklaşımı

Download Presentation

MIT503 Veri Yapıları ve algoritmalar Algoritma geliştirme – böl-ve-fethet yaklaşımı

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Mit503 veri yap lar ve algoritmalar algoritma geli tirme b l ve fethet yakla m

MIT503 Veri Yapıları ve algoritmalarAlgoritma geliştirme– böl-ve-fethet yaklaşımı

Y. Doç. Yuriy Mishchenko


Algoritma geli tirme

Algoritma geliştirme

Ders planı

  • Böl-ve-fethet genel yaklaşımı ve kavramları

  • Sıralama sorunu ve böl-ve-fethet yaklaşımı

    • Naif sıralama algoritmaları–seçme sıralama, ekleme sıralama ve kabarcık sıralama

    • Böl-ve-fethet sıralama algoritmaları–hızlı sıralama (quicksort), birleşme sıralama (mergesort) ve hipsort (heapsort)

    • Özel tamsayı sıralama algoritmaları–sayım sıralama, kova sıralama ve radix sıralama


Veri yap lar n n uygulanmas

Veri yapılarının uygulanması

  • Bugüne kadar birkaç algoritma ile karşılaştık; veri yapıları algoritmaları:

    • Yığın, kuyruk (LİFO/FİFO – son-geldi-ilk-çıktı/ilk-geldi-ilk-çıktı), ve öncelikli kuyruklar daki yeni nesne koyup almaalgoritmaları

    • Bağlantılı listeler deki nesne koyma, alma ve silme algoritmaları

    • Arama ağaçlarındaki nesne koyma, alma, silme ve min/max aramaalgoritmaları


Veri yap lar n n uygulanmas1

Veri yapılarının uygulanması

  • Arama ağacında min ve max operasyonlarının algoritmaları hatırlatma:

9

max

min

5

15

3

7

12

18

1

4

11

14

arama ağaçları


Veri yap lar n n uygulanmas2

Veri yapılarının uygulanması

Arama ağaçlarının min/max algoritmaları

min sözde kodup:=ağacın kökü

p’nin sol çocuğu varKEN

p:=p’nin sol çocuğu

döngünün sonu

yaz p //bu mindir

başlangıç

p’nin sol çocuğu var?

evet

p:=p’nin sol çocuğu

max sözde kodu p:=ağacın kökü

p’nin sağ çocuğu varKEN

p:=p’nin sağ çocuğu

döngünün sonu

yaz p //bu maxdır

hair

yaz p

bitiş


Veri yap lar n n uygulanmas3

Veri yapılarının uygulanması

  • Arama ağacında arama operasyonunun algoritması

    • Köküyle başlarken anahtarları inceleyin; hedef anahtardan daha küçükse, sola aksi halde sağa gidin

hedef=14

9

14?

5

15

3

7

14?

12

18

1

4

11

14


Veri yap lar n n uygulanmas4

Veri yapılarının uygulanması

başlangıç

Arama ağacın arama algoritması

eşit ise

Arama sözde kodup:=ağacın kökü

DÖNGÜ p’nin değeri hedefe eşit ISEdöngüden çıkın

p’nin değeri hedeften daha büyük ISE p:=p’nin sol çocuğu p’nin değeri hedeften daha küçük ISE p:=p’nin sağ çocuğu

p’nin çocukları varKEN

yaz p

p’nin değeri ve hedef karşılaştırın

p:=p’nin sol çocuğu

daha büyük ise

daha küçük ise

p:=p’nin sağ cocuğu

yaz p

bitiş


Genel algoritma geli tirme

Genel algoritma geliştirme

  • Daha çok algoritma var tabiki...

    • Çeşitli sorular için çözümleri sağlarlar;

    • Hem basit hem ileri pratik sorunlar için kullanılırlar

  • Genellikle, farklı sorunların hepsi için ayrı algoritmalar oluşturmak zorundayız

  • Böyle ilk algoritmalar primitif ve verimsiz olabilirler, ama zamanla daha ileri algoritmalar bulunur–algoritma geliştirme


Algoritma geli tirme1

Algoritma geliştirme

  • Algoritma geliştirme esas metodları:

    • Böl-ve-fethet yaklaşımı

    • Açgözlü (yerel) yaklaşımı

    • Dynamik programlama yaklaşımı

    • Özyineleme yaklaşımı


B l ve fethet yakla m

Böl-ve-fethet yaklaşımı

  • Böl-ve-fethet yaklaşımı, algoritma geliştirme en esas genel metodudur


B l ve fethet yakla m1

Böl-ve-fethet yaklaşımı

  • Böl-ve-fethet’in ana fikri:

    • Bir sorun için bir primitif algoritma varsa;

    • Bu primitif algoritma “kötü” algoritmadır, yani “N” boyutlu girdiler için N2vakit gerekiyor (örneğin–basit sıralama algoritmaları)

    • Bu durumda, “süper lineer zaman algoritması” diyoruz


B l ve fethet yakla m2

Böl-ve-fethet yaklaşımı

  • Böl-ve-fethet’in ana fikri:

    • Bu durumda, böyle strateji düşünülebilir: N boyutlu sorundan yeni iki daha küçük N/2 boyutlu alt sorun yapalım ve şunlar için “kötü” algoritmayı iki kez kullanalım


B l ve fethet yakla m3

Böl-ve-fethet yaklaşımı

  • Böl-ve-fethet’in ana fikri:

    • Bu durumda ne olacak? İki alt sorun için iki kez süper lineer algoritmasını kullanma 2 kat daha az vakit gerekecek–T=2(N/2)2


B l ve fethet yakla m4

Böl-ve-fethet yaklaşımı

  • Böl-ve-fethet’in ana fikri:

    • Farkedin ki, N/2 boyutlu alt sorunlarıtekrar yeni daha küçük N/4 boyutlu sorunlara bölebiliriz, ve şu için tekrar algoritmamızı birkaç kez kullanabiliriz

    • Dört kez N/4-boyutlu algoritmayı kullanma4 kat daha az vakit gerekiyor–4*C*(N/4)2 !


B l ve fethet yakla m5

Böl-ve-fethet yaklaşımı

  • Bu fikri kullanarak, “süper lineer zaman algoritması” varsa sorunu her zaman daha küçük parçalara bölüp parçalarını ayrı ayrı yapınca sonucunu daha az vakitle sağlayabiliriz


B l ve fethet yakla m6

Böl-ve-fethet yaklaşımı

  • Böl-ve-fethet yaklaşımında böyle önemli kavramlar var:

    • Vakit gereksinimi, N boyutlu sorun için gereken çözme zamanı–Ta(N)=O(Nk) (genellikle süper lineer zaman)

    • Alt sonuçları toplama vakit gereksinimi, N boyutlu alt sonuçları tek sonuca toplamak için gereken zaman–Tt(N)=O(N) (genellikle lineer zaman)


B l ve fethet yakla m7

Böl-ve-fethet yaklaşımı

  • Böl-ve-fethet yaklaşımında önemli kavramlar:

    • Toplam vakit gereksinimi bu durumda bu şekilde hesaplanır–Ta(N/2)+ Ta(N/2)+Tt(N)

    • EĞER Ta(N/2)+ Ta(N/2)+Tt(N) < Ta(N) DOĞRU İSE, böl-ve-fethet yaklaşımı avantajlı oluyor


B l ve fethet yakla m8

Böl-ve-fethet yaklaşımı

  • Böl-ve-fethet ünlü uygulamaları:

    • Hızlı Fourier Dönüşümü, dünyadaki böl-ve-fethet yaklaşımının en ünlü uygulamasıdır

      • Sinyaller frekans gösterimine çevirmek için kullanılan matematiksel operasyonu (dönüşüm)

      • Pratik uygulamalarda çok kullanılır

      • Naif uygulaması O(N2) vakit gerekiyor

      • Böl-ve-fethet metoduyla O(N log N) vakitle hesaplanabilir

    • Sıralama – klasik böl-ve-fethet uygulamasıdır

      • Sıralamanın naif uygulaması O(N2) vakit gerekiyor (kabarcık)

      • Böl-ve-fethet metoduyla O(N log N) vakitle yapılabilir


B l ve fethet s ralama

Böl-ve-fethet sıralama

  • Sıralama sorunu hatırlatma

    • Bir sayısal dizi var, N boyutlu

    • O dizinin sıralanmış olmasını istiyoruz

  • Sıralanmış veriler, arama için daha çok avantajlı (sözlükleri düşünün) , ve birçok diğer önemli uygulama var

15

2

2

2

13

5

11

6

7

7

9

5

11

2

13

6

9

15

x

x


Naif s ralama

Naif sıralama

  • Naif sıralama algoritmaları

    • Seçme sıralama

    • Ekleme sıralama

    • Kabarcık sıralama


Se me s ralama

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.


Se me s ralama1

Seçme sıralama

  • Seçme sıralama

en küçük

birinci

2

15

2

2

15

2

2

2

5

13

15

13

11

11

15

13

11

13

7

7

7

11

5

5

5

7

2

2

6

6

6

6

9

9

9

9

x

x

x

x

buraya bakın

yeni en küçük

ikinci

yeni en küçük

üçüncü

yeni en küçük

dördüncü


Se me s ralama2

Seçme sıralama

Seçme sıralama sözde kodusonuç:=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ü sonuyaz sonuç

başlangıç

a:=p’den min nesne seçin

Sonuca a’yı ekleyin

p’dan a’yı çıkartın

yok

p’de kalan nesneler var?

var

bitiş

yaz p


Se me s ralama3

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(N2) operasyon yapıyoruz


Ekleme s ralama

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


Ekleme s ralama1

Ekleme sıralama

  • Naif sıralama: ekleme sıralama

girdi

sonuç

2

15

2

2

15

15

15

15

13

15

11

2

2

2

2

15

13

13

13

13

13

11

15

11

11

11

7

7

7

7

5

5

5

5

2

2

2

2

6

6

6

6

9

9

9

9

x

x

x

x

x

x

x

x

girdi

sonuç

girdi

sonuç

girdi

sonuç


Ekleme s ralama2

Ekleme sıralama

başlangıç

Seçme sıralamasonuç:=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ü sonuyaz sonuç

a:=p’den ilk nesne seçin

i=i+1

sonuç[i]>a

evet

hair

a, sonucun i-1 pozisiyonuna ekle

p’dan a’yı çıkartın

yok

var

p’de nesneler var?

bitiş

yaz p


Ekleme s ralama3

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(N2) operasyon gerekiyor

  • Girdi olarak neredeyse sıralanmış dizi varsa, çok hızlı algoritma olabilir (bu durumda daha avantajlı algoritmadır)


Kabarc k s ralama

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


Kabarc k s ralama1

Kabarcık sıralama

  • Naif sıralama: kabarcık sıralama

girdi

2

2

15

2

2

2

13

13

2

15

11

11

13

13

13

13

11

15

7

11

11

11

15

15

7

7

7

15

7

7

5

5

5

5

5

5

2

2

2

2

2

2

6

6

6

6

6

6

9

9

9

9

9

9

x

x

x

x

x

x

girdi

girdi

girdi

girdi

girdi


Kabarc k s ralama2

Kabarcık sıralama

kabarcık – üstüne gidiyor

  • Naif sıralama: kabarcık sıralama

girdi

2

2

2

2

15

2

13

11

15

13

2

11

15

13

13

11

13

13

15

7

15

11

11

11

7

7

15

7

7

7

5

5

5

5

5

5

2

2

2

2

2

2

6

6

6

6

6

6

9

9

9

9

9

9

x

x

x

x

x

x

girdi

girdi

girdi

girdi

girdi


Kabarc k s ralama3

Kabarcık sıralama

başlangıç

Kabarcık sıralamap:=giriş_dizi

döngü

i:=0

p[i]<p[i+1] iken

i=i+1;

döngü

eğer p[i], p’nin sonunda ise

döngüden çıkın; // hiç yanlış sırada

// çift bulunmadı

p[i] ve p[i+1] değiştirin

döngü sonuyaz p

i=0

i=i+1

p[i]<p[i+1]

evet

hair

evet

p’nin sonunda?

hair

p[i] ve p[i+1] değiştirin

yaz p

bitiş


Kabarc k s ralama4

Kabarcık sıralama

  • Kabarcık sıralama, ortalama tekrar O(N2) operasyon gerekiyor

  • Girdi olarak neredeyse sıralanmış dizi varsa, tekrar onu hızlı sıralayabilir ve avantajlı algoritmadır


Naif s ralama zet

Naif sıralama: özet

  • Naif sıralama algoritmalar

    • Seçme sıralama – O(N2)

    • Ekleme sıralama – O(N2)

    • Kabarcık sıralama – O(N2)

  • Naif sıralama algoritmalarının hepsi O(N2) algoritmalardır

  • Böl-ve-fethet strateji burada uygundur


B l ve fethet s ralama1

Böl-ve-fethet sıralama

  • Böl-ve-fethet sıralama algoritmaları

    • Hızlı sıralama (quicksort)

    • Birleşme sıralama (mergesort)


H zl s ralama quicksort

Hızlı sıralama (quicksort)

  • Ana fikri

    • Naif sıralama algoritması var, O(N2)algoritmasıdır

    • Dizide bir sayı seçiyotuz (ona “pivot” sayı denir), A

    • A’dan daha küçük sayıların hepsini solakoyuyoruz, A’dan daha büyük sayıların hepsini sağakoyuyoruz

    • Soldaki ve sağdaki dizileri ayrı olarak sıralıyoruz

    • Sonuç için, soldaki dizi sola koyup sağdaki dizi sağa koyuyoruz


H zl s ralama quicksort1

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


Quicksort

quicksort

  • Quicksort sıralama

girdi

15

2

2

2

2

2

2

2

5

5

13

5

11

6

6

6

7

7

7

7

5

9

15

9

pivot

11

13

2

11

11

6

13

13

9

15

15

9

x

x

x

x

bölme

sol dizi

sağ dizi

yeni sıralayın; tekrar quicksort kullanın

...

yeni sıralayın; tekrar quicksort kullanın

sol/sağdaki sıralama

toplama

sıralanmış çıktı


Quicksort1

quicksort

başlangıç

quicksortp:=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]<A isep[i] sol_diziye ekleyin

aksi halde

p[i] sağ_diziye ekleyin eğer sonu

döngü sonu

sol_dizi:=quicksort(sol_dizi);sağ_dizi:=quicksort(sağ_dizi);

p:=(sol_dizi, sağ_dizi)

yaz p

seç A; sol=boş; sağ=boş;i=0;

i++<boyut(p)

hair

evet

hair

p[i]<A

p->sağ

evet

p->sol

sol=quicksort(sol); sağ=quicksort(sağ);

[sol;sağ]

bitiş


Quicksort2

quicksort

  • Quicksort sıralama için ortalama O(N log N) operasyon gerekiyor

  • Ama kötü durumunda O(N2) operasyon gerekebilir (“pivot” kötü şekilde seçilmiş ise)


Mergesort

mergesort

  • Ana fikri

    • Naif sıralama algoritması var, O(N2)algoritmasıdır

    • Quicksort’e benzeyen, ama sol ve sağ diziler için girdi dizisini ortada bölüyoruz (yani “pivot” kullanmıyoruz)

    • Sol ve sağ parçaları ayrı ayrı sıralıyoruz ve sonra geri topluyoruz (quicksort gibi)


Mergesort1

mergesort

  • Ana fikri

    • Sol ve sağdaki dizilerde hem çok küçük hem çok büyük sayılar olabilir

    • Bu nedenle sol ve sağ dizilerin toplaması biraz daha zor olabilir

    • Verimli şekilde yapılabilir ...


Mergesort2

mergesort

  • Mergesort toplama algoritması:

    • Sağ ve sol dizide bir işaretçi oluşturuyoruz

    • İşaretçiler soldan sağa ilerletirken iki işaretçinin daha küçüğü sonuca ekliyoruz


Mergesort3

mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

İşaretçi


Mergesort4

mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

Soldan sağa ilerliyor

2


Mergesort5

mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

2

5


Mergesort6

mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

2

5

7


Mergesort7

mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

2

5

7

11


Mergesort8

mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

2

5

7

11

13

Sonuç sıralanmış şekilde toplanır


Mergesort9

mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

2

5

7

11

13

15


Mergesort10

mergesort

2

7

15

18

30

5

11

13

17

23

2

5

7

11

13

15

17

18

23

30


Mergesort11

mergesort

  • Quicksort sıralama ortalama O(N log N) operasyon gerekiyor, ama en kötü durumunda O(N2) operasyon gerekiyor

  • Mergesort sıralama, ortalama ve en kötü durumunda O(N log N) operasyon gerekiyor


Heapsort

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


Heapsort1

heapsort

  • Naif ekleme sıralamasında vakit gereksinimi O(N2) idi, ama...

  • Ekleme operasyonunu daha akıllı şekilde yapacaksak daha verimli algoritma sağlanabilir

    • Ekleme ikiye bölme algoritmasıyla yada arama ağaçları kullanarak yapılabilir

    • Bu durumda ekleme O(log N) vakit gerekecek

    • Diziler O(N log N) vakitle sıralanabilirler


S ralama algoritmalar b l ve fethet

Sıralama Algoritmaları (Böl-ve-Fethet)

  • Naif sıralama algoritmaları

    • Seçme sıralama – O(N2)

    • Ekleme sıralama – O(N2)

    • Kabarcık sıralama – O(N2)

  • Böl-ve-fethet sıralama algoritmaları

    • Quicksort sıralama – O(N log N)

    • Mergesort sıralama – O(N log N)

  • Dığer

    • Heapsort sıralama – O(N log N)


Zel s ralama konular

Özel sıralama konuları

  • Tamsayı sayım, kova ve radix sıralaması

  • O(N) (lineer) vakit algoritmalarıdır

  • Tamsayılar için kullanılır

    • Veritabanlarının düzenlemesi için önemli algoritmalardır

    • Veritabanlarının indeksleri çoğunlukla tamsayılardır, ve bu algortima çok sık kullanılır


Say m s ralama

Sayım sıralama

  • Ana fikri

    • Sayım sıralamada, girdi dizisini sıralı şekilde inceleyip dizindeki sayıların hepsinin kaç kez karşılaşıldığını bir yerde yazıyoruz

    • Bu notları kullanarak sonucu oluşturuyoruz


Say m s ralama1

Sayım sıralama

  • Sayım sıralama

girdi

15

2

13

7

7

5

2

6

9

x

inceleme

Not: 2 – 2 kez karşılaşıldı; 5 – 1 kez karşılaşıldığ; 6 – 1 kez; 7 – 2 kez; 9 – 1 kez; 13 – 1 kez; 15 – 1 kez; vb

Bu not kullanarak sonuç == (2,2,5,6,7,7,9,13,15)


Say m s ralama2

Sayım sıralama

Sayım sıralamanot:=boş dizi;// sayıların sayımları

döngü i=0’dan p’nin boyutuna kadar

not[p[i]]:=n[p[i]]+1;// bütün sayılar için sayımları sağlayın

döngü sonu

sonuç:=boş dizi;// sonuç

döngü en küçükten en büyüğa kadar, n’nin anahtarların hepsi için

“not[k]” tane “k” sayı sonuca yazın;// bulan sayıları sonuca yazın

döngü sonu

yaz p


Kova s ralama

Kova sıralama

  • Kova sıralama, sayım sıralamaya çok benziyor

  • Dizinin en küçük değerinden en büyük değerine aralığı N parçaya (kovaya) bölüyoruz

  • Sayım sıralamadaki gibi, girdi dizisini inceleyip sayıları karşılık gelen kovalara bölüyoruz

  • Kovalardaki sayıları ayrı ayrı sıralayıp kovaların sırasına göre sonucuna topluyoruz

  • Ortalama, kovalar tek sayı içerecek (N sayı ve N kova var çünkü); bu nedenle kova sıralama ortalama O(N) vakit gerekiyor


Kova s ralama1

Kova sıralama

Kova sıralaman:=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ç


Radix s ralama

Radix sıralama

  • Radix sıralama (basamağa göre sıralama), tamsayı sıralama algoritmasıdır

  • Radix sıralama, ilk önce tamsayıyı birinci basamağa göre sıralıyor, sonra ikinci basamağa göre sıralıyor, v.b.

  • O(KN) vakit gerekiyor; K, basamağın boyutu (mesela, normal sayılar için – K=10)

  • İki tür var: “en anlamlı basamağa göre” ve “en anlamsız basamağa göre” türüler var


Ilave s ralama konular radix s ralama

ilave sıralama konuları: radix sıralama

Radix sıralama:

girdi

02

02

15

07

02

02

13

05

05

11

02

06

07

07

06

09

09

05

11

15

02

13

06

13

09

15

11

x

x

x

Birinci geçiş

İkinci geçiş

birinci bölüm

ikinci bölüm

Kova yada sayım sıralamasını kullanarak ilk önce birinci basamağa göre düzenliyoruz

Sonra, kovalardakileri ikinci basamağa göre düzenliyoruz


Ilave s ralama konular radix s ralama1

ilave sıralama konuları: radix sıralama

  • Radix sıralama (en anlamlı basamağa göre)

1. Basamağa göre

1. Basamağa göre

girdi

02

15

02

02

02

07

13

05

05

11

02

06

07

06

07

09

09

05

11

15

02

13

13

06

11

09

15

x

x

x

Birinci geçiş

İkinci geçiş

birinci bölüm

ikinci bölüm

İlk önce kova yada sayım sıralamasını kullanarak bütün sayıları birinci basamağa göre sıralanmış şekilde birkaç bölüme bölüyoruz...


Ilave s ralama konular radix s ralama2

ilave sıralama konuları: radix sıralama

  • Radix sıralama (en anlamlı basamağa göre)

girdi

02

02

15

07

02

02

13

05

05

11

02

06

07

07

06

09

09

05

11

15

02

13

06

13

09

15

11

x

x

x

2. Basamağa göre

Birinci geçiş

İkinci geçiş

birinci bölüm

ikinci bölüm

Sonra, bölümler ayrı olarak içindeki sayıları ikinci basamağa göre düzenliyoruz


Mit503 veri yap lar ve algoritmalar algoritma geli tirme b l ve fethet yakla m

Özet

  • Veri yapıları algoritmaları:

    • Yığın, kuyruk, bağlantılı listeler, arama ağaçlarının koyma, alma, çıkartma, v.b. basit algoritmaları

  • Genel durumda yeni algoritmalar oluşturmamız lazım

  • Algoritma geliştirme için birkaç esas yaklaşım var: böl-ve-fethet yaklaşımı; açgözlü (yerel) yaklaşım; dynamik programlama yaklaşımı; özyineleme yaklaşımı


Mit503 veri yap lar ve algoritmalar algoritma geli tirme b l ve fethet yakla m

Özet

  • Böl-ve-fethet yaklaşımında, bir “kötü” “süper lineer vakit” olan algoritma olmalıdır

  • Bu “kötü” algoritmayı kullanarak, sorun birkaç alt soruna bölüp alt sorunları ayrı ayrı yapılabilir

  • “Kötü” algoritma süper lineer vakit olduğu için böyle strateji sonuca daha hızlı hesaplamayı sağlar


Mit503 veri yap lar ve algoritmalar algoritma geli tirme b l ve fethet yakla m

Özet

  • En ünlü böl-ve-fethet algoritmalar: hızlı Fourier dönüşümü ve sıralama algoritmalarıdır

  • Sıralama algoritmalarını burada daha detayla inceledik

  • Sıralama, temel, basit, aynı zamandaönemli ve çok kullanılan algoritmalarının sınıfıdır


Mit503 veri yap lar ve algoritmalar algoritma geli tirme b l ve fethet yakla m

Özet

  • Naif sıralamaalgoritmaları

    • Seçme sıralama – O(N2)

    • Ekleme sıralama – O(N2)

    • Kabarcık sıralama – O(N2)

  • 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)


Mit503 veri yap lar ve algoritmalar algoritma geli tirme b l ve fethet yakla m

Özet

  • Tamsayı sıralama algoritmaları

    • Sayım sıralama algoritması

    • Kova sıralama algoritması

    • Radix sıralama algoritması

  • Tamsayılar için O(N) vakit algoritmalarıdır

  • Veritabanlarının düzenlemesi için önemli algoritmalar, veritabanlarının indekslerinin sıralanması için çok sık kullanılır


  • Login