ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Benzer belgeler
Yrd. Doç. Dr. Ümit ATİLA

Algoritmalar. Sıralama Problemi ve Analizi. Bahar 2017 Doç. Dr. Suat Özdemir 1

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

Alıştırma 1: Yineleme

YZM 2116 Veri Yapıları

VERİ YAPILARI DATA STRUCTURE GİRİŞ

Bilgisayar programlamanın üç temel mantık yapısından biridir. Diğer ikisi ise Seçilim(Selection) ve Döngü(Loop, Iteration)dür.

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

Algoritmalar. Doğrusal Zamanda Sıralama. Bahar 2017 Doç. Dr. Suat Özdemir 1

BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI. Kafkas Üniversitesi Mühendislik Fakültesi

Algoritmalar. Heap Sort. Bahar 2017 Doç. Dr. Suat Özdemir 1

YZM 2116 Veri Yapıları

Java, Python ve Ruby Dillerinin Performans Karşılaştırması

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

Veri Yapıları. for(i=1;i<n;i++) { ekle=d[i]; for (k=i 1; k>=0 && ekle<=d[k] ;k ) D[k+1]=D[k]; /* Geriye kaydırılıyor*/

VERİ YAPILARI DERS NOTLARI BÖLÜM 2 ALGORİTMA ANALİZİ. Yard. Doç. Dr. Deniz KILINÇ

3.Hafta Master Teorem ve Böl-Fethet Metodu

Örnek...3 : Aşağıdaki ifadelerden hangileri bir dizinin genel terim i olabilir? Örnek...4 : Genel terimi w n. Örnek...1 : Örnek...5 : Genel terimi r n

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#6: AZALT VE FETHET YÖNTEMİ

Dr. Fatih AY Tel: fatihay@fatihay.net

Örnek...3 : Aşağıdaki ifadelerden hangileri bir dizinin genel terim i olabilir?

Algoritmalar ve Karmaşıklık

Algoritmaların Karşılaştırılması. Doç. Dr. Aybars UĞUR

SIRALAMA SORTING. Yrd. Doç. Dr. Aybars UĞUR

Algoritma Analizi. Özelliklerinin analizi Algoritmanın çalışma zamanı Hafızada kapladığı alan

BİL-341 ALGORİTMALAR BÜYÜK O NOTASYONU AHMET ATAKAN atakanahmet@hotmail.com KIRGIZİSTAN-TÜRKİYE MANAS ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

b) Algoritmanızın en kötü durumda işlem zamanını asimptotik olarak bulunuz

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Azalt ve Fethet Algoritmaları

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#2: ALGORİTMA ANALİZİ

f(x) ve g(x) reel sayılarda tanımlı iki fonksiyon olmak üzere, x > k olacak şekilde bir k vardır öyle ki,

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

BMT207 VERİ YAPILARI DATA STRUCTURE

Algoritma Geliştirme ve Veri Yapıları 1 Temel Algoritma Kavramları. Mustafa Kemal Üniversitesi

Algoritma Analizi Big O

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#1: ALGORİTMA KAVRAMI

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

O NOTASYONU. Abdullah Gazi Emre DAĞLI

Özyineleme (Recursion)

Olimpiyat Soruları. sonuçları tekrar fonksiyonda yerine koyup çıkan tüm sonuçları toplayan program (iterasyon sayısı girilecek)

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

YMT219 VERİ YAPILARI ÖDEV-1

13.Konu Reel sayılar

Algoritmalar, Akış Şemaları ve O() Karmaşıklık Notasyonu

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

İleri Diferansiyel Denklemler

ALGORİTMA İ VE PROGRAMLAMA

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Boyut: Belirli bir doğrultuda ölçülmüş bir büyüklüğü ifade etmek için kullanılan geometrik bir terim.

Rakam : Sayıları yazmaya yarayan sembollere rakam denir.

I Java Veri Yapıları 1

EM205 26/9/2014. Programlamaya giriş Algoritmalar. Amaçlar

RASSAL SAYI ÜRETİLMESİ

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#3: ALGORİTMA ANALİZİ#2

Bölüm Özeti. Algoritmalar. Fonksiyonların Büyümesi. Algoritmaların Karmaşıklığı. Örnek Algoritmalar Algoritmik Paradigmalar

