FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ

Slides:



Advertisements
Benzer bir sunumlar
Yığınlama Sıralaması (Heap Sort)
Advertisements

FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Yinelemeli Algoritma Analizi & Asimptotik Notasyon
Ayrık Yapılar Algoritma Analizi.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
IT503 Veri Yapıları ve algoritmalar
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Dersin Adı:ALGORİTMA GELİŞTİME TEKNİKLERİ Dersin Kodu:YBS506 Konu:Kontrol Yapıları(if / if-else) 2.HAFTA.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
BPR152 ALGORİTMA VE PROGRAMLAMA - II
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
DÖNGÜLER For While Do While.
Bölüm 2: Program Denetimi
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ KONTROL : Prof. Dr. Asaf VAROL
Diziler Dizi, bellekte aynı isim altında toplanmış değişkenler kümesidir. Eğer ki aynı türden veriler grubunu bellekte tutmak gerekirse diziler kullanılır.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Bölüm 3 – Yapısal Programlama
DÖNGÜ İFADELERİ.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
Yapısal Program Geliştirme – if, if-else
DÖNGÜLER.
Algoritmalar DERS 4 Çabuk sıralama Böl ve fethet Bölüntüler
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ DERLEYENLER: Ahmet Can ÇAKIL Ali Murat GARİPCAN Özgür AYDIN Şahin KARA KONTROL : Prof. Dr. Asaf VAROL KONU : KAPSÜLLEME.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ DERLEYENLER: Ahmet Can ÇAKIL Ali Murat GARİPCAN Özgür AYDIN Şahin KARA KONTROL : Prof. Dr. Asaf VAROL KONU : LİSTELERE.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Koşul İfadeleri ve Akış Kontrolü Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir akış kontrolü oluşturabilmek için koşul ifadelerini.
Chapter 6: Using Arrays.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
İçindekiler  Amaç  Kullanılan Araçlar  Web Uygulaması ve Matris Resimleri  İkili Arama  Arama & Veri Çekme Algoritmaları  İkili Arama &
Diziler Dizi, bellekte aynı isim altında toplanmış değişkenler kümesidir. Eğer ki aynı türden veriler grubunu bellekte tutmak gerekirse diziler kullanılır.
Programlamaya Giriş ve Algoritmalar
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
YMT219: Veri Yapıları Ders Saatleri: Pazartesi 9:15-12, 17:30-20:15
Dizi Elemanlarının Sıralanması
HIZLI SIRALAMA ALGORİTMALARI(QUICK SORT)
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
DÖNGÜLER.
C#’TA DÖNGÜLER onbirc.com/133.
String class String karakterler dizisidir
Python Aslı Ergün.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Algoritmalar ve Programlama I Ders 2: Akış Diyagramları
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritmalar ve Programlama I Ders 8:DİZİ (VEKTÖR) KAVRAMI
Sıralama. Sıralama, bir dizideki sayısal elemanların küçükten büyüğe veya büyükten küçüğe, sayısal olmayan bir dizideki elemanların ise A’ dan Z’ ye.
BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI Kafkas Üniversitesi Mühendislik Fakültesi.
PHP ve HTML İnternet Programlama - 2. Koşullu İfadeler ve Döngüler Döngü ya da çevirim diyebileceğimiz, belli şart ve koşullarda istenilen değerleri yapabilmemizi.
Algoritmalar II Ders 1: Alan zaman takası yöntemi.
Insertion Sort Fikir: Oyun kartlarını sıralamaya benzer.
Algoritmalar II Ders 7 Açgözlü Algoritmalar.
Algoritmalar II Ders 4 Dinamik Programlama Yöntemi.
İleri Algoritma Analizi
İleri Algoritma Analizi
Algoritma Nedir? Algoritmayı, herhangi bir problemin çözümü için izlenecek yolun adımlar halinde yazılması olarak tanımlayabiliriz. Algoritma, bir problemin.
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Bilgisayar Bilimi Fonksiyonlar-2.
MTM216 GÖRSEL PROGRAMLAMA
İleri Algoritma Analizi
İleri Algoritma Analizi
Sunum transkripti:

FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ KONU : İKİLİ ARAMA, BUBBLE VE SEÇME SIRALAMALARI DERLEYENLER: Ahmet Can ÇAKIL Ali Murat GARİPCAN Özgür AYDIN Şahin KARA KONTROL : Prof. Dr. Asaf VAROL

