Arama Algoritmaları. Doğrusal Arama ve Binary Arama

Benzer belgeler
Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

Alıştırma 1: Yineleme

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

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

BİLG Dr. Mustafa T. Babagil 1

C++ Dersi: Nesne Tabanlı Programlama

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Standard Template Library

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

BİLG Dr. Mustafa T. Babagil 1

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

ALGORİTMA VE PROGRAMLAMA I

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

Klavyeden girilen metnin karakter uzunluğu bulan C programı. Klavyeden girilen metin içerisindeki küçük ve büyük harf sayısını bulan C programı

ALGORİTMA VE PROGRAMLAMA I

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

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İ

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

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

YZM 2116 Veri Yapıları

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

BİL1001 Bilgisayar Bilimlerine Giriş 1

BMB204. Veri Yapıları Ders 9. B+ Ağacı, Hash, Heap. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

2) /* Kullanıcıdan alınan iki sayının obebini alt fonksiyon yardımı ile hesaplayan C programı*/

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

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

DOSYA ORGANİZASYONU. Sıralı erişimli dosya organizasyonu yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Final Sınavı Soruları Güz, Süre: 90 Dakika

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

D İ Z İ L E R A R R A Y S

YMT219 VERİ YAPILARI ÖDEV-1

Programlama Dilleri 1. Ders 5: Göstericiler

C ile Uygulamalar 3 - Cevaplar

Veri Yapıları ve Algoritmalar dönem

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

#include<stdio.h> #include<conio.h> #define doktorsayisi 3. typedef struct dr{ int ay1, ay2, ay3, ay4; } doktor; float hesapla(doktor dktr){

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

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

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

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*/

Fall Object-Oriented Programming Laboratory 02 - Structures

Programlama Dilleri 1. Ders 4: Diziler

Diziler (Arrays) Çok Boyutlu Diziler

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

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

Programlama Dilleri Laboratuvarı

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

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

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

ALGORİTMA VE PROGRAMLAMA II

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

elemanlarının gezilmesine yönelik bir örnek sunulmuştur, inceleyiniz.

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

YZM 2116 Veri Yapıları

Veri Yapıları Laboratuvarı

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

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Arasınav Örnek Soruları Bahar 2018

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

BÖLÜM 6. ÇEŞİTLİ KONULARDA ALGORİTMA VE AKIŞ ŞEMALARI

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

PROGRAMLAMA DİLLERİ I

YZM 2116 Veri Yapıları

Bil 101 Bilgisayar Yazılımı 1 Çözümlü Sorular Timur Karaçay

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Programlama Dilleri 3

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

Matris İşlemleri Uygulaması

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

ArrayList ve List yapıları. Bilgisayar Programlama 2 Erciyes Üniversitesi Bahriye Akay

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

Dr. Fatih AY Tel: fatihay@fatihay.net

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

Diziler & Karakter Katarı (String)

Algoritmalar ve Karmaşıklık

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

FBEB-512. C++ ile Nesne Tabanlı Programlama. Güz (5. Hafta)

DİZİLER. Bu ünitede yapılan örnekler Visual Studio 2010 programındaki Visual Basic programlama diliyle çözülmüştür.

Merge Sort Bireşen Sıralama

VERİ YAPILARI VE PROGRAMLAMA

Sınav Dağılım & IMKB Endeks

1 PROGRAMLAMAYA GİRİŞ

Yrd. Doç. Dr. Caner ÖZCAN

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

Karakter katarları ile ilgili fonksiyonlar içerir Yerel kayan noktalı sayılar tanımlanır

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

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

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

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

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

C ile Uygulamalar 4 - Cevaplar

Veri Yapıları. Yrd. Doç. Dr. Şadi Evren ŞEKER

Transkript:

Arama Algoritmaları Doğrusal Arama ve Binary Arama

Doğrusal Arama-Örnek Dizi (Array) sayilistesiiçerisindeki sayılar aşağıdaki gibidir: 17 23 5 11 2 29 3 11, verilen dizi içerisinde aranacaksa doğrusal arama algoritması 17, 23, 5, ve 11 sayılarını test eder. 7, aranacak ise 17, 23, 5, 11, 2, 29, ve 3 sırası ile test edilir (ve aranan sayı bulunamaz!. )

Doğrusal Arama Algoritması Algoritma: bulundu değişkenini yanlış olarak atayınız; pozisyon değişkenini 1olarak atayınız; index değişkenini 0 olarak atayınız. while (index < dizideki eleman sayısı) ve(bulundu == yanlış) if (sayilistesi[index] == aranan sayı) bulundu = doğru pozisyon = index end if index değişkenine 1 ekle. end while return pozisyon