ELN1001 BİLGİSAYAR PROGRAMLAMA I

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

Ayrık Fourier Dönüşümü

YZM 2116 Veri Yapıları

ALGORİTMA VE PROGRAMLAMA I

BÖLÜM III: Şebeke Modelleri. Şebeke Kavramları. Şebeke Kavramları. Şebeke Kavramları. Yönlü Şebeke (Directed Network) Dal / ok

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

ALGORİTMA VE PROGRAMLAMA I

Yrd. Doç. Dr. Caner ÖZCAN

2.Hafta Algoritmaların Analizi. Araya Yerleştirme Sırlaması (Insert Sort) Birleştirme Sıralaması (Merge Sort ) Yinelemeler

ALGORİTMA VE PROGRAMLAMA I

Algoritma Nedir? Algoritma

YUVARLAMA FONKSİYONLARI

Algoritma Analizi ve Büyük O Notasyonu. Şadi Evren ŞEKER YouTube: Bilgisayar Kavramları

Graflar bilgi parçaları arasındaki ilişkileri gösterirler.

Verilerin Düzenlenmesi

6. 1. terimi 35, 4. terimi 26 olan aritmetik dizinin. 7. İlk üç teriminin toplamı 27 ve ilk 5 teriminin. 8. İlk terimi a1

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

Algoritmalar. DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama Sayı üstelleri Fibonacci sayıları Matriks çarpımı Strassen in algoritması

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

C PROGRAMLAMA D İ L İ

14.Konu Reel sayılarının topolojisi. 1.Tanım:, verilsin. açık aralığına noktasının -komşuluğu denir. { } kümesine nın delinmiş -komşuluğu denir.

Web Madenciliği (Web Mining)

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Önsöz. İçindekiler Algoritma Algoritma Nasıl Hazırlanır? Yazılımda Algoritma Mantığı Nedir? 1.2. Algoritma Örnekleri ve Sorular

Yrd. Doç. Dr. Caner ÖZCAN

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

1. LabVIEW ile Programlama

ALGORİTMA VE PROGRAMLAMA I

Algoritmanın Hazırlanması

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Internet Programming I. Hafta III. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

PERMÜTASYON, KOMBİNASYON. Örnek: Örnek: Örnek:

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

Veri Yapıları. Öğr.Gör.Günay TEMÜR Düzce Üniversitesi Teknolojis Fakültesi

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

Transkript:

ELN1002 BİLGİSAYAR PROGRAMLAMA 2 SIRALAMA ALGORİTMALARI Sunu Planı Büyük O Notasyonu Kabarcık Sıralama (Bubble Sort) Hızlı Sıralama (Quick Sort) Seçimli Sıralama (Selection Sort) Eklemeli Sıralama (Insertion Sort) Birleştirmeli Sıralama (Merge Sort) 1

Büyük O Notasyonu Bir dizinin ilk elemanı ile ikinci elemanını birbirleriyle kıyaslayan bir algoritma düşünelim: 10 elemanlı bir dizi için kaç kıyaslama gerekir? --- 1 1000 elemanlı bir dizi için kaç kıyaslama gerekir? --- 1 O(1) notasyonu: Eğer algoritmanın içindeki işlem sayısı, dizinin eleman sayısından bağımsızsa, algoritma sabit çalışma süresine sahiptir, yani birinci derecedendir. O(1) algoritmada tek bir kıyaslama olduğunu göstermez, algoritmanın, çalışma zamanının çalıştığı diziyle birlikte artmadığını gösterir. Büyük O Notasyonu n elemanlı bir dizinin ilk elemanının dizi içindeki herhangi bir elemana eşit olup olmadığını test eden bir algoritma, en çok n-1 kıyaslamaya ihtiyaç duyacaktır. 10 elemanlı bir dizi için en çok kaç kıyaslama gerekir? --- 9 1000 elemanlı bir dizi için en çok kaç kıyaslama gerekir? --- 999 n büyüdükçe, (n-1) ifadesindeki n daha baskın hale gelecektir ve -1 anlamsızlaşacaktır. Büyük O notasyonu, bu baskın terimleri açığa çıkarıp, anlamsızları kullanmaz. O(n), algoritmanın, doğrusal çalışma zamanına sahip olduğunu göstermektedir. Yani, algoritmanın çalışma süresi, çalıştığı dizinin eleman sayısıyla doğru orantılı olarak değişecektir. O(n) basitçe n. derece olarak da adlandırılır. 2

