Binary,Linear,Selection Algoritmaları // Örneklerle

KaptanTR

Yazılım Ekibi Deneyimli
17 Nis 2015
988
259
sbjb185.png


Binary Search Algoritması

Bir dizide arama yapmaya yardımcı olan algoritma arama araçlarındadır.
İkili arama algoritması işleminde aranılan elemanı bulmak için her seferinde dizinin ortasındaki elemana bakılarak ilerlenir.
Ortadaki eleman aranan elemana eşit değilse bu kez arananın elemanın bulunduğu diğer yarı taraf bölgesinde arama işlemi yinelenir.
Böylelikle her arama işleminde arama uzayı yarıya iner ve algoritmayı daha kolay ve hızlı bir şekilde kullanma avantajı yakalarsınız.
İkili algoritmada arama yapmak istediğiniz her dizinin sıralı bir şekilde sıralanmış olması gerekir.
Özellikle sıralı olamayan dizilerde ikili arama yapabilmek için, ilk olarak diziler sıralı olarak belirli bir düzene göre sıraya konulmalıdır.


k-rm-z-ayrac.png


Binary Search Algoritması Örneği

İlk olarak dizinin ortasındaki elemanı seçin. Seçtiğiniz elemanı karşılaştırdığınızda, aranan elemana eşitse işlem sonlandırın.
Aradığınız eleman seçilen elemandan büyük ise, seçtiğiniz elemanı büyük olan kısmalarında arama işlemi tekrar edin.
Aranan eleman seçilen elemandan küçükse bu kez dizinin seçilen küçük eleman kısmında işlemi tekrarlayın.
Arama uzayında en küçük indis en büyük indisten küçük ya da eşit oluncaya kadar bu işlemler sil baştan tekrar edilir.
Örnek vermek gerekirse:
2,3,4,5,6,7,8,9,22,33,45 elemanlarından oluşan sıralı dizilerde 4 elemanı iç ikili aramanın bulunması için şu şekilde hareket edilmelidir:


k-rm-z-ayrac.png


C++ Örnek


mkoq4za.png


İlk olarak dizinin orta elemanı olarak seçilerek aranan elemanın olan 4 ile karşılaştırılması yapılır.
Aranan eleman 4 ve ortadaki eleman 7 eşit olmadığı için dizinin orta kısmındaki eleman bölmesinde 7’den küçük olan tarafa bakılır.
Yani aranacak olan yeni dizimiz: 2,3,4,5,6 ‘dır.

Yeni arama dizininde ortadaki eleman 4 olacaktır. Arama işlemi bu kez bu dizin için tekrar edilerek arama işlemi tamamlanır.

İkili algoritma sisteminde sıralı bir dizin için arama yapılmak isteniyorsa en fazla log2N karşılaştırması yapılarak sonuca gidilmelidir.

İkili arama algoritması için örekteki gibi sıralı dizinlerde uygulama yapıldığında yeni bir algoritma kodu oluşturulmuş olur.




turkuazayrac.png




Linear Search Algoritması


Linear Search Algoritması basit olarak bir verinin bir dizi içinde olup olmadığını anlaşılmasına yarayan basit bir algoritmadır.
Diziye algoritma dilinde array denilmektedir. Linear Search Algoritması'nın Türkçesi Doğrusal Arama olarak karşımıza çıkmaktadır.
Mantığı da oldukça basittir. Eğer veri dizi yani array'ın içinde yoksa -1 değerini verir yani -1'i gördüğünüz vakit aranan veri dizi içinde yok demektir.
Linear Search Algoritması'nda 2 farklı durum söz konusudur. Bu iki durumu alt başlıklar halinde inceleyelim.


k-rm-z-ayrac.png


Array'ın (Dizinin) Sıralı Olması