Doğrusal arama foksiyonu C++ kodu int Listeyiara(int list[], int elemansayisi, int aranansayi) int index = 0; int pozisyon = -1; char bulundu = Y ; while ( (index < elemansayisi) && (bulundu!= D ) ) if (list[index] == aranansayi) bulundu = D ; // aranansayının bulunduğunu gösterir pozisyon = index; // aranan sayının lokasyonunu tutar. index++;// bir sonraki pozisyondaki elemanı araması için. return pozisyon; // aranansayının lokasyonunu ana programa // döner veya -1 olarak döner.

Doğrusal Arama Algoritması Avantajları I. Anlaşılması kolay bir algoritmadır. II. Uygulamak için dizinin sıralı olması gerekmez!.. Dezavantajları I. Yavaştır. (çok elemanı olan diziler için) Eğer aranan sayı dizide mevcut değil ise tüm elemanların aranması gerekir, mevcut ise bulduğu yerde durur.

Binary AramaAlgoritması-Örnek Dizi (Array) sayilistesiiçerisindeki sayılar aşağıdaki gibidir: 2 3 5 11 17 23 29 11, elemanı aranıyorsa, 11 test edilir ve binary arama durur!.. 7, elemanı aranıyorsa binary arama 11, 3, 5, değerlerini test edip durur.

Binary Arama Algoritması ilkindex değerini 0 yap. sonindex değerini dizinin son elemanının pozisyon değerine eşitle. bulundu= Y ; pozisyon= -1. While ( (bulundu!= D ) ve (ilkindex <= sonindex) ) ortaindex = (ilkindex+sonindex) / 2 If (dizi[ortaindex] == aranan değer) bulundu= D pozisyon=ortaindex Else If (dizi[ortaindex] > aranandeğer) sonindex=ortaindex - 1. Else ilkindex= ortaindex + 1. End If. End While. return pozisyon.

Binary AramaFonksiyonu C++ Kodu int binaryarama(int dizi[], int boyut, int aranansayi) int ilk = 0, // dizideki ilk değer son = boyut - 1, // dizideki son değer orta, // aramanın orta noktası pozisyon = -1; // aranansayi nin lokasyon değeri char bulundu = Y ; // aranansayının bulunup bulunmadığı while ( (bulundu!= D ) && (ilk <= son) ) orta = (ilk + son) / 2; // orta noktayı hesapla if (dizi[orta] == aranansayi) // Eğer aranansayı dizinin ortasında ise bulundu = D ; // bulundu DOĞRU olarak atanmalı pozisyon = orta; // aranansayının pozisyonu tutulur else if (dizi[orta] > aranansayi) // Eğer aranan sayı daha küçük ise son = orta - 1; // dizinin ilk yarısını arar. else ilk = orta + 1; // aksi takdirde dizinin ikinci yarısını arar. return pozisyon;

Uygulama Programı Takip eden 2 slaytta sayıların girilebileceği bir fonksiyon; Girilen sayıların dizi içerisinde, girildiği şekliyle aranabilmesini sağlayan bir fonksiyon; Girilen sayıları sıralayan bir fonksiyon; Binary arama yapan bir modül; Dizi içerisinden değerleri ekrana yansıtmak için bir fonksiyon bulunmaktadır. Dikkatlice inceleyiniz.

#include<iostream.h> #include<stdio.h> #define max 10 void List(int L[],int numelems) for(int i=0;i<numelems;i++) cout <<i <<". sayiyi gir----> "; cin>>l[i]; int Listedenara(int List[],int boyut,int aranandeger) int indeks=0; int pozisyon=-1; char bulundu='f'; while ((indeks<boyut)&&(bulundu=='f')) if(list[indeks]==aranandeger) bulundu='t'; pozisyon=indeks; indeks++; return pozisyon; int B_arama(int List[], int boyut, int aranandeger) int ilk = 0, son = boyut-1, orta, pozisyon = -1; char bulundu = 'F'; sayfa 1 while ( (bulundu == 'F') && (ilk <= son) ) orta = (ilk + son) /2; if ( List[orta] == aranandeger ) bulundu = 'T'; pozisyon = orta ; else if ( List[orta] > aranandeger ) son = orta -1; else ilk = orta + 1; return pozisyon; void L_siralama(int List[], int boyut) int i,k, gecici; for (i=1;i<boyut;i++) k=i; while ((List[k]<List[k-1]) &&(k>0)) gecici=list[k]; List[k]=List[k-1]; List[k-1]=gecici; k--; void diziyi_goster( int List[], int boyut) int i; for (i=0;i<boyut;i++) cout << i << ". sayi --->" <<List[i] <<"\n"; sayfa 2