Büyük O Notasyonu n elemanlı bir dizinin herhangi bir elemanının dizi içindeki herhangi başka bir elemana eşit olup olmadığını test eden bir algoritma düşünelim. Dizinin ilk elemanının dizinin diğer elemanlarıyla kıyaslanması (n-1) kıyaslama Dizinin ikinci elemanının dizinin diğer elemanlarıyla kıyaslanması (n-2) kıyaslama Dizinin üçünü elemanının dizinin diğer elemanlarıyla kıyaslanması (n-3) kıyaslama Toplam kıyaslama sayısı (n-1) + (n-2) + (n-3) + 2 + 1 => n 2 /2 n/2 kıyaslama Burada n yani dizi elemanı sayısı arttıkça n 2 terimi baskınlaşır ve n terimi anlamsızlaşır. Ayrıca Büyük O notasyonu yine n 2 aydınlatır ve n 2 /2 terimini bırakır. Büyük O notasyonunda sabit elemanlar ihmal edilir. Büyük O Notasyonu Büyük O notasyonu, bir algoritmanın çalışma süresinin, üzerinde çalıştığı dizi elemanı sayısıyla birlikte nasıl değiştiğine açıklık getirmektedir. Bir algoritmanın n 2 kıyaslamaya ihtiyaç duyduğunu düşünelim. 4 elemanlı bir dizi için 16 kıyaslamaya ihtiyaç olacaktır. 8 elemanlı bir dizi için ise 64 kıyaslamaya ihtiyaç olacaktır. Bu algoritmayla, dizi elemanlarını iki katına çıkarmak, kıyaslama sayısını dört katına çıkarmaktadır. Bu algoritmaların çalışma süreleri dizi eleman sayısının karesiyle orantılıdır ve O(n 2 ) olarak gösterilir. O(n 2 ) kuadratik (dört katlı- quadratic) çalışma zamanı olarak değerlendirilir ve basitçe n-kare derece olarak adlandırılır. 3

Büyük O Notasyonu n küçük olduğu sürece, O(n 2 ) tipindeki algoritmalar çalışma zamanı açısından problem oluşturmayacaktır. Fakat n arttıkça performanstaki düşme fark edilir hale gelecektir. 1.000.000 elemanlı bir dizi üzerinde çalışan O(n 2 ) tipinde bir algoritma trilyon seviyesinde işlem (ki bunlarda çalışmak için birkaç makine döngüsüne ihtiyaç duyar) demektir ki bu da programın saatlerce çalışması demektir. O(n 2 ) algoritmaları, genelde oluşturulması basit olan algoritmalardır. Daha verimli veya zamanı daha iyi kullanan algoritmalarsa, üzerinde düşünülmesi gereken ve oluşturulması zor olan algoritmalardır. Kabarcık Sıralama (Bubble Sort) Kabarcık sıralama, son derece basit fakat verimsiz bir sıralama algoritmasıdır. Adımları şu şekildedir: Dizinin tüm elemanlarını sırayla ele alır. Ele aldığı elemanla kendisinden sonraki elemanı karşılaştırır. Ele aldığı eleman bir sonraki elemandan büyükse yerlerini değiştirir, küçükse olduğu gibi bırakır. Bir sonraki elemana geçer. İşlem (n-1) kere tekrarlanır. 4

Kabarcık Sıralama 34 56 4 10 77 51 93 30 5 52 39 34 56 4 10 77 51 93 30 5 52 39 34 4 56 10 77 51 93 30 5 52 39 34 4 10 56 77 51 93 30 5 52 39 34 4 10 56 77 51 93 30 5 52 39 34 4 10 56 51 77 93 30 5 52 39 5

