Algoritmalar ve Karmaşıklık



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

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İ

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

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

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

TEMEL KAVRAMLAR Test -1

AYRIK YAPILAR ARŞ. GÖR. SONGÜL KARAKUŞ- FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ BÖLÜMÜ, ELAZIĞ

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

Özyineleme (Recursion)

ALGORİTMA VE PROGRAMLAMA I

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

HSancak Nesne Tabanlı Programlama I Ders Notları

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);

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

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

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

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

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

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

ALGORİTMA VE PROGRAMLAMA I

Alıştırma 1: Yineleme

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

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

Ö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

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

Dr. Fatih AY Tel: fatihay@fatihay.net

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

BLM 111 ALGORİTMA VE PROGRAMLAMA I

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ÜNİT E ÜNİTE GİRİŞ. Algoritma Mantığı. Algoritma Özellikleri PROGRAMLAMA TEMELLERİ ÜNİTE 3 ALGORİTMA

Program akıģı sırasında belirtilen satır numaralı yere gitmek için kullanılır. Genel formu: [<satır numarası>] GOTO <satır numarası 1> GOTO n

BÖLÜM 2: ALGORİTMALAR

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

Veri Yapıları ve Algoritmalar

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

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

O NOTASYONU. Abdullah Gazi Emre DAĞLI

2. (v+w+x+y+z) 8 ifadesinin açılımında kaç terim vardır? 3. log 5 0, olduğuna göre sayısı kaç basamaklıdır?

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

TAMSAYILAR. 9www.unkapani.com.tr. Z = {.., -3, -2, -1, 0, 1, 2, 3, } kümesinin her bir elemanına. a, b, c birer tamsayı olmak üzere, Burada,

ALGORİTMA İ VE PROGRAMLAMA

Bir algoritma aşağıdaki ğ dki özelliklere sahip komutların sonlu bir kümesidir.

Problem Set 1 Çözümler

ÖDEV (Vize Dönemi) CEVAPLAR. 1. Ekrana Merhaba Dünya! yazdıran algoritmanın akış diyagramını çiziniz ve sözde kod olarak yazınız.

Matlab da Dizi ve Matrisler. Mustafa Coşar

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma

BİL1001 Bilgisayar Bilimlerine Giriş 1

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

YZM 2116 Veri Yapıları

PASCAL PROGRAMLAMA DİLİ YAPISI

Excel Formüller ve Fonksiyonlar. Yusuf MANSUROĞLU Mühendislik Hizmetleri Müdür Yardımcısı

VERİ YAPILARI VE PROGRAMLAMA

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

BIL222 Veri Yapıları ve Algoritmalar

Temel Kavramlar 1 Doğal sayılar: N = {0, 1, 2, 3,.,n, n+1,..} kümesinin her bir elamanına doğal sayı denir ve N ile gösterilir.

C PROGRAMLAMA YRD.DOÇ.DR. BUKET DOĞAN PROGRAM - ALGORİTMA AKIŞ ŞEMASI

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


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

Algoritmalar ve Programlama. Algoritma

GÜMÜŞHANE ÜNĐVERSĐTESĐ MÜHENDĐSLĐK VE DOĞA BĐLĐMLERĐ FAKÜLTESĐ ELEKTRĐK-ELEKTRONĐK MÜHENDĐSLĐĞĐ EEM 114 ALGORĐTMA TASARIMI VE PROGRAMLAMA DĐLLERĐ

Koşullu Önermeler (if else)

Algoritma ve Akış Diyagramları

BLGM BÖLÜM. Problem Çözme Kavramları (Algoritma ve Akış Şemaları)

Temel Kavramlar. (r) Sıfırdan farklı kompleks sayılar kümesi: C. (i) Rasyonel sayılar kümesi: Q = { a b

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

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

C PROGRAMLAMA D İ L İ

{\} /\ Suhap SAHIN Onur GÖK

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

2. (x 1 + x 2 + x 3 + x 4 + x 5 ) 10 ifadesinin açılımında kaç terim vardır?

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

Veri Yapıları Laboratuvarı

ab H bulunur. Şu halde önceki önermenin i) koşulu da sağlanır ve H G bulunur.