Array'ın sıralı olması durumu en az sırasız olması kadar karşılaşılan bir durumdur.
Eğer dizi sıralı bir şekildeyse ve öge sayısı da çok fazla değilse bu durumda Linear Search Algoritması tercih edilmektedir.
Fakat öge sayısı fazlaysa da Linear Seach Algoritması yerine genel olarak Binary Search tercih edilmektedir.



k-rm-z-ayrac.png


Array'ın (Dizinin) Sırasız Olması

Sırasız bir şekilde olması durumunda Linear Serach Algoritmasında tek tek arama olacaktır.
Örnek vermek gerekirse 20,19,30,45,37 şeklinde bir sıralama olduğunu ve 45 sayısının arandığını düşünelim.
Bu durumda öncelikle 20 sayısına bakılacak eşit olmadığı görüldüğü vakit de 45'e kadar gidecektir.
Yani dizinin sırasız olması ve sıralı olması arasında pek de bir fark yok gibi gözükmektedir.
Çünkü Linear Search'in buradaki mantığı tamamen aynıdır sıradan tek tek gitmektedir.
İşte buradaki farkı oluşturan unsur Binary Search'te karşımıza çıkmaktadır.

k-rm-z-ayrac.png

Linear Search ve Binary Search Uygulamasının Farkları


İki uygulama arasında oldukça önemli bir fark vardır. Öncelikle Linear Search küçük sayıda veri varsa tercih edilmektedir.
1 milyon veri arasından tek tek verinin arandığını düşünün. Bu tür bir durumda Linear Search ile veriyi bulmak sistemi epey bir zorlayacaktır ve epey de bir zaman alır.
İşte bu tür durumlarda Binary Search oldukça etkilidir. Fakat Binary Search için dizinin sıralı olması gerekir sırasız bir dizi varsa Linear Search uygulanacaktır.


k-rm-z-ayrac.png


C++ Örnek

2eucdxl.png


Örnekle daha net bir şekilde anlaşılacaktır. Örnek olduğu için az sayıda bir veriyle örnek oluşturalım.
1,5,7,10,12,14,15 yani 7 sayılı bir veri olsun ve aranan sayı da 14 olsun.
Binary Search'te önce ortadaki veri kontrol edilir yani örneğimizde 10. 10<14 olduğu vakit sağ taraftan kontrole devam eder.
12<14 olduğu zaman da 14=14 olur ve 3.hamlede veri bulunmuş olacaktır.



turkuazayrac.png




Selection Sort Algoritması

Selection Sort Algoritması yani sıralama algoritmalarından bir tanesidir.
O(n2) grubunda yer alan bu algoritma bu sebeple çok büyük sayıda verilerin sıralamasında pek tercih edilmeyen bir algoritma olarak karşımıza çıkmaktadır.
Bubble sort algoritması takas işlemlerinde pek etkili bir algoritma değildir bu sebeple genel olarak
selection sort algoritmasını bubble sort algoritmasının geliştirilmiş hali olarak görürler.
Çalışma ilkesini kısaca incelemek gerekirse;

Listedeki en küçük değeri bul.

Sonrasında bulduğun bu en küçük değeri ilk sıraya al.

Bu işlemi tüm algoritma doğru olana kadar yenile.


k-rm-z-ayrac.png



Selection Sort Algoritması Örneği


6 sayıdan oluşan bir algoritmadan örnek sunalım. Öncelikle A ifadesi sıralanacak ögeleri temsil ederken, n ifadesi de öge sayısını temsil etmektedir.
a= 5, 20, 88, -10, 8, -13 ve 39 sayılarından gidelim. Öncelikle a sıfırdan başlamaktadır.
Yani a (0) 5 ilen a (6) ise 39'dur. Şimdi selection sort algoritmasını adım adım inceleyelim.