Kabarcık Sıralama - O Seçimli sıralama algoritması, O(n 2 ) tipinde bir algoritmadır. Bu algoritma, iki for döngüsüne sahiptir. Dıştaki döngü, işlemin (n-1) kadar tekrarlanmasını sağlar. İçteki döngü, (n-1) kıyaslama yapar. Seçimli Sıralama (Selection Sort) Seçimli sıralama, basit fakat verimsiz bir sıralama algoritmasıdır. Adımları şu şekildedir: Algoritmanın ilk iterasyonu dizideki en küçük elemanı bulur ve ilk elemanla yerini değiştirir. Algoritmanın ikinci iterasyonu, ikinci elemandan itibaren en küçük elemanı bulur ve ikinci elemanla yerini değiştirir. Algoritma sondan bir önceki elemanla son elemanın kıyaslanmasına kadar bu şekilde devam eder. i. iterasyondan sonra, dizinin en küçük i adet elemanı, artan şekilde dizinin ilk i sırasını kaplamış olacaktır. 6

Seçimli Sıralama (Selection Sort) 34 56 4 10 77 51 93 30 5 52 39 4 56 34 10 77 51 93 30 5 52 39 4 5 34 10 77 51 93 30 56 52 39 4 5 10 34 77 51 93 30 56 52 39 4 5 10 30 77 51 93 34 56 52 39 10. iterasyondan sonra 4 5 10 30 34 39 51 52 56 77 93 7

8

Seçimli Sıralama - O Seçimli sıralama algoritması, O(n 2 ) tipinde bir algoritmadır. Bu algoritma, iki for döngüsüne sahiptir. Dıştaki döngü, ilk (n-1) eleman üzerinde işlem yapar, bulunan en küçük elemanı sırasına yerleştirir. İçteki döngü, dizinin kalan elemanları üzerinde, en küçük elemanın aranması işlemini gerçekleştirir. İlk aşamada, (n-1) iterasyon gerçekleştirilir, ikinci aşamada (n-2) iterasyon gerçekleştirilir, ve bu şekilde O(n 2 ) tipinde bir yapı oluşur. 9

Eklemeli Sıralama (Insertion Sort) Eklemeli sıralama başka bir basit fakat verimsiz sıralama algoritmasıdır. İşleyişi şu şekildedir: Algoritmanın ilk iterasyonu, dizinin ikinci elemanını alır, eğer birinci elemandan küçükse, birinciyle yer değiştirir. İkinci iterasyon, üçüncü elemana bakar, ilk elemanın durumuna göre doğru yerine yerleştirir, böylece üç elemanda sıralanmış olur. Algoritmanın i. İterasyonunda, ilk eleman doğru şekilde sıralanmış olacaktır. Eklemeli Sıralama (Insertion Sort) 34 56 4 10 77 51 93 30 5 52 39 34 56 4 10 77 51 93 30 5 52 39 34 56 56 10 77 51 93 30 5 52 39 4 Geçici Değişken 34 34 56 10 77 51 93 30 5 52 39 4 34 56 10 77 51 93 30 5 52 39 10

11

12

Eklemeli Sıralama - O Eklemeli sıralama algoritması, O(n 2 ) tipinde bir algoritmadır. Bu algoritma, aynı seçimli algoritma gibi iki döngüye sahiptir. for döngüsü, (n-1) kere çalışır, elemanı sırlanamış elemanlar içindeki doğru yerine yerleştirir. while döngüsü, dizinin kalan elemanları üzerinde işlemini gerçekleştirir. İlk aşamada, (n-1) iterasyon gerçekleştirilir, ikinci aşamada (n-2) iterasyon gerçekleştirilir, ve bu şekilde O(n 2 ) tipinde bir yapı oluşur. Birleştirmeli Sıralama (Merge Sort) Birleştirmeli algoritma, verimli bir sıralama algoritmasıdır, fakat kavramsal olarak diğerlerine göre daha karmaşıktır. Birleştirmeli sıralama algoritması, diziyi eşit uzunluklu iki diziye böler, her diziyi kendi içinde sıralar ve onları tek bir dizide birleştirir. Dizi eleman sayısı tek sayıysa, bölünmüş dizilerden birinin eleman sayısı diğerinden bir fazla olmalıdır. Yinelemeli (Rekürsif) birleştirmeli sıralama algoritmasının işleyişi şu şekildedir: Temel durum tek elemanlı bir dizidir. Tek elemanlı bir dizinin, sıralanmak gibi bir problemi yoktur, böylece tek elemana indirgenince fonksiyon hemen geriye döner. Yineleme adımı, iki veya daha fazla elemana sahip her diziyi iki eşit sayıda elemana sahip alt dizilere böler, yinelemeli olarak her alt diziyi sıralar, ve onları daha büyük, sıralı bir dizi şeklinde birleştirir. 13