BULANIK MANTIK VE SİSTEMLERİ BAHAR DÖNEMİ ÖDEV 1. Müslüm ÖZTÜRK Bilişim Teknolojileri Mühendisliği ABD Doktora Programı

DOĞRUSAL OLMAYAN PROGRAMLAMA -I-

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

MAT 302 SOYUT CEBİR II SORULAR. (b) = ise =

Programlama Dilleri 1. Ders 4: Diziler

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

T.C. MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI Bahar Yarıyılı

Programlama Giriş. 17 Ekim 2015 Cumartesi Yrd. Doç. Dr. Mustafa YANARTAŞ 1

Diziler İndisli Değişkenler

Genel Kullanılış 1: [değişken ismi] = [değişken ismi] [işlem] [sayı veya string ifade veya değişken]

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

Algoritma ve Programlamaya Giriş

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

4- ALGORİTMA (ALGORITHM)

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

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

Bu tanım aralığı pozitif tam sayılar olan f(n) fonksiyonunun değişim aralığı n= 1, 2, 3,, n,

köşe (vertex) kenar (edg d e)

ELN1001 BİLGİSAYAR PROGRAMLAMA I

YMT219 VERİ YAPILARI ÖDEV-1

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

Java da Program Denetimi ve Operatörler

Transkript:

Algoritmalar ve Karmaşıklık Ders 11 Algoritma Ayrık matematikte karşılaşılan bir çok problem sınıfı mevcuttur. Örneğin, verilen tamsayı grubu içindeki en büyük olanının bulunması, verilen bir kümenin bütün alt kümelerinin listelenmesi, verilen bir tamsayı kümesinin artan sırada sıraya dizilmesi, verilen bir ağ da iki kenar arasındaki en kısa yol un bulunması gibi. Böyle problemler ile karşılaşıldığında, ilk olarak problemin matematiksel yapısını içeren bir modelinin bulunması gerekir. Böyle modellerde, permutasyonlar, bağıntılar, graflar, ağaçlar ve sonlu durumlu makineleri gibi ayrık yapılar sıkça kullanılmaktadır. Uygun matematiksel modelin kurulması çözümün ilk adımıdır. Modeli kullanarak çözümü gerçekleştiren bir yöntem her zaman gerekli olacaktır. Cevabı bulmak için sıralı adımları takip eden bir yordam (procedure) olacaktır. Böyle sıralı işlem adımlarına algoritma denir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-2 1

Algoritma Tanım: Bir hesaplamayı gerçekleştirmek veya bir problemi çözmek için kesin işlemlerin sonlu bir kümesine algoritma denir. Algoritmadaki her bir adım sonlu zamanda gerçekleştirilebilecek açık ve belirli talimatlar içerir. Her bir adımda çalıştırılacak işlemler açık olarak tanımlanmalıdır. İşlemin, adımların sonlu sayıda çalıştırılması sonucunda sonlandırılması garanti altına alınmalıdır. Algoritma kelimesi Türk Matematikçisi olan ve 9. yüzyılda yaşamış olan El-Harezmi nin isminden türetilmiştir. Aslen Türkistan da Aral gölünün güneyinde bulunan Harzem şehrindedir. Algoritma kelimesi Harezmi nin adından gelen Alkhorizmus=algorisma kelimesinin zamanla farklı dillerdeki kullanımındaki değişiminden türemiştir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-3 Algoritma Örnek: Sonlu sayıdaki tamsayılar kümesinin en büyük elemanın bulunması için bir algoritma kurulmaya çalışıldığında: Problemin uygulaması çeşitli alanlarda karşımıza çıkabilir: Üniversite öğrencileri arasında derecesi en yüksek olanın belirlenmesi, Bir spor organizasyonunda en yüksek dereceli olan sporcunun belirlenmesi gibi. Problemin birçok çözümü olabilir. Bu çözümlerden bir tanesi aşağıda verilmiştir. 1. Sayıların ilkini geçici en büyük olarak belirle. 2. Bir sonraki sayı ile geçici en büyük tamsayıyı karşılaştır. Eğer yeni sayı geçici en büyükten büyük ise yeni sayıyı geçici en büyük olarak belirle. 3. Eğer daha sayı var ise bir önceki adımı tekrarla. 4. Dizide başka eleman kalmamış ise dur. Bu noktada en büyük sayı geçici en büyük olarak belirlenmiş olan sayı olacaktır. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-4 2