1.adımda 5,20,88,-10,8,-13,39 sıralamasının yanlış bi sıralama olduğu görülmektedir.
İşte bu durumda listedeki en küçük sayıyı incelemek gerekecektir. Listedeki en küçük sayı-13'tür.
Bu sebeple 5 ve -13 arasında bir takas yapılması zorunludur. -13 6.sırada yani a(5)'tedir. Bu sebeple minIndex=5 yapıyoruz.
Bu işlemi yaptıktan sonra sıralama -13,20,88,-10,8,5,39 olarak değişiyor. -13 bu saatten sonra sıralı indexe dahil oluyor.
Diğer sayılar hala sırasız indexe dahil.


2.adımda -13,20,88,-10,8,5,39 sıralamasının hala yanlış olduğunu görüyoruz.
Bunun için listedeki en küçük ikinci sayının -10 olduğunu görüyoruz. minIndex=3 yaparak 20 ve -10'un yeri değişecektir.
Yani artık yeni sıralama -13,-10,88,20,8,5,39 şeklindedir.


3.adımda artık -13 ve -10 sıralı indexte fakatı diğer sayılar hala yanlış olduğu için sırasız indextedir.
88,20,8,5,39 sıralamasında en küçük sayı 5 olduğu için 88 ile 5'in yerini değiştiriyoruz.
Sonrasında -13,-10,5, 20,8,88,39 şeklindedir.
20 ile 8'in yerini değiştiriyoruz. -13,-10,5,8,20,88,39 sıralamasında son olarak 88 ve 39'un yerini değiştirdiğimiz vakit doğru bir şekilde sıralama yapmış oluyoruz.


Yani Selection Sort Algoritması bu temel mantığa dayanmaktadır.
Karışık verilen sayıların doğru şekilde sıralanmasına kadar değişiklik yani takas işlemi yapılmaktadır ve takas işlemi tamamlanınca da doğru sıralama yapılmış olacaktır.

k-rm-z-ayrac.png


C++ Örnek

hod4r8u.png


turkuazayrac.png
 

Eagleweb

Uzman üye
8 May 2021
1,465
655
Merhaba,
Emeğinize Sağlık Algoritmaların önemi prgramlama camiası için önemlidir, bir çok kişi başlangıçta Kodlama ögrenmeye girişse de ilk önce algoritmalar ögrenilmeli ve konunuzda bahsettiğiniz algoritma gibi farklı algoritma tipleri incelenmeli


7h458cd.gif
 

KaptanTR

Yazılım Ekibi Deneyimli
17 Nis 2015
988
259

Phoenix.py

Katılımcı Üye
9 Tem 2021
523
257
THT
sbjb185.png


Binary Search Algoritması

Bir dizide arama yapmaya yardımcı olan algoritma arama araçlarındadır.
İkili arama algoritması işleminde aranılan elemanı bulmak için her seferinde dizinin ortasındaki elemana bakılarak ilerlenir.
Ortadaki eleman aranan elemana eşit değilse bu kez arananın elemanın bulunduğu diğer yarı taraf bölgesinde arama işlemi yinelenir.
Böylelikle her arama işleminde arama uzayı yarıya iner ve algoritmayı daha kolay ve hızlı bir şekilde kullanma avantajı yakalarsınız.
İkili algoritmada arama yapmak istediğiniz her dizinin sıralı bir şekilde sıralanmış olması gerekir.
Özellikle sıralı olamayan dizilerde ikili arama yapabilmek için, ilk olarak diziler sıralı olarak belirli bir düzene göre sıraya konulmalıdır.


k-rm-z-ayrac.png


Binary Search Algoritması Örneği

İlk olarak dizinin ortasındaki elemanı seçin. Seçtiğiniz elemanı karşılaştırdığınızda, aranan elemana eşitse işlem sonlandırın.
Aradığınız eleman seçilen elemandan büyük ise, seçtiğiniz elemanı büyük olan kısmalarında arama işlemi tekrar edin.
Aranan eleman seçilen elemandan küçükse bu kez dizinin seçilen küçük eleman kısmında işlemi tekrarlayın.
Arama uzayında en küçük indis en büyük indisten küçük ya da eşit oluncaya kadar bu işlemler sil baştan tekrar edilir.
Örnek vermek gerekirse:
2,3,4,5,6,7,8,9,22,33,45 elemanlarından oluşan sıralı dizilerde 4 elemanı iç ikili aramanın bulunması için şu şekilde hareket edilmelidir:


