Uploaded by common.user17991

Algoritmalar: Tanım, Tipler ve Tasarım Paradigmalari

ALGORİTMALAR
Algoritmalar, problemleri çözmek için adım adım prosedürlerdir.
ALGORİTMA
NEDİR?
Algoritma, bir
mekanik kural veya
otomatik metot veya
bazı matematiksel işlemlerin
düzenlenmesi için programdır.
Algoritma, açık olarak tanımlanmış olan ve herhangi bir bilgisayarda
icra edilen bir prosedürdür.
ALGORİTMA TİPLERİ
• ALGORİTMALARI;
➢ KULLANIM AMAÇLARI,
➢ DİZAYN PARADİGMALARI,
➢ UYGULAMA ALANLARI VE
➢ KARMAŞIKLIKLARI GİBİ PEK ÇOK AÇIDAN SINIFLANDIRMAK MÜMKÜNDÜR.
ÖZYINELEMELI
(RECURSIVE)
VEYA DÖNGÜLÜ
(ITERATIVE)
ALGORITMALAR
• ÖZYİNELEMELİ VE DÖNGÜLÜ ALGORİTMALARIN HER İKİSİ
DE TEKRARLI BİR YAPIYA SAHİPTİR.
• ÖZYİNELEMELİ ALGORİTMALAR, BELİRLİ BİR KOŞUL
GERÇEKLEŞENE KADAR SÜREKLİ OLARAK KENDİSİNİ
ÇAĞIRMAKTADIRLAR.
• BAŞKA BİR İFADEYLE ALGORİTMANIN İÇERİSİNDE
KENDİNDEN BİR PARÇA YER ALIYORSA ÖZYİNELEMELİ
OLARAK NİTELENDİRİLİR.
ÖZYINELEMELI
(RECURSIVE)
VEYA DÖNGÜLÜ
(ITERATIVE)
ALGORITMALAR
Öte yandan algoritma kendisinden
bir parça içermeden tekrarlıyorsa
döngülü algoritma olarak
isimlendirilir.
Teorik olarak tüm özyinelemeli
algoritmaları döngülü olarak
yazmak mümkündür.
Bu durumun tersi de geçerlidir yani
tüm döngülü algoritmaları
özyinelemeli olarak yazmakta
mümkündür.
• PROSEDÜREL VEYA EMİRLİ ALGORİTMALAR OLARAK TA
BİLİNMEKTEDİR.
PROSEDÜREL
(PROCEDURAL)
VEYA
TANIMLAMALI
(DECLARATIVE)
ALGORITMALAR
• BU YAKLAŞIMDA PROGRAMI MEYDANA GETİREN
KOMUTLARIN ADIM ADIM EMİRLER ŞEKLİNDE
TANIMLANMASI GEREKİR.
• TANIMLAMALI ALGORİTMALAR İSE BUNUN AKSİNE
HESAPLAMANIN NASIL YAPILACAĞINDAN ZİYADE NEYİN
HESAPLANMASI GEREKTİĞİNE ODAKLANIR.
• HER İKİ YAKLAŞIM BİR KEK TARİFİ ÖRNEĞİ ŞU ŞEKİLDE
AÇIKLANABİLİR:
• EMİRLİ ALGORİTMALAR
• 1 BARDAK UN KOY
PROSEDÜREL
(PROCEDURAL)
VEYA
TANIMLAMALI
(DECLARATIVE)
ALGORITMALAR
• 1 BARDAK ŞEKER EKLE
• 1 ADET YUMURTA EKLE
• HEPSİNİ KARIŞTIR
• KARIŞIMI TEPSİYE DÖK
• FIRINI 15 DAKİKA 200 C’YE AYARLA
• TEPSİYİ FIRINA KOY
• TANIMLAMALI ALGORİTMALAR
PROSEDÜREL
(PROCEDURAL)
VEYA
TANIMLAMALI
(DECLARATIVE)
ALGORITMALAR
• 1 BARDAK UN, 1 BARDAK ŞEKER, 1 YUMURTA (BAŞLANGIÇ
DURUMU)
• KURALLAR
• HER ŞEY KARIŞMIŞSA TEPSİYE KOY
• HER ŞEY KARIŞMAMIŞSA KASEYE KOY
• HER ŞEY TEPSİDEYSE FIRINA KOY
PROSEDÜREL
(PROCEDURAL)
VEYA
TANIMLAMALI
(DECLARATIVE)
ALGORITMALAR
• YUKARIDAKİ ÖRNEKTE DE GÖRÜLDÜĞÜ GİBİ;
• EMİRLİ ALGORİTMALAR İŞLEMLERİN NASIL YAPILMASI
GEREKTİĞİNE ODAKLANIRKEN,
• TANIMLAMALI ALGORİTMALAR İSE NEYİN YAPILMASI
GEREKTİĞİNE ODAKLANIRLAR.
Algoritmalar tasarlanırken genellikle bilgisayarların ilgili
algoritmanın aynı anda tek bir komutu icra ettiği varsayımı ile
geliştirilirler.
SERI VEYA
PARALEL
ALGORITMALAR
Bu tip algoritmalar seri algoritmalar olarak tanımlanır.
Paralel algoritmalar ise bunun aksine gelişen bilgisayar
mimarisinin sağladığı çoklu çekirdek ve iplik (thread) avantajını
dikkate alarak aynı anda birden fazla komut icra ederler.
Bu yaklaşımda sorun alt problemlere bölünerek her birinin
ayrı ayrı çalışması sağlanır.
BELIRLI
(DETERMINISTIC)
VEYA BELIRSIZ
(NONDETERMINISTIC)
ALGORITMALAR
• BELİRLİ ALGORİTMALAR PROBLEMİ ÖNCEDEN
TANIMLANMIŞ BİR SÜREÇLE ÇÖZER,
• BELİRSİZ ALGORİTMALAR İSE SEZGİSEL YAKLAŞIMLAR
KULLANILMASI NEDENİYLE HER ADIMDA EN İYİ ÇÖZÜM
TAHMİNLERİNİ YAPMAYA ODAKLANIR.
BELIRLI
(DETERMINISTIC)
VEYA BELIRSIZ
(NONDETERMINISTIC)
ALGORITMALAR
Belirli algoritmalarda, belirli
bir girdi için, bilgisayar her
zaman aynı durumlardan
geçerek aynı çıkışı
üretecektir.
Ancak belirsiz
algoritmalarda, aynı girdi
için, derleyici farklı
işlemlerde farklı çıktılar
üretebilir.
Belirsiz algoritmalar, aynı
uygulama için her bir
çalıştırmada farklı
davranışlar gösterebilir ve
bunun için bir dereceye
kadar rastlantısallık vardır.
Dolayısıyla belirsiz
algoritmalar problemi
polinom zaman içerisinde
çözemediği gibi bir sonraki
adımın ne olduğunu da
belirleyemez.
• DOĞRUSAL PROGRAMLAMA
• BÖL VE FETHET (DIVIDE AND CONQUER) ALGORITMASI
• AÇGÖZLÜ (GREEDY) ALGORITMA
DİZAYN
PARADİGMALARI
AÇISINDAN
ALGORİTMALARIN
SINIFLANDIRILMASI
• DINAMIK PROGRAMLAMA
• GERI İZLEME (BACKTRACKING) ALGORITMASI
• DALLANMA VE SINIRLANDIRMA (BRANCH AND
BOUNDING) YAKLAŞIMI
• GRAPH ALGORITMALARI
• OLASILIKSAL (PROBABILISTIC) VE SEZGİSEL (HEURİSTİC)
ALGORİTMALAR
DOĞRUSAL PROGRAMLAMA
• DOĞRUSAL OPTİMİZASYON OLARAK DA BİLİNEN DOĞRUSAL PROGRAMLAMA, KARMAŞIK
İLİŞKİLERİN DOĞRUSAL FONKSİYONLAR İLE İFADE EDİLEREK GİRDİLERİN MAKSİMİZE VEYA
MİNİMİZE EDİLMEYE ÇALIŞILDIĞI BİR YAKLAŞIMDIR.
• BİLGİSAYAR MODELLEME VEYA SİMÜLASYONUNDA MAKİNE KAYNAKLARI, PARA, ENERJİ, İNSAN
GÜCÜ, MEKAN VE ZAMAN GİBİ SONLU KAYNAĞA SAHİP BİRÇOK DEĞİŞKENİ TAHSİS ETMEDE
EN İYİ ÇÖZÜMÜ BULMAK İÇİN EN SIK KULLANILAN YÖNTEMLERDEN BİR TANESİDİR.
• BİRÇOK DURUMDA, DOĞRUSAL PROGRAMLAMANIN SAĞLAMAYA ÇALIŞTIĞI EN İYİ SONUÇ
MAKSİMUM KAR VEYA EN DÜŞÜK MALİYETTİR.
BÖL VE FETHET (DIVIDE AND CONQUER)
ALGORITMASI
• BÖL VE FETHET ALGORİTMALARI BİR PROBLEMİ;
➢ AYNI TİPTE DAHA KOLAY ÇÖZÜLEBİLECEK KÜÇÜK ALT PROBLEMLERE BÖLEREK
➢ HER BİR PARÇAYI AYRI AYRI ÇÖZMEYİ VE
➢ SONRASINDA DA ELDE EDİLEN ÇÖZÜMLERİ BİRLEŞTİREREK NİHAİ SONUCU BULMAYI HEDEFLER.
BÖL VE FETHET (DIVIDE AND CONQUER)
ALGORITMASI
• BU ALGORİTMAYI ÜÇ TEMEL ADIMDAN OLUŞACAK BİÇİMDE ŞU ŞEKİLDE ÖZETLEMEK
MÜMKÜNDÜR:
1.
BÖL: PROBLEMİ AYNI TİPTE DAHA KÜÇÜK ALT PARÇALARA AYIR
2.
FETHET: HER BİR ALT PROBLEMİ YİNELEMELİ ŞEKİLDE ÇÖZ
3.
BİRLEŞTİR: ELDE EDİLEN SONUÇLARI UYGUN ŞEKİLDE BİRLEŞTİR.
AÇGÖZLÜ (GREEDY) ALGORITMA
• AÇGÖZLÜ ALGORİTMALAR PARÇA PARÇA ÇÖZÜM OLUŞTURAN BİR YÖNTEMDİR.
• SEÇİLECEK BİR SONRAKİ PARÇA İÇİN HER ZAMAN EN AÇIK VE EN YAKIN KATKIYI SAĞLAYAN
PARÇAYI KULLANIR.
• YEREL OPTİMUMLARI KULLANMANIN GLOBAL SONUCA KATKI SAĞLADIĞI PROBLEMLER İÇİN
İDEALDİR.
• FAKAT YEREL OPTİMUMLARI KULLANMAK HER ZAMAN EN DOĞRU SONUCU BULMAYI GARANTİ
ETMEZ.
DINAMIK PROGRAMLAMA
• DİNAMİK PROGRAMLAMA BÖL VE FETHET YÖNTEMİNE OLDUKÇA BENZEMEKTEDİR.
• BU YAKLAŞIMDA DA PROBLEMLER KÜÇÜK ALT PARÇALARA BÖLÜNÜR VE HER BİR PARÇANIN
ÇÖZÜMÜ ELDE EDİLİR.
• FAKAT BÖL VE FETHET ALGORİTMASINDAN FARKLI OLARAK HAFIZA TABANLI BİR VERİ YAPISI
KULLANILARAK HER BİR ÇÖZÜMÜN SONUCU SAKLANIR.
• İLERLEYEN SEFERLERE AYNI ALT PROBLEMİN ORTAYA ÇIKMASI DURUMUNDA PROBLEMİ TEKRAR
ÇÖZMEDEN HAFIZADAKİ SONUCU KULLANIR.
• BÖYLELİKLE PROBLEMİN ÇÖZÜM SÜRESİNİN KISALTILMASI HEDEFLENİR.
GERI İZLEME (BACKTRACKING) ALGORITMASI
• GERİ İZLEME ALGORİTMA YAKLAŞIMINDA OLASI BİR NOKTADAN BAŞLANARAK ÇÖZÜM İÇİN
YOLLAR ARANIR.
• EĞER BİR NOKTADA PROBLEM İÇİN VERİLEN KISITLAR SAĞLANMIYORSA BU NOKTADAN GERİ
DÖNÜLEREK ÇÖZÜM İÇİN BAŞKA YOLLAR ARANMAKTADIR.
• BAŞKA BİR DEYİŞLE,
➢ ART ARDA, HER SEFERİNDE BİR PARÇA OLUŞTURARAK,
➢ SORUNUN SINIRLAMALARINI HERHANGİ BİR ZAMANDA YERİNE GETİREMEYEN ÇÖZÜMLERİ BULUR VE
➢ BUNLARI KALDIRARAK NİHAİ ÇÖZÜME OLUŞMAYI AMAÇLAR.
GERI İZLEME (BACKTRACKING) ALGORITMASI
• BU ALGORİTMA TİPİ İÇİN SUDOKU PROBLEMİNİN ÇÖZÜMÜ ÖRNEK OLARAK VERİLEBİLİR.
• SUDOKU PROBLEMİNDE TEK TEK SAYILAR DENENEREK ÇÖZÜMÜ SAĞLAYIP SAĞLAMADIĞI
KONTROL EDİLİR.
• EĞER KULLANILAN SAYI BİR NOKTADA ÇÖZÜMÜ SAĞLAYAMAZSA BURADAN GERİ DÖNÜLEREK
DİĞER SAYILAR KULLANILARAK ÇÖZÜME ULAŞILIR.
DALLANMA VE SINIRLANDIRMA (BRANCH AND
BOUNDING) YAKLAŞIMI
• DALLANMA VE SINIRLANDIRMA YAKLAŞIMI GENELLİKLE KOMBİNASYONAL OPTİMİZASYON
PROBLEMLERİNİ ÇÖZMEK İÇİN KULLANILAN BİR ALGORİTMA TASARIM PARADİGMASIDIR.
• KOMBİNASYONAL OPTİMİZASYON PROBLEMLERİ, ZAMAN KARMAŞIKLIĞI AÇISINDAN TİPİK
OLARAK ÜSTELDİR VE EN KÖTÜ DURUMDA TÜM OLASI ÇÖZÜMLERİN DENENMESİNİ
GEREKTİREBİLİR.
• DAL VE SINIR ALGORİTMASI TEKNİĞİ BU PROBLEMLERİ NİSPETEN HIZLI BİR ŞEKİLDE
ÇÖZÜLMESİNE OLANAK SAĞLAR.
DALLANMA VE SINIRLANDIRMA (BRANCH AND
BOUNDING) YAKLAŞIMI
• DALLANMA VE SINIRLANDIRMA YAKLAŞIMINDA, TÜM ADAY ÇÖZÜMLER SİSTEMATİK OLARAK
SIRALANIR.
• SONRASINDA BU ADAY ÇÖZÜMLERDEN AÇIKÇA İMKANSIZ OLAN ÇÖZÜMLER ELDEN
ÇIKARTILARAK ARAMA İŞLEMİNİN DAHA HIZLI BİR ŞEKİLDE GERÇEKLEŞTİRİLMESİ SAĞLANIR.
• BU ALGORİTMİK YAKLAŞIM GENELLİKLE TÜM OLASI ÇÖZÜMLERİN BİR SEÇENEK DİZİSİ ŞEKLİNDE
GÖSTERİLEBİLECEĞİ SONLU PROBLEMLER İÇİN UYGULANIR.
Graph Algoritmaları
• GRAPHLAR SONLU SAYIDA DÜĞÜM VE BU DÜĞÜMLERİ BİRBİRİNE BAĞLAYAN KENARLARDAN
OLUŞUR
• PEK ÇOK GERÇEK DÜNYA PROBLEMİNİN ÇÖZÜMÜ İÇİN OLDUKÇA UYGUN BİR YAPIYA
SAHİPTİR.
• ÖZELLİKLE AĞ BENZERİ YAPILARI TEMSİL ETMEK İÇİN OLDUKÇA İDEALDİR.
GRAPH ALGORITMALARI
• BURADAKİ AĞ KAVRAMI İNTERNET ŞEBEKESİNDEKİ ROUTERLAR VE BUNLAR ARASINDAKİ
BAĞLANTILAR OLABİLECEĞİ GİBİ
• ŞEHİRLER ARASINDAKİ YOLLAR,
• TELEFON ŞEBEKESİ VE ELEKTRİK ŞEBEKESİ GİBİ BİRÇOK BENZER YAPI OLABİLİR.
• BUNLARIN YANI SIRA FACEBOOK VE TWİTTER GİBİ SOSYAL MEDYA PLATFORMLARI DA AĞ
YAPILARINA İYİ BİRER ÖRNEKTİR.
• GRAPHLAR DİĞER DERSLERDE DAHA DETAYLI BİR ŞEKİLDE ELE ALINACAKTIR
OLASILIKSAL (PROBABILISTIC) VE SEZGİSEL
(HEURİSTİC) ALGORİTMALAR
• BU BÖLÜMDE ALGORİTMALARI FARKLI ALT BAŞLIKLARA AYIRMAK MÜMKÜNDÜR. BURADA 3
TEMEL ALT BAŞLIK ALTINDA DEĞERLENDİRME YAPILACAK.
OLASILIKSAL (PROBABILISTIC) VE SEZGİSEL
(HEURİSTİC) ALGORİTMALAR
1.
OLASILIKSAL ALGORİTMALAR BELİRSİZ (NON-DETERMİNİSTİC) ALGORİTMALARDIR.
• HERHANGİ BİR NOKTADA NE YAPILACAĞINA KARAR VERMEK İÇİN RASGELE SEÇİMLER YAPARAK
HAREKET EDERLER.
• BU ALGORİTMALAR TEMELDE STANDART ALGORİTMALARA KIYASLA UZAY VE ZAMAN
KARMAŞIKLIĞINI AZALTMAYI HEDEFLERLER
OLASILIKSAL (PROBABILISTIC) VE SEZGİSEL
(HEURİSTİC) ALGORİTMALAR
2. GENETİK ALGORİTMALAR DOĞAL SELEKSİYON FİKRİNDEN HAREKETLE TÜRETİLMİŞ UYARLAMALI SEZGİSEL
ALGORİTMALARDIR.
• BU ALGORİTMALAR DOĞAL SELEKSİYON SÜRECİNİ SİMÜLE EDERLER.
• DOLAYISIYLA ORTAMLARINDAKİ DEĞİŞİKLİKLERE UYUM SAĞLAYABİLEN TÜRLERİN HAYATTA KALABİLECEKLERİ,
ÇOĞALABİLECEKLERİ VE GELECEK NESİLLERE AKTARILABİLECEKLERİ ANLAMINA GELİR.
• BASİT BİR DEYİŞLE, BİR PROBLEMİ ÇÖZMEK İÇİN ARDIŞIK NESİLLER ARASINDA EN GÜÇLÜLERİN HAYATTA KALMASI
FİKRİNİ TEMSİL EDERLER.
• HER NESİL, BİR BİREY POPÜLASYONUNDAN MEYDANA GELİR. HER BİREYDE ARAMA ALANINDA VE OLASI
ÇÖZÜMDE BİR NOKTAYI TEMSİL EDER.
OLASILIKSAL (PROBABILISTIC) VE SEZGİSEL
(HEURİSTİC) ALGORİTMALAR
3. SEZGİSEL ALGORİTMALAR KAYNAKLAR VE ZAMAN DİKKATE ALINDIĞINDA OPTİMAL ÇÖZÜMÜ
BULMANIN PRATİK OLMADIĞI DURUMLAR İÇİN TERCİH EDİLEN ALGORİTMALARDIR.
• BURADA AMAÇ KESİN SONUCU BULMAK DEĞİL YAKLAŞIK OLARAK EN İYİ DEĞERİ ELDE
ETMEKTİR.
ALGORİTMALARIN KARMAŞIKLIĞI
• BİR ALGORİTMANIN KARMAŞIKLIĞI, BU ALGORİTMANIN ÇALIŞMA ZAMANI İLE İLGİLİ BİR
KAVRAMDIR.
• BİR ALGORİTMANIN ÇALIŞMA ZAMANI OLARAK DA İSİMLENDİRİLEN ALGORİTMANIN
GEREKSİNİMİ OLAN ZAMAN, VERİNİN HEM YAPISINA HEM DE BOYUTUNA BAĞLIDIR.
ALGORİTMALARIN KARMAŞIKLIĞI
• BÜYÜK PROBLEMLER ÇOK DAHA FAZLA ÇÖZÜM ZAMANI GEREKTİRİRKEN;
➢ VERİDEKİ FARKLILIKLARA BAĞLI OLARAK AYNI BOYUTTAKİ DEĞİŞİK PROBLEMLER BELİRGİN OLARAK
FARKLI ÇÖZÜM ZAMANLARI GEREKTİRİRLER.
• BİR ALGORİTMANIN KARMAŞIKLIK FONKSİYONU;
➢ PROBLEM UZAYI BOYUTUNUN BİR FONKSİYONUDUR VE
➢ VERİLEN BOYUTUN ZAMANININ HERHANGİ BİR PROBLEM ÖRNEĞİNİ ÇÖZMEK İÇİN ALGORİTMA
TARAFINDAN İHTİYAÇ DUYULAN EN GENİŞ ZAMANI BELİRTİR.
• BİR BAŞKA DEYİŞLE, ZAMAN KARMAŞIKLIĞI FONKSİYONU, PROBLEMİN BOYUTU ARTTIKÇA
ÇÖZÜM ZAMANININ GELİŞME HIZINI ÖLÇER.
ALGORİTMALARIN KARMAŞIKLIĞI
• BURADA DİKKAT EDİLMESİ GEREKEN KONU, ZAMAN KARMAŞIKLIĞI FONKSİYONUNUN, VERİLEN
BİR PROBLEM UZAYI BOYUTUNDA HERHANGİ BİR PROBLEM ÖRNEĞİNİ ÇÖZMEK İÇİN GEREKEN
ÇALIŞMA ZAMANINI, ÇÖZÜM İÇİN GEREKLİ EN BÜYÜK ÇALIŞMA ZAMANINI ÖLÇEREK
HESAPLADIĞIDIR.
• KARMAŞIKLIK FONKSİYONU, ALGORİTMANIN PERFORMANSININ ÖLÇÜMÜNDE, PROBLEMİN
GİRİŞ VERİSİNİN UYGUN ÖLÇÜLMESİNE BAĞLI OLARAK BİR PERFORMANS GARANTİSİ SAĞLAR.
ALGORİTMALARIN KARMAŞIKLIĞI
• BİR ALGORİTMANIN ETKİNLİĞİ;
➢ EN KÖTÜ DURUMDA ALGORİTMA İÇİN GEREKEN ADIMLARIN SAYISINI SAYARAK VE
➢ BUNU PROBLEM UZAYI BOYUTU OLAN N’NİN BİR FONKSİYONU OLARAK,
➢ N BÜYÜDÜKÇE ÇALIŞMA ZAMANININ DAVRANIŞINI SAPTAMAKTIR.
1.
ALGORİTMALARIN
KARMAŞIKLIĞI İÇİN
KULLANILAN
TERMİNOLOJİ VE
İŞLEM ZAMANI
Karmaşıklık
1.
Terminoloji
O(1)
Sabit Karmaşıklık
O(log n)
Logaritmik Karmaşıklık
O(n)
Lineer Karmaşıklık
O(n logn)
nlogn
O(nb)
Polinom Karmaşıklık
O(bn), b>1
Üstel Karmaşıklık
O(n!)
Faktöriyel Karmaşıklık
Algoritmaların zaman karmaşıklığının tanımında kullanılan terminoloji.
ALGORİTMALARIN KARMAŞIKLIĞI İÇİN
KULLANILAN TERMİNOLOJİ VE İŞLEM ZAMANI
Problem
Uzunluğu
Kullanılan bit işlem
n
logn
n
nlogn
n2
2n
n!
10
3x10-9
10-8
3x10-8
10-7 s
10-6
3x10-3s
102
7x10-9
10-7
7x10-7
10-5 s
4x1013yıl
*
103
1x10-8
10-6
1x10-5
10-3 s
*
*
104
1.3x10-8
10-5
1x10-4
10-1 s
*
*
105
1.7x10-8
10-4
2x10-3
10 s
*
*
106
2x10-8
10-3
2x10-2
17 dakika
*
*
Tablo bit işlem sayısını göstermektedir. 10100 yıldan büyük zamanlar asterisk (*) ile
gösterilmiştir. Bu tablo yapılırken her bit işlemi 10-9 saniye alınmıştır.
ALGORİTMALARIN KARMAŞIKLIĞI İÇİN
KULLANILAN TERMİNOLOJİ VE İŞLEM ZAMANI
Problem uzayının boyutu n’ye göre bir
algoritmayı gerçekleştirmede f(n) hesaplama
adımlarının sayısı.
“O”, “”, “” Sembolleri
ALGORİTMALARIN
KARMAŞIKLIĞI İÇİN
KULLANILAN
TERMİNOLOJİ VE
İŞLEM ZAMANI
“O”: sembolü algoritmanın performansı üzerinde bir üst sınırı belirtir.
Problem uzayı boyutu olan n’nin yeterince büyük değerleri için algoritmanın
çalışma zamanında bir üst sınır belirlendiğinde O(f(n)) karmaşıklık ölçümü
çalışma zamanının asimptotik bir büyüme oranına sahip olmasına yol açar.
“” : sembolü, algoritmanın çalışma zamanı üzerinde bir alt sınırı belirtir
“” : sembolü bir algoritmanın performansı üzerinde hem alt hem de üst
sınırı belirtir
DİZİ = [41, 9, 8, 17, 5, 1, 23, 44, 7, 12, 27]
SONLU BİR
DİZİDEKİ
MAKSİMUM
ELEMANI
BULAN
ALGORİTMA
(MATLAB)
MAKSİMUM = DİZİ[0]
FOR İ İN RANGE(1,LEN(DİZİ)):
İF MAKSİMUM < DİZİ[İ] :
MAKSİMUM = DİZİ[İ]
PRİNT(MAKSİMUM)
DIZI = [41, 9, 8, 17, 5, 1, 23, 44, 7, 12, 27];
SONLU BİR
DİZİDEKİ
MAKSİMUM
ELEMANI
BULAN
ALGORİTMA
(MATLAB)
MAKSİMUM = DİZİ(1);
FOR İ=2 : LENGTH(DİZİ)
İF MAKSİMUM < DİZİ(İ)
MAKSİMUM = DİZİ(İ);
END
END
MAKSİMUM
ARAMA ALGORİTMALARI VE PERFORMANS
ANALİZİ
• BİLGİSAYAR TEKNOLOJİSİ VE İNTERNET AĞLARININ GEÇTİĞİMİZ ON YILLIK SÜRE ZARFINDA
MUAZZAM BİR BÜYÜME KAYDETMESİ, ÜRETİLEN BİLGİ MİKTARININ DA HATIRI SAYILIR BİR
BİÇİMDE ARTMASINA NEDEN OLDU.
• BUNUN YANISIRA MOBİL AYGITLAR VE NESNELERİN İNTERNETİ GİBİ KAVRAMLARINDA HER
GEÇEN GÜN HAYATIMIZDA DAHA FAZLA YER ALMAYA BAŞLAMASIYLA BİRLİKTE ÜRETİLEN VERİ
MİKTARI ÇOK YÜKSEK DEĞERLERE ULAŞTI.
ARAMA ALGORİTMALARI VE PERFORMANS
ANALİZİ
• FORBES DERGİSİNİN MAYIS, 2018 TARİHLİ BİR HABERİNE GÖRE DÜNYADA HER GÜN YAKLAŞIK
OLARAK 2.5 KENTİLYON BYTE (1 KENTİLYON = 1018 ) VERİ ÜRETİLMEKTE.
• BU DEĞERİN 2.500.000 TERABYTE KARŞILIK GELDİĞİ DÜŞÜNÜLDÜĞÜNDE ÜRETİLEN VERİNİN NE
KADAR BÜYÜK OLDUĞU DAHA İYİ ANLAŞILMAKTADIR.
ARAMA ALGORİTMALARI VE PERFORMANS
ANALİZİ
• BİLGİYİ İŞLEYEBİLMENİN EN TEMEL ADIMLARINDAN BİR TANESİDE BU BİLGİYİ ARAMA
YETENEĞİDİR.
• ÜRETİLEN MUAZZAM BÜYÜKLÜKTEKİ VERİNİN ARASINDAN İSTEDİĞİMİZ BİLGİYİ KISA SÜREDE
BULABİLMEK OLDUKÇA ÖNEMLİ BİR KABİLİYETTİR.
• BİR ARAMA MOTURUNDA ARAMA YAPMAK VEYA CEP TELEFONUNUMUZUN REHBERİNDEN BİR
KİŞİNİN İSMİNİ BULMAK HEPİMİZİN GÜNLÜK HAYATTA GERÇEKLEŞTİRDİĞİ ARAMA
FAALİYETLERİNDEN BİR KAÇIDIR.
ARAMA ALGORİTMALARI VE PERFORMANS
ANALİZİ
• BU BÖLÜMDE UZUN YILLARDIR KULLANILMAKTA OLAN ÇEŞİTLİ KLASİK ARAMA ALGORİTMALARI
TANITILACAKTIR.
• AYRICA ÇOK BÜYÜK BİR VERİ UZAYINDA ARAMA YAPARKEN ALGORİTMANIN HIZLI ÇALIŞMASI
KRİTİK KONULARDAN BİR TANESİDİR.
• BU DOĞRULTUDA ALGORİTMALARIN PERFORMANS ANALİZLERİ YANİ ZAMAN KARMAŞIKLIĞI
HESAPLARININ DA BİR KIYASLAMASI VERİLECEKTİR.
LİNEER ARAMA ALGORİTMASI
• LİNEER ARAMA ALGORİTMASI HERKESİN GÜNLÜK HAYATTA DA KULLANDIĞI EN BASİT ARAMA
ALGORİTMALARINDAN BİR TANESİDİR.
• VERİLEN BİR DİZİNİN İLK ELEMANINDAN BAŞLAYARAK DİZİNİN SON ELEMANINA KADAR TÜM
DEĞERLERİN KARŞILAŞTIRILMASI ESASINA DAYANIR.
• EĞER ARANAN DEĞER DİZİDE BULUNMUŞSA BULUNDUĞU KONUMUN İNDİSİ DEĞER OLARAK
DÖNDÜRÜLÜR.
• AKSİ DURUMDA “ELEMAN BULUNAMADI MESAJI DÖNDÜRÜLECEKTİR.
LİNEER ARAMA ALGORİTMASI
__NAME__ = "LİNEER_ARAMA"
DEF LİNEER_ARAMA(ARANANDEGER, DİZİ):
İ=0
WHİLE(İ<LEN(DİZİ) AND ARANANDEGER != DİZİ[İ] ):
LİNEER
ARAMA
ALGORİTMASI
(PYTHON)
İ +=1
İF İ<LEN(DİZİ):
PRİNT('ELEMANIN KONUMU :', İ )
ELSE:
PRİNT('ARANAN ELEMAN BULUNAMADI')
DEF MAİN():
DİZİ = [41, 9, 8, 17, 5, 1, 23, 44, 7, 12, 27]
ARANANDEGER = 27
LİNEER_ARAMA(ARANANDEGER,DİZİ)
İF __NAME__ == "LİNEER_ARAMA":
MAİN()
LİNEER ARAMA ALGORİTMASI (MATLAB)
FUNCTİON LİNEER_ARAMA(ARANANDEGER, DİZİ)
İ=1;
WHİLE(İ<=LENGTH(DİZİ) && ARANANDEGER ~= DİZİ(İ))
İ =İ+1;
END
İF İ <= LENGTH(DİZİ)
FPRİNTF('ELEMANÝN KONUMU :%İ\N', İ)
ELSE
FPRİNTF('ARANAN ELEMAN BULUNAMADÝ\N')
END
END
>> dizi = [41, 9, 8, 17, 5, 1, 23, 44, 7, 12, 27];
>> lineer_arama(27,dizi)
LİNEER ARAMA ALGORİTMASI
• ZAMAN KARMAŞIKLIĞININ ÖLÇÜMÜ KARŞILAŞTIRMA SAYISI KULLANILARAK YAPILACAKTIR.
• ALGORİTMADA ÇEVRİMİN HER ADIMINDA, İKİ KARŞILAŞTIRMA YAPILACAKTIR.
• BİRİNCİDE LİSTENİN SONUNA GELİNDİĞİNDE VE LİSTENİN BİRİNCİ TERİMİYLE X ELEMANI
KARŞILAŞTIRILACAKTIR.
• SONUÇTA BİR DAHAKİ KARŞILAŞTIRMADA ÇEVRİMDEN ÇIKILIR.
LİNEER ARAMA ALGORİTMASI
• DOLAYISIYLA, EĞER X= Aİ, 2İ+1 KARŞILAŞTIRMASI KULLANILDI.
• EN ÇOK KARŞILAŞTIRMA 2N, LİSTEDEKİ OLMAYAN ELEMAN OLDUĞU ZAMANDIR.
• BU BÖLÜMDE 2N KARŞILAŞTIRMASI X HESABINDA KULLANILDIYSA Aİ DEĞİLDİR VE SONRAKİ
KARŞILAŞTIRMALARDA ÇEVRİMDEN ÇIKILIR.
• X LİSTEDE DEĞİLSE 2N+2 KARŞILAŞTIRMALARI TOPLAMI KULLANILIR.
• BÖYLECE O(N) KARŞILAŞTIRMALARI.
• BİR LİNEER SEÇİM OLMUŞTUR.
• BU KARMAŞIKLIK ANALİZİ EN KÖTÜ DURUM ANALİZİDİR.
• BU ANALİZ BİZE BİR ALGORİTMADA KAÇ TANE İŞLEM YAPILIRSA ÇÖZÜME ULAŞILACAĞININ GARANTİSİNİ VERİR.
LİNEER ARAMA ALGORİTMASI
• LİSTEDE X BİLİNDİĞİ ZAMAN MÜMKÜN OLAN N TİP GİRİŞ VARDIR.
• LİSTEDE X İLK TERİMSE, 3 KARŞILAŞTIRMAYA İHTİYAÇ DUYULUR.
• BİRİNCİ HESAP LİSTE SONUNA GELİNİP GELİNMEDİĞİNİ, BİRİNCİ KARŞILAŞTIRMA X VE İLK TERİM
VE İLK ÇEVRİM DIŞINA ÇIKILIR.
• EĞER LİSTEDE X İKİNCİ TERİMSE, 2’ DEN FAZLA KARŞILAŞTIRMAYA İHTİYAÇ DUYULUR.
• BU YÜZDEN TOPLAM 5 KARŞILAŞTIRMA YAPILIR.
LİNEER ARAMA ALGORİTMASI
• GENELDE EĞER X İ’ NİNCİ TERİMSE ÇEVRİMDEN İ ADIMIN HERBİRİNDE İKİ KARŞILAŞTIRMA
KULLANILIR VE BİR ÇEVRİM DIŞINA ÇIKILIR.
• BU YÜZDEN 2İ+1 KARŞILAŞTIRMAYA İHTİYAÇ DUYULUR.
• BÖYLECE KARŞILAŞTIRMALARIN ORTALAMA SAYISI:
3 + 5 + 7 + ....... + (2n + 1) 2(1 + 2 + 3......... + n) + n
=
n
n
n(n + 1)
1 + 2 + 3 + ..... + n =
2
LİNEER ARAMA ALGORİTMASI
• BÖYLECE LİNEER ARAMA ALGORİTMADA KULLANILAN KARŞILAŞTIRMALARIN ORTALAMA SAYISI:
2(n(n + 1) / 2)
+ 1 = n + 2 = O ( n)
n
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
• BU ALGORİTMA LİSTEDEKİ TERİMLERİN ARTAN BİR ŞEKİLDE SIRALI OLMASI HALİNDE
KULLANILABİLİR. (TERİMLER SAYI İSE KÜÇÜKTEN BÜYÜĞE, EĞER KELİME İSE ALFABETİK OLARAK
SIRALAMALIDIR).
• BU İKİNCİ ALGORİTMA İKİLİ ARAMA ALGORİTMASI OLARAK ADLANDIRILIR.
• ELEMAN LİSTENİN ORTASINA YERLEŞTİRİLMİŞ TERİMLER KARŞILAŞTIRILARAK İLERLER.
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
• LİSTE AYNI BOYUTTA İKİ KÜÇÜK LİSTEYE AYRILIR VEYA KÜÇÜK LİSTELERDEN BİRİNDEKİ
TERİM SAYISI DİĞERİNDEN BİR TANE AZ OLABİLİR.
• DİĞER BÖLÜMDE İKİLİ ARAMA ALGORİTMASININ SIRALI ARAMA ALGORİTMASINDAN
DAHA ETKİLİ OLDUĞU GÖSTERİLECEKTİR.
• İKİLİ ARAMANIN NASIL ÇALIŞTIĞI AŞAĞIDAKİ ÖRNEKTE GÖSTERİLMİŞTİR.
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
• 19 SAYISI İÇİN ARAMA YAPILMASI:
•
1 2 3 5 6 7 8 10 12 13 15 16 18 19 20 22
• 16 TERİMDEN OLUŞAN LİSTEYİ 8 TERİMLİ İKİ LİSTEYE AYIRIYORUZ.
•
1 2 3 5 6 7 8 10
12 13 15 16 18 19 20 22
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
• İLK LİSTEDEKİ EN BÜYÜK TERİMLE 19 SAYISI KARŞILAŞTIRILIYOR. 10<19 OLDUĞUNDAN ARAMA
ORİJİNAL LİSTEDEKİ 9. VE 16. TERİME SINIRLANDIRILIYOR.
• DAHA SONRA BU LİSTE 4 TERİMDEN OLUŞAN İKİ LİSTEYE AYRILIYOR.
• 12 13 15 16
18 19 20 22
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
• İLK LİSTEDEKİ EN BÜYÜK TERİMLE 19 KARŞILAŞTIRILIYOR.
• 16<19 OLDUĞUNDAN ARAMA ORİJİNAL LİSTEDEKİ 13. VE 16. TERİM ARASINA
SINIRLANDIRILIYOR. LİSTE İKİ PARÇAYA AYRILIYOR.
•
18 19
20 22
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
• İLK LİSTENİN EN BÜYÜK TERİMİ OLAN 19 SAYISI 19’DAN BÜYÜK OLMADIĞINDAN
DOLAYI ARAMA İLK LİSTEDEKİ 18 İLE 19 SAYILARI İLE SINIRLANDIRILIYOR. (ORİJİNAL
LİSTEDEKİ 13. VE 14.TERİM).
• SONRA İKİ TERİMİN LİSTESİ TEK BİR TERİM OLARAK AYRILIYOR.
• 18<19 OLDUĞUNDAN ARAMA İKİNCİ LİSTEYE SINIRLANIYOR.
• LİSTE 14.TERİMİ İÇEREN 19 SAYISIDIR.
• ŞU AN ARAMA BİR TERİME İNDİRİLİYOR, KARŞILAŞTIRMA YAPILIYOR VE 19 SAYISI ORİJİNAL
LİSTENİN 14. TERİMİNE YERLEŞTİRİLİYOR.
İMPORT MATH
__NAME__ = "İKİLİ_ARAMA"
DEF İKİLİ_ARAMA(ARANANDEGER,DİZİ):
L=0
R= LEN(DİZİ)-1
WHİLE L <= R:
ORTA = MATH.CEİL(L + (R - L)/2);
İF DİZİ[ORTA] == ARANANDEGER:
RETURN ORTA
def main():
dizi = [1, 2, 3, 5, 6, 7, 8, 10, 12, 13, 15, 16, 18,
19, 20, 22]
arananDeger = 19
sonuc = ikili_arama(arananDeger,dizi)
if sonuc != -1:
print('Elemanın konumu :', sonuc)
else:
print("Aranan eleman bulunamadı")
if __name__ == "ikili_arama":
main()
ELİF DİZİ[ORTA] < ARANANDEGER:
L = ORTA + 1
ELSE:
R = ORTA - 1
RETURN -1
İkili Arama (Binary Search) Algoritması
(Python)
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
(PYTHON)
• YUKARIDAKİ PYTHON KODLARI İNCELENDİĞİNDE ALGORİTMANIN DÖNGÜLÜ BİR ŞEKİLDE
YAZILDIĞI GÖRÜLMEKTEDİR.
• DAHA ÖNCEKİ BÖLÜMLERDE DE BELİRTİLDİĞİ GİBİ TEORİK OLARAK HER DÖNGÜLÜ
ALGORİTMAYI ÖZYİNELEMELELİ BİR ŞEKİLDE YAZMAK MÜMKÜNDÜR.
• BU DOĞRULTUDA AŞAĞIDA VERİLEN PYTHON KODLARI İKİLİ ARAMA ALGORİTMASININ
ÖZYİNELEMELİ ŞEKİLDE YAZILMIŞ HALİNİ İÇERMEKTEDİR.
• PROGRAMIN KODLARI İNCELENDİĞİNDE FONKSİYONUN SÜREKLİ OLARAK KENDİNİ ÇAĞIRARAK
ÇÖZÜME ULAŞTIĞI GÖRÜLMEKTEDİR.
İMPORT MATH
__NAME__ = "İKİLİ_ARAMA"
DEF İKİLİ_ARAMA (ARANANDEGER, DİZİ):
L=0
R=LEN(DİZİ)-1
İF R >= L:
ORTA = MATH.CEİL(L + (R - L)/2)
İF DİZİ[ORTA] == ARANANDEGER:
RETURN ORTA
ELİF DİZİ[ORTA] > ARANANDEGER:
def main():
dizi = [1,2,3,5,6,7,8,10,12,13,15,16,18,19,20,22]
arananDeger = 19
sonuc = ikili_arama(arananDeger,dizi)
if sonuc != -1:
print('Elemanın konumu :', sonuc)
else:
print("Aranan eleman bulunamadı")
if __name__ == "ikili_arama":
main()
YDİZİ = DİZİ[L:ORTA]
X = İKİLİ_ARAMA(ARANANDEGER,YDİZİ)
RETURN X
ELSE:
YDİZİ = DİZİ[ORTA+1:]
İ = ORTA+1;
X = İKİLİ_ARAMA(ARANANDEGER,YDİZİ)
RETURN İ+X
ELSE:
RETURN -1
İkili Arama (Binary Search) Algoritması (Python-Recursive)
FUNCTİON CİKTİ = İKİLİ_ARAMA(ARANANDEGER , DİZİ)
L=1;
R= LENGTH(DİZİ);
CİKTİ = -1;
WHİLE( L<=R)
ORTA = CEIL(L + (R - L)/2);
İF(DİZİ(ORTA) == ARANANDEGER)
CİKTİ = ORTA;
BREAK;
ELSEİF(DİZİ(ORTA) < ARANANDEGER)
L = ORTA + 1;
ELSE
function main()
dizi =
[1,2,3,5,6,7,8,10,12,13,15,16,18,19,20,22];
arananDeger = 19;
sonuc = ikili_arama(arananDeger,dizi);
if( sonuc ~= -1)
fprintf('Elemanýn konumu : %i\n', sonuc)
else
fprintf("Aranan eleman bulunamadý\n")
end
end
R = ORTA - 1;
END
END
END
İkili Arama (Binary Search) Algoritması
(Matlab)
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
• KOLAYLIK İÇİN LİSTEDE N=2K ELEMAN OLDUĞUNU FARZ EDELİM.
• K POZİTİF TAMSAYI LİSTEDE K=LOG N GEÇMEKTE, 2’ NİN KUVVETİ DEĞİLDİR.
• 2K+1 ELEMANLA DAHA BÜYÜK BİR LİSTE DİKKATE ALINABİLİR.
• BURADA 2 K< N < 2K+1 ‘DİR.
• ALGORİTMANIN HER BÖLÜMÜNDE, İ VE J İLK TERİMİN YERİNDE VE EN SON TERİMLE SINIRLANDIRILMIŞTIR.
• KARŞILAŞTIRMADA BİR TERİMDEN DAHA FAZLA TERİM SINIRLANDIRILAMAYACAĞI GÖZLENİR.
• EĞER İ<J, SINIRLANDIRILMIŞ LİSTENİN ORTA TERİMİNDEN, X’ İN DAHA BÜYÜK OLUP OLAMAYACAĞI HESAPLANIR.
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
• İLK KISIMDA, SEÇİM 2K-1 TERİMLE SINIRLANDIRILARAK YAPILIR.
• ŞİMDİYE KADAR 2 KARŞILAŞTIRMA KULLANILDI.
• BU PROSEDÜRE DEVAM EDERSEK, BİR LİSTEDE HER BÖLGENİN SINIRLANDIRILMASINDA İKİ
KARŞILAŞTIRMA KULLANARAK BİRÇOK TERİMİN YARISIYLA BİR LİSTE SEÇİMİNDE.
• DİĞER DURUMLARDA, LİSTE 2K ELEMANA SAHİP OLDUĞU ZAMAN ALGORİTMANIN İLK KISMINDA
İKİ KARŞILAŞTIRMA KULLANILIR.
İKİLİ ARAMA (BİNARY SEARCH) ALGORİTMASI
• İKİDEN FAZLA SEÇİM YAPILACAĞI ZAMAN 2K-1 ELEMANLA LİSTE YAPILIR.
• SONUÇ OLARAK LİSTEDE BİR TERİM AYRILACAĞI ZAMAN, BİRİNCİ KARŞILAŞTIRMADA TAKİP EDEN
TERİMLER ATILIR VE BİR DAHA KARŞILAŞTIRMADA EĞER TERİM X İSE HESAPLAMADA KULLANILIR.
• BÖYLECE, EN ÇOK 2K+2=2LOGN+2 KARŞILAŞTIRMAYLA, 2K ELEMANA SAHİP SEÇİLEN BİT LİSTEDE
İKİLİ BİR İKİLİ SEÇİMİ GERÇEKLEŞTİRDİK.
• SONUÇ OLARAK BİR İKİLİ SEÇİM YAPILIRKEN O(LOGN) KARŞILAŞTIRMA YAPILIR.
• BU ANALİZ BİZE GÖSTERMİŞTİR Kİ ALGORİTMADA İKİLİ SEÇİM LİNEER SEÇİMDEN DAHA ETKİNDİR.
ATLAMALI ARAMA (JUMP SEARCH) ALGORİTMASI
• ATLAMALI ARAMA ALGORİTMASI İKİLİ ARAMAYA BENZER ŞEKİLDE SIRALI DİZİLER ÜZERİNDE
ÇALIŞMAKTADIR.
• BU ALGORİTMANIN ARKASINDAKİ TEMEL FİKİR LİNEER ARAMADAKİ GİBİ TÜM ELEMANLARI
KONTROL ETMEK YERİNE BELİRLİ BİR ADIM BOYUTU İLE ATLAMA GERÇEKLEŞTİREREK ULAŞILAN
DEĞERİ KONTROL ETMEKTİR.
• ARANAN DEĞER ULAŞILAN DEĞERDEN BÜYÜKSE İLERİYE DOĞRU ATLAMAYA DEVAM EDİLİR.
• AKSİ TAKTİRDE GERİYE DOĞRU GİDİP TEKRAR İLERİ DOĞRU ARAMA GERÇEKLEŞTİRİLİR.
ATLAMALI ARAMA (JUMP SEARCH) ALGORİTMASI
• ARALIK BİR KERE TESPİT EDİLDİKTEN SONRA LİNEER ARAMA İŞLEMİ GERÇEKLEŞTİRİLİR.
• BU ALGORİTMADA BAŞLANGIÇ ADIM SAYISI OLARAK ARAMA YAPILACAK DİZİDEKİ ELEMAN
SAYISININ KAREKÖKÜ KULLANILMAKTADIR.
• KARMAŞIKLIK HESABI KISMINDA NEDEN BU DEĞERİN TERCİH EDİLDİĞİ AÇIKLANACAKTIR.
ATLAMALI ARAMA (JUMP SEARCH) ALGORİTMASI
• ATLAMALI ARAMA ALGORİTMASININ NASIL ÇALIŞTIĞI AŞAĞIDAKİ ÖRNEK ÜZERİNDE
İNCELENMİŞTİR.
• 0, 1, 2, 3, 5, 6, 8, 12, 24, 33, 66, 78, 145, 257, 488, 799
• ŞEKLİNDE BİR DİZİ VERİLDİĞİNİ VE BU DİZİ ÜZERİNDE 66 SAYISININ ARANDIĞINI VARSAYALIM.
• DİZİDEKİ ELEMAN SAYISININ 16 OLMASI NEDENİYLE ATLAMA DEĞERİ 4 OLARAK
BELİRLENMEKTEDİR.
ATLAMALI ARAMA (JUMP SEARCH) ALGORİTMASI
• BU DURUMDA ARAMA İŞLEMLERİ ŞU ADIMLARLA GERÇEKLEŞTİRİLİR:
1.
ADIM: 0. İNDEKSTEN 4’E ATLA VE DEĞERİ KARŞILAŞTIR
2.
ADIM: 4. İNDEKSTEN 8’E ATLA VE DEĞERİ KARŞILAŞTIR
3.
ADIM: 8. İNDEKSTEN 12’YE ATLA VE DEĞERİ KARŞILAŞTIR
4.
ADIM: 12. İNDEKSTEKİ DEĞER 145 > 66 OLDUĞU İÇİN 8. İNDEKSE GERİ DÖN
5.
ADIM: 8. İNDEKSTEN İTİBAREN LİNEER ARAMA GERÇEKLEŞTİR
İMPORT MATH
__NAME__ = "ATLAMALİ_ARAMA"
DEF ATLAMALİ_ARAMA(ARANANDEGER, DİZİ):
def main():
dizi = [ 0,1,2,3,5,6,8,12,24,33,66,78,145,257,488,799 ]
arananDeger = 66
L=LEN(DİZİ)
ADİM = İNT(MATH.SQRT(L))
ONCEKİ = 0
WHİLE DİZİ[MİN(ADİM, L)-1] < ARANANDEGER:
ONCEKİ = ADİM
ADİM += İNT(MATH.SQRT(L))
sonuc = atlamali_arama(arananDeger,dizi)
if sonuc != -1:
print('Elemanın konumu :', sonuc)
else:
print("Aranan eleman bulunamadı")
İF ONCEKİ >= L:
RETURN -1
WHİLE DİZİ[İNT(ONCEKİ)] < ARANANDEGER:
if __name__ == "atlamali_arama":
main()
ONCEKİ += 1
İF ONCEKİ == MİN(ADİM, L):
RETURN -1
İF DİZİ[ONCEKİ] == ARANANDEGER:
RETURN ONCEKİ
RETURN -1
Atlamalı Arama (Jump Search) Algoritması
(Python)
FUNCTİON CİKTİ = ATLAMALİ_ARAMA(ARANANDEGER , DİZİ)
L = LENGTH(DİZİ);
ADİM = FİX(SQRT(L));
ONCEKİ = 1;
function main_jump()
dizi = [0,1,2,3,5,6,8,12,24,33,66,78,145,257,488,799] ;
arananDeger = 66;
CİKTİ = -1;
WHİLE(DİZİ(MİN(ADİM, L)) < ARANANDEGER)
sonuc = atlamali_arama(arananDeger,dizi);
ONCEKİ = ADİM;
ADIM = ADIM + FIX(SQRT(L));
İF (ONCEKİ >= L)
CİKTİ = -1;
BREAK;
END
END
WHİLE( DİZİ(ONCEKİ) < ARANANDEGER)
IF (ONCEKI == MIN(ADIM, L))
if( sonuc ~= -1)
fprintf('Elemanýn konumu : %i\n', sonuc)
else
fprintf("Aranan eleman bulunamadý\n")
end
end
CİKTİ= -1;
BREAK;
END
ONCEKİ = ONCEKİ + 1;
END
İF (DİZİ(ONCEKİ) == ARANANDEGER)
CİKTİ = ONCEKİ;
END
END
Atlamalı Arama (Jump Search) Algoritması
(Matlab)
ATLAMALI ARAMA (JUMP SEARCH) ALGORİTMASI
• ATLAMALI SIRLAMA ALGORİTMASINDA KRİTİK ADIMLARDAN BİR TANESİ ADIM UZUNLUĞUNUN
BELİRLENMESİDİR.
• ARAMA YAPILACAK DİZİ UZUNLUĞU N VE ADIM BOYUTU S OLMAK ÜZERE EN KÖTÜ DURUMDA
N/S ADET ATLAMA YAPMAK GEREKİR.
• DOĞRUSAL ARAMA AŞAMASINDA İSE S-1 ADET KIYASLAMA İŞLEMİ GERÇEKLEŞTİRİLİR.
• DOLAYISIYLA EN KÖTÜ DURUMDA YAPILMASI GEREKEN TOPLAM İŞLEM SAYISI ŞU ŞEKİLDE İFADE
EDİLEBİLİR:
ATLAMALI ARAMA (JUMP SEARCH) ALGORİTMASI
• BU DURUMDA YUKARIDAKİ FONKSİYONUN EN KÜÇÜK DEĞERİNİ ALMASINI SAĞLAYAN 𝑠 = 𝑛
DEĞERİ ATLAMA ADIMI OLARAK BELİRLENİR.
• ATLAMALI ARAMA ALGORİTMASININ İDEAL ATLAMA DEĞERİ 𝑛 OLDUĞUNDAN DOLAYI ZAMAN
KARMAŞIKLIĞI 𝑂( 𝑛) OLUR.
• BU DEĞER LİNEER ARAMA ALGORİTMASININ KARMAŞIKLIĞINDAN O(N) DAHA İYİYKEN İKİLİ
ARAMA ALGORİTMASINDAN O(LOGN) DAHA KÖTÜDÜR.