Pseudocode - Sahtekod Algoritma bir bilgisayar dili yardımı ile gösterilebilir. Ancak bunu anlamak çoğu zaman zor olur. Bunun yerine ortak olarak kullanılan pseudocode (sahtekod) ile ifade edilir. Bu kodda anahtar kelimeler İngilizce olarak ifade edilen işlem adımlarını gösterir. Pseudocode temel bilgileri: Bu bölümde sahtekod ile ilgili temel bilgiler(algoritmaları anlatmak için kullanılan) kısa olarak verilecektir. Bir algoritmanın sahtekodu procedure (yordam) ifadesiyle başlar. Bu algoritmanın ismini, girdi değişkenlerinin listesini ve bunların hangi tip olduklarını tanımlar. Örneğin, Procedure maximum(l: tamsayı listesi, a:integer) ifadesi algoritmanın sahtekod tanımlamasının ilk ifadesidir ve algoritmanın isminin maximum ve L listesindeki tamsayıların maksimumunu bulur. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-5 Sahtekod Atama ve Diğer Tipten İfadeler Atama için := sembolü kullanılır. Atama ifadesi değişken := ifade formundadır. Örneğin; max := a x:= L listesindeki en büyük eleman gibi ifadeler atama işlemi için kullanılabilir. Bu ifadeyi gerçek bir programlama diline ifade etmek için birden fazla kod satırı yazılmak zorunda kalınabilir. Burada a ve b değişkenlerinin değerlerini değiştir gibi ifadelerde kullanılabilir. Not: Burada bu yazımların kullanılmasının amacı sahtekodu algoritmanın gerçek amacını gösterebilmek için kısa tutmaktır. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-6 3

Sahtekod İfade Blokları İfadeler (statements) kompleks yordamları bloklar içerisinde gruplamak için kullanılır. Bu bloklar ve ifadeleri kullanılarak tasarlanır. Bir blok içerisindeki ifadeler aynı miktarda biraz daha içeriden başlatılır. ifade1 ifade2 ifade n Blok içerisindeki ifadeler sırasıyla çalıştırılır. Yorumlar Küme parantezleri içerisindeki ifadeler çalıştırılmaz. Böyle ifadeler, yordamın nasıl çalıştığı hakkında bilgi sunan yorum satırları olarak kabul edilir. Örneğin { x, L listesi içerisindeki en büyük elemandır} ifadesi okuyucuya x değişkeninin L listesinin en büyük elemanı olduğunu hatırlatır. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-7 Sahtekod Koşullu Yapılar En basit koşullu yapı için if koşul then ifade kullanılmaktadır. Blok bir ifadenin çalıştırılması için if koşul then ifade bloğu Diğer bir kullanım türü de if koşul then ifade1 else ifade2 Bir diğer türde if koşul_1 then ifade_1 else if koşul_2 then ifade_2 else if koşul_3 then ifade_3 else if koşul_n then ifade_n else ifade_n+1 Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-8 4