k-rm-z-ayrac.png


C++ Örnek


mkoq4za.png


İlk olarak dizinin orta elemanı olarak seçilerek aranan elemanın olan 4 ile karşılaştırılması yapılır.
Aranan eleman 4 ve ortadaki eleman 7 eşit olmadığı için dizinin orta kısmındaki eleman bölmesinde 7’den küçük olan tarafa bakılır.
Yani aranacak olan yeni dizimiz: 2,3,4,5,6 ‘dır.

Yeni arama dizininde ortadaki eleman 4 olacaktır. Arama işlemi bu kez bu dizin için tekrar edilerek arama işlemi tamamlanır.

İkili algoritma sisteminde sıralı bir dizin için arama yapılmak isteniyorsa en fazla log2N karşılaştırması yapılarak sonuca gidilmelidir.

İkili arama algoritması için örekteki gibi sıralı dizinlerde uygulama yapıldığında yeni bir algoritma kodu oluşturulmuş olur.




turkuazayrac.png




Linear Search Algoritması


Linear Search Algoritması basit olarak bir verinin bir dizi içinde olup olmadığını anlaşılmasına yarayan basit bir algoritmadır.
Diziye algoritma dilinde array denilmektedir. Linear Search Algoritması'nın Türkçesi Doğrusal Arama olarak karşımıza çıkmaktadır.
Mantığı da oldukça basittir. Eğer veri dizi yani array'ın içinde yoksa -1 değerini verir yani -1'i gördüğünüz vakit aranan veri dizi içinde yok demektir.
Linear Search Algoritması'nda 2 farklı durum söz konusudur. Bu iki durumu alt başlıklar halinde inceleyelim.


k-rm-z-ayrac.png


Array'ın (Dizinin) Sıralı Olması

Array'ın sıralı olması durumu en az sırasız olması kadar karşılaşılan bir durumdur.
Eğer dizi sıralı bir şekildeyse ve öge sayısı da çok fazla değilse bu durumda Linear Search Algoritması tercih edilmektedir.
Fakat öge sayısı fazlaysa da Linear Seach Algoritması yerine genel olarak Binary Search tercih edilmektedir.



k-rm-z-ayrac.png


Array'ın (Dizinin) Sırasız Olması

Sırasız bir şekilde olması durumunda Linear Serach Algoritmasında tek tek arama olacaktır.
Örnek vermek gerekirse 20,19,30,45,37 şeklinde bir sıralama olduğunu ve 45 sayısının arandığını düşünelim.
Bu durumda öncelikle 20 sayısına bakılacak eşit olmadığı görüldüğü vakit de 45'e kadar gidecektir.
Yani dizinin sırasız olması ve sıralı olması arasında pek de bir fark yok gibi gözükmektedir.
Çünkü Linear Search'in buradaki mantığı tamamen aynıdır sıradan tek tek gitmektedir.
İşte buradaki farkı oluşturan unsur Binary Search'te karşımıza çıkmaktadır.

k-rm-z-ayrac.png

Linear Search ve Binary Search Uygulamasının Farkları


İki uygulama arasında oldukça önemli bir fark vardır. Öncelikle Linear Search küçük sayıda veri varsa tercih edilmektedir.
1 milyon veri arasından tek tek verinin arandığını düşünün. Bu tür bir durumda Linear Search ile veriyi bulmak sistemi epey bir zorlayacaktır ve epey de bir zaman alır.
İşte bu tür durumlarda Binary Search oldukça etkilidir. Fakat Binary Search için dizinin sıralı olması gerekir sırasız bir dizi varsa Linear Search uygulanacaktır.


k-rm-z-ayrac.png


C++ Örnek

2eucdxl.png


