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

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


  • 371 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 algoritmalarAlgoritma 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ı

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

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

  • 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ş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ı, algoritma geliştirme en esas genel metodudur


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şı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şı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şı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şı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şı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şı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şı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

  • 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 algoritmaları

    • Seçme sıralama

    • Ekleme sıralama

    • Kabarcık 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ı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ı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ı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

  • 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ı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ı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ı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, ç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ı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ı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ı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ı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 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ıralama

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

    • Hızlı sıralama (quicksort)

    • Birleşme sıralama (mergesort)


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 (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 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ı


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ş


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

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


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 ...


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


mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

İşaretçi


mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

Soldan sağa ilerliyor

2


mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

2

5


mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

2

5

7


mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

2

5

7

11


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


mergesort

2

7

15

18

30

5

11

13

17

23

Daha küçük

2

5

7

11

13

15


mergesort

2

7

15

18

30

5

11

13

17

23

2

5

7

11

13

15

17

18

23

30


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

  • 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


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)

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

  • 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

  • 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ı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ı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, 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ı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 (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

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ı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ı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


Ö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ı


Ö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


Ö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


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


Ö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