Sahtekod Döngü Yapıları Sahtekod içerisinde kullanılan for, while do ve do until gibi üç değişik döngü yapısından bahsedilecektir: for yapısının tek bir ifade ile kullanılan basit formu for değişken:=başlangıç_değeri to son_değeri step artım ifade veya blok ifade içeren diğer bir formu for değişken:=başlangıç_değeri to son_değeri step artım ifade Örneğin, 1 den n e kadar tamsayıların toplamını hesaplamak istersek sum:=0 for i:=1 to n sum:=sum+i Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-9 Sahtekod Döngü Yapıları Bir şartın sağlandığı sürece bir veya daha fazla ifadenin çalıştırılabileceği döngüler while do yapısı ile gerçekleştirilir: while koşul [do] ifade veya while koşul [do] ifade bloğu Örneğin 1 den n e kadar tamsayıların toplamını hesaplamak istersek sum:=0 k:=1 while k<n [do] sum:=sum+k k:=k+1 Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-10 5

Sahtekod Döngü Yapıları Bir şart sağlanıncaya kadar bir veya daha fazla ifadenin çalıştırılabileceği döngüler do until yapısı ile gerçekleştirilir. do ifade bloğu until koşul Örneğin 1 den 10 e kadar tamsayıların toplamını hesaplamak istersek sum:=0 n:=1 do sum:=sum+n n:=n+1 until n=10 Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-11 Sahtekod Örnek: Liste içerisindeki en büyük tam sayıyı bulma algoritması Procedure enbuyuk(a 1, a 2,..., a n : integers) enbuyuk := a 1 for i := 2 to n if enbuyuk < a i then enbuyuk := a i {işlem sonunda en büyük tamsayı bulunmuş olur} Başka bir algoritmada bu tamsayıları büyükten küçüğe doğru azalan şekilde sıralayıp ilk elemanı en büyük olarak almak olabilir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-12 6

Algoritmaların Özellikleri Algoritmalarda aşağıdaki özellikler bulunur ve bu özellikleri akıldan çıkartmamak gereklidir. Giriş : Belirlenen veri kümesinden algoritma giriş değerleri alır. Çıkış : Algoritma her bir giriş kümesinde çıkış değerleri üretir. Bu değerler problemin çözümüdür. Açıklık : Algoritmanın adımları açık olarak tanımlanmalıdır. Doğruluk : Algoritma her bir giriş kümesi için doğru çıkış üretmelidir. Sonluluk : Algoritma, her bir giriş kümesi için amaçlanan çıkışı, sonlu işlem adımı(büyük olabilir) sonunda üretmelidir Verimlilik : Algoritmanın her bir adımı tam ve sonlu bir zaman diliminde gerçeklenmelidir. Genellik : Yordam formdaki her probleme uygulanabilecek şekilde genel olmalıdır. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-13 Verilen listedeki en büyük tamsayıyı bulma algoritması bu açıdan değerlirilirse; Giriş : Sonlu sayıda tamsayı kümesi Çıkış : kümedeki en büyük tamsayı Açık olarak adımlar tanımlanmıştır ve doğru sonuç üretir. Algoritma sonlu işlem adımı kullanır (n adım) Algoritma her bir adımda bir karşılaştırma işlemi yapar (verimlilik). Algoritma bu tür kümelerdeki en büyük tamsayıyı bulacak şekilde geneldir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-14 7