Örnekle daha net bir şekilde anlaşılacaktır. Örnek olduğu için az sayıda bir veriyle örnek oluşturalım.
1,5,7,10,12,14,15 yani 7 sayılı bir veri olsun ve aranan sayı da 14 olsun.
Binary Search'te önce ortadaki veri kontrol edilir yani örneğimizde 10. 10<14 olduğu vakit sağ taraftan kontrole devam eder.
12<14 olduğu zaman da 14=14 olur ve 3.hamlede veri bulunmuş olacaktır.



turkuazayrac.png




Selection Sort Algoritması

Selection Sort Algoritması yani sıralama algoritmalarından bir tanesidir.
O(n2) grubunda yer alan bu algoritma bu sebeple çok büyük sayıda verilerin sıralamasında pek tercih edilmeyen bir algoritma olarak karşımıza çıkmaktadır.
Bubble sort algoritması takas işlemlerinde pek etkili bir algoritma değildir bu sebeple genel olarak
selection sort algoritmasını bubble sort algoritmasının geliştirilmiş hali olarak görürler.
Çalışma ilkesini kısaca incelemek gerekirse;

Listedeki en küçük değeri bul.

Sonrasında bulduğun bu en küçük değeri ilk sıraya al.

Bu işlemi tüm algoritma doğru olana kadar yenile.


k-rm-z-ayrac.png



Selection Sort Algoritması Örneği


6 sayıdan oluşan bir algoritmadan örnek sunalım. Öncelikle A ifadesi sıralanacak ögeleri temsil ederken, n ifadesi de öge sayısını temsil etmektedir.
a= 5, 20, 88, -10, 8, -13 ve 39 sayılarından gidelim. Öncelikle a sıfırdan başlamaktadır.
Yani a (0) 5 ilen a (6) ise 39'dur. Şimdi selection sort algoritmasını adım adım inceleyelim.

1.adımda 5,20,88,-10,8,-13,39 sıralamasının yanlış bi sıralama olduğu görülmektedir.
İşte bu durumda listedeki en küçük sayıyı incelemek gerekecektir. Listedeki en küçük sayı-13'tür.
Bu sebeple 5 ve -13 arasında bir takas yapılması zorunludur. -13 6.sırada yani a(5)'tedir. Bu sebeple minIndex=5 yapıyoruz.
Bu işlemi yaptıktan sonra sıralama -13,20,88,-10,8,5,39 olarak değişiyor. -13 bu saatten sonra sıralı indexe dahil oluyor.
Diğer sayılar hala sırasız indexe dahil.


2.adımda -13,20,88,-10,8,5,39 sıralamasının hala yanlış olduğunu görüyoruz.
Bunun için listedeki en küçük ikinci sayının -10 olduğunu görüyoruz. minIndex=3 yaparak 20 ve -10'un yeri değişecektir.
Yani artık yeni sıralama -13,-10,88,20,8,5,39 şeklindedir.


3.adımda artık -13 ve -10 sıralı indexte fakatı diğer sayılar hala yanlış olduğu için sırasız indextedir.
88,20,8,5,39 sıralamasında en küçük sayı 5 olduğu için 88 ile 5'in yerini değiştiriyoruz.
Sonrasında -13,-10,5, 20,8,88,39 şeklindedir.
20 ile 8'in yerini değiştiriyoruz. -13,-10,5,8,20,88,39 sıralamasında son olarak 88 ve 39'un yerini değiştirdiğimiz vakit doğru bir şekilde sıralama yapmış oluyoruz.


Yani Selection Sort Algoritması bu temel mantığa dayanmaktadır.
Karışık verilen sayıların doğru şekilde sıralanmasına kadar değişiklik yani takas işlemi yapılmaktadır ve takas işlemi tamamlanınca da doğru sıralama yapılmış olacaktır.

k-rm-z-ayrac.png


C++ Örnek

hod4r8u.png


turkuazayrac.png
elinize sağlık hocam
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.