İKİLİ ARAMA İkili arama,bilgisayar bilimlerinde bir bilgi kaynağı veya veri yapısı üzerinde problemi her adımda iki parçaya bölerek yapılan arama algoritmasının ismidir. Bu anlamda bazı kaynaklarda bölerek arama olarak da geçmektedir. Arama algoritması, yapı olarak parçala fethet (devide and conquere) yaklaşımının bir uygulamasıdır. Bu algoritmanın çalışması aşağıdaki şekildedir. Problemde aranacak uzayın tam orta noktasına bak Şayet aranan değer bulunduysa bitir Şayet bakılan değer aranan değerden büyükse arama işlemini problem uzayının küçük elamanlarında devam ettir. Şayet bakılan değer arana değerden küçükse arama işlemini problem uzayının büyük elemanlarında devam ettir. Şayet bakılan aralık 1 veya daha küçükse aranan değer bulunamadı olarak bitir.

İKİLİ ARAMA Arama algoritmasının bir dizi üzerinde başarılı çalışması için dizinin sıralı olması gerekir. Yukarıdaki koddan anlaşılacağı üzere ortadaki elemana bakıldığında, aranan sayı ya bakılan sayıdan büyük ya da küçüktür. Dolayısıyla algoritmamız, ya bakılan sayıdan küçük olan sayılar arasında arama yapacak ya da büyük olan sayılar arasında arama yapacaktır. Bu durumu örnek bir dizi üzerinden açıklamaya çalışalım. Örneğin dizimiz aşağıdaki şekilde verilmiş olsun: int a[10]={2,3,5,6,9,12,32,54,74,111}; Bu dizi üzerinde 10 eleman bulunduğuna göre aranan sayı her ne olursa olsun ilk bakılacak değer ortadaki değer olan (5. Değer) 12 sayısıdır.

Dizi üzerinde arama işlemi için örnek olarak 3 sayısını aradığımızı düşünelim. Ve aşağıdaki şekilde dizide arama işlemine devam edelim Ortadaki değere baktıktan sonra sayı küçük olduğu için altında kalan (solundaki) sayıların ortasındaki değere (yani 2. elemana) bakıyoruz. Aradığımız sayı (yani 3) dizide baktığımız sayıdan küçük olduğu için arama işlemine yine baktığımız sayıdan küçük olan (solunda olan) sayılar ile devam ediyor ve ortadaki sayı olan dizinin 1. Elemanına bakıyoruz. Aradığımız sayıyı bulmuş oluyoruz ve çalışmamız bitiyor.

Farklı bir örnek olarak aranan sayının 37 olduğunu (ve dizide olmayan bir sayı olduğunu) düşünelim. Çalışmamız, yine dizinin tam ortasındaki eleman ile başlayacaktır: Aradığımız sayı baktığımız sayıdan büyük olduğu için dizinin bakılan değerden büyük elemanlarında aramaya devam ediyoruz. Bu alanın ortasındaki değer dizinin 7. Elemanı olur ve 54′tür. Bu değer aradığımız 37 sayısından büyük olduğu için geri kalan sayılar arasından küçük sayılara bakıyoruz. Bu durumda geri kalan sayılarımız 12′den büyük ve 54′ten küçük sayılardır ve ortasındaki eleman 32′dir. Sayımız 32 sayısından büyük (aradığımız sayı 37 idi) bu durumda bakılacak başka sayı kalmadığı için (hem 54 hem de 32 sayılarına baktık ve arada başka sayı bulunmuyor) çalışmamızı bitirip aranan sayının dizide olmadığını söyleyebiliriz.

Örnek program: Dönen değer : Bulunursa, dizinin kaçıncı indisi olduğu bulunmazsa, -1 def ikiliArama(aranan,dizi): bas = 0 son = len(dizi)-1 while ( bas != son ): i = int(round((bas + son )/2.0)) if dizi[i] == aranan: return i elif dizi[i] > aranan: son = i else : bas = i if int(round((bas + son )/2.0)) == son: return -1

Program testi: >>> dizi=[3,5,9,12,14,20,32,48,65,100,120,123,150] >>> dizi.sort() >>> print(dizi) [3, 5, 9, 12, 14, 20, 32, 48, 65, 100, 120, 123, 150] >>> ikiliArama(100,dizi) 9 >>> ikiliArama(160,dizi) -1

BUBBLE SIRALAMA Bir dizideki her bir eleman kendisinden sonraki eleman ile karşılaştırılır ve gerektiğinde yer değiştirme yapılır. Bu sıralama işlemi yer değiştirme olduğu sürece devam edecektir. Büyük sorgulaması yapıldığında dizi küçükten büyüğe, küçük sorgulaması yapıldığında dizi büyükten küçüğe sıralanır. Eğer şarta uyuyor ise elemanların yerleri değiştirilir (swap). Bu işlem dizinin eleman sayısınca tekrar ettirilir.