Arama Algoritmaları Sıralı listedeki bir elemanın yerinin bulunması çok değişik olarak karşılaşılan bir problemdir. Örneğin sözlükten bir kelime aranması gibi problemlere arama problemleri denir. Genel arama problemi aşağıdaki şekilde açıklanabilir: Farklı elemanları a 1, a 2,, a n olan bir listede bir x elemanın yerinin öğrenilmesi veya listede olup olmadığının öğrenilmesi şeklinde olabilir. Bu arama probleminin çözümü, x elemanına eşit olan a i elemanın yerinin bulunmasıdır. Eğer x =a i ise x listenin i. elemandır. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-15 Doğrusal Arama Algoritması Problemin çözümü için ilk algoritma doğrusal veya ardışık aramadır. Doğrusal arama algoritması, x ile a 1 karşılaştırarak işleme başlar. Eğer x =a 1 ise aranan eleman 1. elemandır. Eğer x a 1 ise, x ile a 2 karşılaştırılır. Eğer x =a 2 ise çözüm a 2 nin konumudur. Eğer x a 2 ise, x, a 3 ile karşılaştırılır. Bu işlem bir uyuşma bulununcaya kadar devam eder. Uyuşma olmadıkça işlem devam eder. Eğer bir uyuşma bulunamaz ise sonuç sıfır olarak elde edilir. Doğrusal arama algoritmasının sahtekodu aşağıda verilmiştir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-16 8

Procedure dogrusalarama(x:integer, a 1,a 2,,a n :farklı tamsayılar) i:=1 konum:=0 while( i n and x a i ) i:=i+1; if i n then konum:=i else konum:=0 Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-17 İkili Arama Algoritması Bu algoritmada verilen veriler artan şekilde sıralanmış olmalıdır. Veriler tamsayı ise en küçükten en büyüğe doğru sıralanmış, eğer kelime iseler alfabetik olarak sıralı şekildedir. Böyle bir veri kümesinde bir eleman aranması için algoritma ikili aramadır. İkili arama algoritmasının mantığı; sıralı veri kümesi ortadan iki kümeye ayrılarak bulunması istenen veri bu alt kümelerden hangisinin içerisinde olabileceğinin kontrolü prensibine bağlıdır. Arama işlemi alt kümelerde tekrarlanarak bulunması gerekli olan veri bulunmaya çalışılır. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-18 9

Örnek: 1,2,3,5,6,7,8,10,12,13,15,16,18,19,20,22 sıralı dizisi içerisinde 19 tamsayısı aransın. Dizide 16 eleman bulunduğundan 1,2,3,5,6,7,8,10 ve 12,13,15,16,18,19,20,22 şeklinde 8 li iki alt kümeye ayrılır. 19 tamsayısı birinci alt kümenin en büyük elemanı ile karşılaştırılır. 10 < 19 olduğundan aranan sayı ikinci alt kümededir. Bundan sonra ikinci alt küme 12,13,15,16 ve 18,19,20,22 olmak üzere 4 elemanlı iki alt kümeye ayrılır. 16 < 19 olduğundan aranan tamsayı sağ alt kümede olabilecektir. Bu nedenle sağ alt küme yine 18,19 ve 20,22 olmak üzere iki elemanlı iki alt kümeye ayrılır. Şimdi 19 tamsayısı, son ikili kümenin en büyük elemanından büyük olmadığı için arama ilk kümenin 13. ve 14. elemanını içeren kümeyle sınırlanır. Böylece son kümede 18 ve 19 tamsayılı ve birer elemanlı iki alt kümeye ayrılır. 18 < 19 olduğundan arama 19 tamsayısından oluşan son kümeye sınırlanır ve kümenin 14. elemanı olarak bulunur. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-19 İkili Arama Algoritması Algoritmanın sahtekodu aşağıda verilmiştir. Procedure ikiliarama(x:integer, a 1,a 2,...,a n : artan tamsayılar) i:=1; {i, arama aralığının sol bitiş noktasını gösterir} j:=n; {j, arama aralığının sağ bitiş noktasını gösterir} while i<j do m:=[(i+j)/2]; if x>a m then i:=m+1; else j := m; if x=a i then konum:=i else konum:=0; {konum, x e eşit olan terimin indisidir veya eğer x bulunamamış ise değeri sıfırdır} Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-20 10