int main() int i,aranacakdeger, hedef; int L1[max]; List(L1,max); cout << " bir sayi aratmak icin deger giriniz-----> "; cin >> aranacakdeger; hedef=listedenara(l1,max, aranacakdeger); if (hedef >=0) cout << "aranan hedef sayının pozisyonu ----> " << hedef << "\n"; else cout << " aranan deger mevcut degildir!... \n"; L_siralama(L1,max); diziyi_goster(l1,max); cout << " bir sayi aratmak icin deger giriniz-----> "; cin >> aranacakdeger; hedef=b_arama(l1,max,aranacakdeger); if (hedef >=0) cout << "aranan hedef sayının pozisyonu ----> " << hedef << "\n"; else cout << " aranan deger mevcut degildir!... \n"; return 0; sayfa 3

Sıralama Algoritmaları Sıralama algoritmalarından iki tanesi anlatılacaktır. 1. Bubble Sıralama Algoritması 2. Seçerek sıralama Algoritması

Bubble Sıralama (Bubble Sort) Yöntem: İlk iki elemanı kıyasla ve Eğer istenilen sırada değilse yerlerini değiştir. Bir adım ilerleyerek ikinci ve üçüncü elemanları kıyasla ve gerekiyorsa yer değiştir. Dizinin (array in) sonuna kadar bu işlemi yapmaya devam et. Ve tekrar array üzerinde hareket etmeye, yer değişikliği gerekli olduğu sürece devam edin. Hiç yer değiştirme olmayıncaya kadar bu işlemi tekrarlayınız.

Örnek Dizi üzerinden 1. kez geçiş Yeni Dizi (Array) liste aşağıdaki gibidir: 17 23 5 11 17-23 karşılaştırılıp gerekmiyorsa Yerleri değiştirilmez!.. 23 ile 5 kıyaslanır ve Yerleri değiştirilir. 11 ile 23 kıyaslanır ve Yerleri değiştirilir.

Örnek Dizi üzerinden 2. kez geçiş 1. Geçişten sonra, dizi (array) liste şöyle olur: 17 5 11 23 17 ile 5 kıyaslanır Yer değiştirilir. 17 ile 11 kıyaslanır Yer değiştirilir 17 ile 23 kıyaslanır Yer değiştirilmez. 8-15

Örnek 3. kez geçiş 2. geçişten sonra, dizi (array) liste şöyle olur: 5 11 17 23 5 ve 11 kıyaslanır, doğru sırada Olduğu için değişim yapılmaz 11 ve17 kıyaslanır, Yine değişikliğe gerek Yoktur. 17 ve 23 için de Değişikliğe gerek yoktur. Yer değişimi yok, ozaman Dizi (array) istediğimiz sıralamadadır. 8-16

Bubble Sıralama fonksiyonu aşağıdaki gibidir. Küçük modifikasyonlar yapılmıştır!.. Void B_siralama(int List[], int boyut) int i,k, gecici; for (i=1;i<boyut;i++) k=i; while ((List[k]<List[k-1]) && (k>0)) gecici=list[k]; List[k]=List[k-1]; List[k-1]=gecici; k--;

Void B_siralama(int List[], int boyut) int i,k, gecici; for (i=1;i<boyut;i++) k=i; while ((List[k]<List[k-1]) && (k>0)) gecici=list[k]; List[k]=List[k-1]; List[k-1]=gecici; k--; 0 1 2 3 4 5 i k Değişim? gecici 0 5 2 4 9-2 1 1 Yok 0 5 2 4 9-2 2 2 var 2 0 2 5 4 9-2 1 Yok 0 2 5 4 9-2 3 3 var 4 0 2 4 5 9-2 2 Yok 0 2 4 5 9-2 1 yok 0 2 4 5 9-2 4 4 Yok 0 2 4 5 9-2 5 5 Var -2 0 2 4 5-2 9 4 Var -2 0 2 4-2 5 9 3 Var -2 0 2-2 4 5 9 2 Var -2 0-2 2 4 5 9 1 Var -2-2 0 2 4 5 9

ilkindex değerini 0 yap. sonindex değerini dizinin son elemanının pozisyon değerine eşitle. bulundu= Y ; pozisyon= -1. While ( (bulundu!= D ) ve (ilkindex <= sonindex) ) ortaindex = (ilkindex+sonindex) / 2 If (dizi[ortaindex] == aranan değer) bulundu= D pozisyon=ortaindex Else If (dizi[ortaindex] > aranandeğer) sonindex=ortaindex - 1. Else ilkindex= ortaindex + 1. End If. End While. return pozisyon. 0 1 2 3 4 5 6 7 8 9-2 0 2 4 5 6 8 9 14 15 Aranan değer ilk son orta Bulundu Pozisyon 0