Aşağıda örnek olarak seçilen bir dizi üzerinde algoritmanın çalışma şekli verilmiştir. Sıralanması istenilen dizi 5 elemanlı olursa geçiş sayısı 5 dir. Öncelikle büyük ya da küçük karşılaştırmalarından hangisinin uygulanacağına karar verilmesi gerekir. Aşağıdaki örnekte büyük karşılaştırması yapılmıştır.

Filiz Köse

… Algoritmanın uygulamasını yapmadan önce, elemanların yer değiştirme işleminin nasıl yapıldığının bilinmesi gerekir . Örnek olarak a ve b adında iki adet değişken olsun. Yer değiştirme işlemi (swap) a değişkenin içerisindeki değer b içerisine , b değişkenin içerisindeki değerde a değişkenin içerisine aktarılacak demektir.

Aşağıdaki gibi bir kod yazmak yanlış olur. a = b; b = a; Varsayalım ki a değişkeni içerisinde 5, b değişkeni içerisinde 7 değeri olsun. Yukarıdaki kod sadece b değişkeni içerisindeki 7 değerini a değişkeni içerisine aktarmaktadır. Bu işlemden sonra a değişkeni içerisinde de 7 değeri vardır. Sonra tekrar 7 değerini b değişkeni içerisine aktarmaktadır. Sonuçta iki değişkende aynı değeri saklarlar. Sağlıklı bir yer değiştirme için üçüncü bir geçici değişkene ihtiyaç vardır.

Yer değiştirme işlemi

a değişkeni içerisindeki değer yedek içerisine alındıktan sonra b değişkeni içerisindeki değer a değişkeni içerisine aktarılır. Son olarak da yedek içerisindeki değerde b değişkeni içerisine aktarılır. Kod aşağıdaki gibi yazılabilir: yedek = a; a = b; b = yedek;

Örnek program: def bubbleSort(L): swapped = True while swapped: swapped = False print (L) for i in range(len(L) - 1): if L[i] > L[i+1]: temp = L[i] L[i] = L[i+1] L[i+1] = temp

Program testi: >>> test=[1,6,3,4,5,2] >>> bubbleSort(test) [1, 6, 3, 4, 5, 2] [1, 3, 4, 5, 2, 6] [1, 3, 4, 2, 5, 6] [1, 3, 2, 4, 5, 6] [1, 2, 3, 4, 5, 6]

SEÇME SIRALAMASI (Selection Sort) En basit sıralama algoritması olarak gösterilebilir. Elimizdeki dizide sıralanması gereken n tane sayı olsun. Bu sayıları küçükten büyüğe sıralamak gerekirse, sıralama algoritması şöyledir: 1- Dizinin 1. elemanından başlayarak tüm elemanlarını kontrol ederek en küçük sayıyı bul, 2- Bulduğun en küçük sayıyı dizinin 1. sayısıyla yer değiştir (swap). 3- Dizinin 2. elemanından başlayarak tüm elemanlarını kontrol ederek en küçük sayıyı bul, 4- Bulduğun en küçük sayıyı dizinin 2. sayısıyla yer değiştir (swap). 5- ……

SEÇME SIRALAMASI (Selection Sort) 6- Dizinin (n-1). elemanından başlayarak tüm elemanlarını kontrol ederek en küçük sayıyı bul, 7- Bulduğun en küçük sayıyı dizinin (n-1). sayısıyla yer değiştir (swap). Her bir iterasyonda en küçük sayıyı bulup onu swap ettiğimiz yer, o sayının sıralanmış dizideki uygun yeri olmuş oluyor.

SEÇME SIRALAMASI (Selection Sort)

Örnek program: def selSort(L): for i in range(len(L) - 1): print (L) minIndx = i minVal= L[i] j = i + 1 while j < len(L): if minVal > L[j]: minIndx = j minVal= L[j] j = j + 1 temp = L[i] L[i] = L[minIndx] L[minIndx] = temp

Program testi: >>> test=[6,5,4,2,3,1] >>> selSort(test) [6, 5, 4, 2, 3, 1] [1, 5, 4, 2, 3, 6] [1, 2, 4, 5, 3, 6] [1, 2, 3, 5, 4, 6] [1, 2, 3, 4, 5, 6]

KAYNAKÇA MIT OpenCourseWare http://ocw.mit.edu 6.00 Introduction to Computer Science and Programming, Fall 2008 http://wiki.pardus-linux.org/index.php/Python http://www.python.quotaless.com/