Algoritmaların Karmaşıklığı Algoritmaların özellikleri içerisinde verimlilik olması gerektiği açıklanmıştı. Algoritmanın verimliliği ne demektir? Bunun analizi nasıl yapılır? Verimliliğin bir ölçütü, algoritmanın belirli bir giriş verisine karşın, problemin çözümü için bilgisayarın harcadığı zamanın ölçülmesidir. Diğer bir ölçü ise belirli giriş verisine karşı bilgisayarın kullandığı bellek miktarıdır. Böyle sorular algoritmanın bir hesaplama karmaşıklığının geliştirilmesini gerektirir. Problemi çözmek için algoritmanın harcadığı zamanın analizi zaman karmaşıklığını, gerekli belleğin analizi ise yer (space) karmaşıklığının hesabını gerektirir. Yer karmaşıklığı probleminin çözümü, algoritmayı gerçeklerken kullanılan veri yapıları ile bağlantılıdır. Ancak bu konular içerisinde yer karmaşıklığından bahsedilmeyecektir. Algoritmanın zaman karmaşıklığı ise, belirli miktardaki giriş verisine karşılık, yapılan karşılaştırma, tamsayı toplama, tamsayı çıkartma, tamsayı çarpma ve bölme işlemleri ile diğer basit işlemlerin sayısı olarak hesaplanır. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-21 Bilgisayarda hesaplamalar genellikle aşağıdaki işlemler yardımıyla gerçekleştirilir: Atama Karşılaştırma (==,, >, <,, ) Aritmetik işlemler (+, -,, /) Mantıksal operasyonlar Bu operatörlerin çalıştırılması ne kadar zaman alır? Genelde, atama çok hızlı yapılır ve diğer işlemler daha yavaştır. Çarpma ve bölme de toplama ve çıkarmadan daha yavaştır. Kayan noktalarla işlem yapmak, tamsayılarla işlem yapmakta daha yavaştır. Çoğu algoritmada bu işlemlerden çok sayıda kullanılmaktadır ve hepsinin ne kadar zaman alacağını teker teker hesaplamak oldukça zor olacaktır. Bunun yerine çoğu algoritmada zaman karmaşıklılığı baskın olan tek bir işlem ile belirlenebilmektedir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-22 11

Algoritma karmaşıklık analizinde dikkat edilmesi gereken yaklaşımlar: Sadece en çok zaman kaybettiren işlemleri hesaba katınız. Hesaplama zamanının girdi boyutuna bağlı olarak değiştiğinde en kötü durumu analiz ediniz. Algoritma girdisinin genelde büyük olduğunu kabul ediniz. Eğer bir algoritmanın zaman karmaşıklılığının artış oranı diğerinin sabit bir katı olduğu durumlardaki iki zaman karmaşıklılığının ayırt etmeye çalışmayınız. Bu durumda her ikisi de aynı kabul edilir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-23 Örnek ( Zaman karmaşıklığı için) Bir A dizisinin en küçük elemanını bulan algoritmanın zaman karmaşıklığının hesabı: Procedure enkucuk(a real array, enkucuk:real) enkucuk := A[1]; for i := 2 to n if A[i] < enkucuk then enkucuk := A[i] {en kötü durumda n-1 defa icra edilir} {işlem sonunda en küçük ayı bulunmuş olur} Bu algoritmanın zaman karmaşıklığı en kötü durumda dizinin büyüklüğü mertebesindedir. Bu yordamın işlem sayısını hesaplamaya çalışalım: Karşılaştırma işlemlerinin sayısı : n-1 Atama işlemlerinin sayısı: n-1 ; Algoritmanın (zaman) karmaşıklığı O(n) dir. Karmaşıklığı ifade etmek için O(n) notasyonu kullanılır. O mertebe (order) işareti, (n) in sonlu bir çarpanla çarpımından daha küçüktür. İşlemlerin sayısı k n { k : sınırlı sabit, n : problemin büyüklüğü olarak tanımlanır} Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-24 12