Birleştirmeli Sıralama (Merge Sort) 34 56 4 10 77 51 93 30 5 52 34 56 4 10 77 51 93 30 5 52 4 10 34 56 77 5 30 51 52 93 4 5 10 30 34 51 52 56 77 93 14

15

16

Birleştirmeli Sıralama - O Birleştirmeli sıralama, seçimli ve yerleştirmeli sıralamalara göre çok daha verimlidir. AltDiziyiSırala fonksiyonuna ilk çağrıya (yinelemeli olmayan) bakalım. Bu fonksiyon, ilk dizinin yarısı büyüklüğündeki iki alt diziye yapılan iki adet AltDiziyiSirala yinelemeli fonksiyon ve tek bir merge fonksiyon çağrısıyla sonlanır. Birlestir fonksiyonuna yapılan bu çağrı, en kötü koşulda ilk diziyi doldurmak için (n-1) kıyaslamaya ihtiyaç duyacaktır, bu da O(n) yapısıdır. AltDiziyiSirala fonksiyonuna yapılan iki çağrı, her biri ilk dizininin dörtte biri eleman sayısına sahip dizilerle dört adet yinelemeli AltDiziyiSirala çağrısıyla sonuçlanacaktır, dolayısıyla birlestir fonksiyonuna yapılan iki çağrı daha. 17

Birleştirmeli Sıralama - O Bu iki adet birlestir fonksiyonuna yapılan iki çağrıda, en kötü koşulda, (n/2-1) kıyaslamaya ihtiyaç duyacaktır, bu da toplam kıyaslamalar açısından O(n) sonucunu oluşturacak. Bu süreç, her AltDiziyiSirala fonksiyonu, iki yeni AltDiziyiSirala ve bir yeni birlestir fonksiyonunu çağırarak, algoritma diziyi tek elemanlı diziler haline parçalayıncaya kadar devam eder. Her seviyede, dizi ikiye bölünür, böylece dizinin boyutunu ikiye katlamak bir seviye daha gerektirmiş olur. Bu logaritmik bir yapıdır ve log 2 n seviyeyle sonuçlanır. Bunun sonucu olarak toplam verimlilik O(n log n) olarak elde edilir. Hızlı Sıralama (Quick Sort) Hızlı sıralama algoritması, sıralanacak bir sayı dizisini daha küçük iki parçaya ayırıp oluşan bu küçük parçaların kendi içinde sıralanması mantığıyla çalışır. Algoritmanın adımları aşağıdaki gibidir: Sayı dizisinden herhangi bir sayı pivot eleman olarak seçilir. Sayı dizisi, pivottan küçük olan tüm sayılar pivotun önüne, pivottan büyük olan tüm sayılar pivotun arkasına gelecek biçimde tekrar düzenlenir (pivota eşit olan sayılar her iki yana da geçebilir). Bu bölümlendirme işleminden sonra eleman sıralanmış son dizide olması gerektiği yere gelir. Algoritmanın bu aşamasına bölümlendirme aşaması denir. Pivotun sol ve sağ yanında olmak üzere oluşan iki ayrı küçük sayı dizisi üzerinde, hızlı sıralama algoritması özyinelemeli olarak yeniden çağrılır. Algoritma içinde sayı kalmayan (eleman sayısı sıfır olan) bir alt diziye ulaştığında bu dizinin sıralı olduğunu varsayar. 18

Hızlı Sıralama (Quick Sort) 34 56 4 10 77 51 93 30 5 52 34 56 4 5 77 51 93 30 10 52 10 56 4 5 77 51 93 30 34 52 5 56 4 10 77 51 93 30 34 52 5 10 4 56 77 51 93 30 34 52 5 4 10 56 77 51 93 30 34 52 10 un gerçek pozisyonu 19

20

Hızlı Sıralama - O Hızlı sıralama algoritması n adet sayıyı, ortalama bir durumda O(nlog n) karmaşıklığıyla, en kötü durumda ise O(n 2 )karmaşıklığıyla sıralar. 21