Örnekler En küçük sayıyı bulma algoritması : n-1: O(n) Hem en küçük hem de en büyüğü bulma : n-1 + n-2 = 2n-3 : O(n) Sıralama yapan algoritma (En küçükten büyüğe): (n-1) +(n-2) +(n-3) + +1 = n*(n-1)/ 2 = n 2 /2 n/2 : O(n 2 ) Algoritma A1 A2 Zaman Karmaşıklığı n nlog n Çözülebilen En büyük problem 1 sn. 1 dk. 1 saat 1000 6 10 4 3.6 10 6 140 4893 2 10 5 Örnek algoritma En küçüğü bulma Sıralama(Quicksort) A3 n 2 31 244 1897 Geleneksel sıralama A4 n 3 10 39 153 Matris Çarpımı A5 2 n 9 15 21 Torba doldurma problemi Burada dikkat edilmesi gereken ilginç bir nokta, mertebe arttıkça çözebildiğimiz problem sayısı çok çabuk düşmesidir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-25 Örnek: İkili arama algoritmasının karmaşıklık hesabının yapılması: Çözüm: Basitlik için a 1, a 2,.., a n listesinde n = 2 k eleman olduğunu varsayalım (k>0). Burada k = log 2 n olacaktır. Eğer kümedeki elemanların sayısı 2 nin katı şeklinde değil ise liste 2 k+1 elemanlı daha büyük bir liste olacaktır (burada 2 k < n < 2 k+1 gerçekliği açıktır). Aranan sayı bulununcaya kadar i ve j sayıları birbirine yaklaşır. İlk adımda liste 2 k-1 e sınırlanır. İkinci adımda liste 2 k-2 ye sınırlanır. En sonunda liste 2 1 = 2 elemanlı olarak kalır. Listede tek eleman kalınca karşılaştırma başka eleman olmadığını gösterir işlem k+1 adımda biter. İkili arama algoritmasını icra etmek için (her bir adımda 2 karşılaştırma yapıldığından) toplam 2k+2= 2log 2 n+2 karşılaştırma yapılır. Buradan ikili arama algoritmasının karmaşıklığının en kötü durumda O(log 2 n) olduğu söylenebilir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-26 13

Diğer bir karmaşıklık analizi ortalama durum analizidir. En kötü durum analizinden daha karmaşık olan bu analiz doğrusal arama algoritmasının karmaşıklık hesabında kullanılmıştır. Örnek: Aranan elemanın liste içerisinde olduğunu kabul ederek doğrusal arama algoritmasının en ortalama durum analizini yapınız: Çözüm: x in liste içerisinde olduğu n değişik mümkün girdi vardır. Eğer x listenin birinci terimi ise, üç karşılaştırma gerekir, biri listenin sonuna ulaşıldı mı, diğeri x ile birinci terimi karşılaştır, bir diğeri de döngü dışına çıkılması. Eğer listenin ikinci terimi ise ek iki karşılaştırmaya ihtiyaç vardır, dolayısıyla toplam beş karşılaştırmaya ihtiyaç vardır. Eğer x listenin i. terimi ise döngünün her bir i. Adımında iki karşılaştırma yapılmakta ve bir tane de döngü dışında yapılmaktadır. Sonuç olarak 2i+1 karşılaştırmaya ihtiyaç vardır. Böylece karşılaştırmaları ortalaması 3+ 5+ 7 + + (2n+ 1) 2(1+ 2+ 3 + + n) + n = = n+ 2 = O( n) n n Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-27 Büyük-O (Big-O) Notasyonu f(n) ve g(n) iki zaman karmaşıklığı olsun. Eğer n sayısının yeteri kadar büyük değerleri için f(n) c g(n) olacak şekilde bir pozitif c sayısı varsa f(n) zaman karmaşıklığı O(g(n)) dir. Başka bir deyişle, n sayısı yeteri kadar büyük olduğunda, f(n), g(n) ile aynı büyüklüktedir. Ders 11 Yrd.Doç.Dr. İbrahim TÜRKYILMAZ 11-28 14