Veri yapıları ve algoritmalar
2021 ©
www.hbmacit.com
Algoritma
Dr.Öğr.Üyesi Hüseyin Bilal MACİT
02
İçerik
Al go rit ma
è Problem è Algoritma
è Düz yazı ile gösterim è Sözde kod
è Akış şeması
è Nassi-Schnederman şeması è Warnier-Orr diyagramı
è Özyineleme
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Problem
è Fransızca kökenli bir sözcük olan problem, Türk Dil Kurumu’na göre "matematik teoremler veya kurallar yardımıyla çözülmesi istenen soru, mesele" olarak tanımlanmıştır. Matematik ve fizikte ise problem; içinde bulunulan şartları ve eldeki mevcut verileri kullanarak bir olguya, sonuca ya da yasaya ulaşmak için sorgulanması gereken durumları tanımlamakta kullanılır.
è Problemle mücadele etme sürecine problem çözme denir. Problemin çözümü için çeşitli
parametrelere ihtiyaç duyulabilir. Örneğin "Bugün dışarı çıkarken ne giymeliyim?" probleminin çözümü için hava durumu ve nereye gidileceği gibi parametrelere ihtiyaç duyulabilir.
Al go rit ma
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Problem
è Fransız filozof Descartes’ a göre bir problemi çözmek için hızlı ve plansızca çözüme ulaşmaya çalışmak yerine dikkatli ve sistematik şekilde çözüm aranmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayrılmalıdır. Descartes’in "Discourse on Method" isimli kitabında problem çözme teknikleri şu dört madde ile özetlenir:
1. Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin.
2. Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün.
3. Anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyiniz.
4. Olaya bakışınız genel, hazırladığınız ayrıntılı liste ise her şeyi kapsayacak kadar kusursuz ve eksiksiz olsun.
Al go rit ma
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Problem
è Bilgisayar dünyasında bir problemin çözümü için iki yaklaşım vardır.
1. Sezgisel yaklaşım (heuristic); problemin çözümü için bir tasarım kullanılmadan, o anki düşüncelere göre plansız olarak ilerlenmesidir. Sezgisel yaklaşım genellikle eğitimsiz
programcılar tarafından tercih edilir. Sezgisel yaklaşım uygulayan programcı genellikle gerekli veri yapıları ve veri modelleri hakkında bilgi sahibi değildir.
2. Algoritmik yaklaşım; çözüm için olası yöntemlerden en uygun olanın seçilmesi ve yapılması gerekenlerin adım adım ortaya konulmasıdır.
Al go rit ma
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Problem
è Bilgisayar dünyasında problem çözme süreci dört aşamada gerçekleşir.
è Problem ilk önce analiz edilerek mümkünse alt problemlere bölünür. Her alt problemin çözümü için farklı yöntemler tasarlanır. Seçilen yöntemler ile problemin bütününü çözebilecek veya her alt
problemi tek tek çözebilecek algoritmalar geliştirilir. Geliştirilen algoritma çok sayıda girdi ile test edilerek istenen çözüme ulaşılıp ulaşılamadığı kontrol edilir. Eğer istenen çözüme ulaşılamadıysa analiz aşamasına geri dönülür. Bu süreç problemin kesin çözümüne ulaşana kadar devam eder.
Al go rit ma
analiz tasarım algoritma
geliştirme test
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Algoritma
è Algoritma kelimesi, IX. yüzyıl ünlü Türk bilgini matematikçi "Ebu Abdullah Muhammed İbn Musa el- Harezmi" nin isminin kısaltılmasından türetilmiştir. "El–Harezmi" kelimesinin İngilizce'deki
telaffuzundan kaynaklı "algorithm" olarak dile yerleşmiştir.
è Algoritma; belli bir problemi çözmek veya belirli bir amaca ulaşmak için tasarlanan adımlar kümesidir. Matematikte ve bilgisayar biliminde bir işi yapmak için tanımlanan, bir başlangıç
durumundan başlayıp açıkça belirlenmiş bir son durumunda sonlanan sonlu işlemler kümesidir.
Al go rit ma
ATM'ye bankamatik kartını tak Dört haneli müşteri şifresini yaz Giriş tuşuna bas
Para çekme menüsüne gir Tutarı gir
Giriş tuşuna bas Parayı al
Kartı al
örnek algoritma
0201 03 04 0506 07 08
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
è Bir yemeğin yapılmasındaki adımları içeren yemek tarifi, yerini bilmediğimiz bir restoranı bulmamıza yardımcı olan yol tarifi, bir elektronik cihazın
kullanım kılavuzu algoritmaların günlük hayattaki kullanımına örnek olarak gösterilebilir.
Algoritma
è Bir algoritmanın sahip olması gereken altı temel özellik vardır.
1. Girdi ve Çıktı Bilgisi: Girdi bilgisi algoritmaya dışarıdan verilir ve çıktı bilgisi algoritma içerisinde girdi bilgisi kullanılarak üretilir. Bu bilgiler, algoritma için tanımlı veri kümesine ait olmalıdır.
2. Açıklık: Algoritmayı oluşturan adımlar doğru ve kesin bir şekilde tanımlanmalıdır. Doğru anlaşılamayan bir adım doğru biçimde kodlanamaz.
3. Doğruluk: Farklı girdi bilgileri ile çalışabilen algoritmalar, her girdi için doğru bir çıktı üretmelidir. Algoritmanın doğruluğu test aşamasında kontrol edilmelidir.
4. Sonluluk: Algoritmanın daima bir sonu olmalıdır. Girilen veri boyutundan bağımsız bir şekilde algoritma adımları farklı bir aşamaya geçebilmeli veya algoritma sonlanmalıdır. Algoritma
adımları gerçekleştirilirken algoritma sonsuz döngüye girmemelidir.
5. Verimlilik: Algoritmayı oluşturan adımlar, yapılan iş için kabul edilebilir bir süre içerisinde tamamlanmalıdır.
6. Genellik: Bir algoritma, aynı türdeki problemlerin hepsine uygulanabilir olmalıdır.
Al go rit ma
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Algoritma
è Algoritmanın gösterimi için farklı yöntemler kullanılır. En sık kullanılan beş algoritma gösterim yöntemi aşağıdakilerdir.
1. Düz yazı ile gösterim 2. Sözde kod
3. Akış şeması
4. Nassi-Schnederman şeması 5. Warnier-Orr diyagramı
è Geliştirilen sistemin gösterimi için algoritma gösterim yöntemlerinin dışında nesneye yönelik analiz ve tasarımda ORM (Object Rule Model) yöntemi, ilişkisel veri tabanlarında veri modeli
diyagramlarının gösterimi için Bachman notasyonu, kavramsal veri modelleri ve veri tabanlarında Crow's Foot Spec dili gibi farklı yöntemler kullanılmaktadır. Ayrıca, sistem tasarımını bütünüyle ele alan ve standartlaşmış bir modelleme dili olan UML (Unified Modelling Language) ile 13 farklı tür diyagram çizilebilir. Bunlar arasında sınıf diyagramı, nesne diyagramı, kullanıcı senaryosu diyagramı ve durum geçiş diyagramı en çok kullanılanlarıdır.
Al go rit ma
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Düz yazı ile gösterim
è Algoritmanın düz yazı ile gösterimi, çözümün her adımının maddeler halinde alt alta günlük
konuşma dilinde yazılmasıdır. Algoritma mutlaka başlatma ifadesi ile başlar ve bitirme ifadesi ile biter. Her ne kadar günlük konuşma dili kullanılacak olsa da çözümün açıkça anlaşılabilir olması gerekir.
è Örneğin vize, final ve ödev notları girilen öğrencinin dersten geçip geçmediğini gösteren algoritmanın düz yazı ile gösterimi:
Al go rit ma
Başla Oku(vize) Oku(final) Oku(ödev)
ortalama = (vize*0,3) + (final*0,6) + (ödev*0,1) Eğer ortalama >= 60 ise Yaz("Geçtiniz.")
değilse Yaz ("Kaldınız.") Bitir
Düz yazı ile gösterim
01 02 03 0405 06 07 08
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Sözde kod
è Sözde kod (pseudocode), düz yazı ile gösterimden farklı olarak algoritmadaki adımları normal bir programlama dilinin yapısal kurallarını kullanarak açıklar, ancak makine okumasından ziyade insan okuması için tasarlanmıştır. Sözde kodun kabul görmüş bir standart gösterimi yoktur. Genellikle değişken bildirimleri gibi algoritmanın makine tarafından anlaşılması için gerekli olan ayrıntıları içermez.
è Sözde kod kullanmanın amacı, algoritmayı hem programlama bilmeyen birinin anlayabileceği hem de kaynak koda dönüştürülme işleminin hızlıca yapılabileceği bir yapı oluşturmaktır. Sözde kod, ders kitaplarında ve bilimsel yayınlarda algoritmaları göstermek amacıyla yaygın olarak kullanılır.
Al go rit ma
hesapla(vize, final, odev) input(vize)
input(final) input(odev)
ortalama = (vize*0,3) + (final*0,6) + (odev*0,1) if (ortalama >= 60)
print("Geçtiniz.") else
print("Kaldınız.")
Sözde kod ile gösterim
0201 03 0405 0607 08 09
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
è Örneğin vize, final ve ödev notları girilen öğrencinin dersten geçip geçmediğini gösteren algoritmanın sözde kod ile gösterimi:
Akış şeması
è Algoritmanın, görsel olarak simge ya da sembollerin birbirlerine ok işaretleri ile bağlanması ile ifade edilmiş şekline akış şeması (flowchart) adı verilir. Akış şeması sembolleri ANSI (American National Standards Institute) standardı olarak belirlenmiş ve tüm dünyada kullanılmaktadır.
è Bazı akış şeması sembolleri aşağıdaki şekildedir.
Al go rit ma
Başla Bitir
klavye kart kağıt ekran
işlem Fonksiyon
çağırma koşul döngü
veritabanı kaydet iç dış
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Akış şeması
è Vize, final ve ödev notları girilen öğrencinin dersten geçip geçmediğini gösteren
algoritmanın akış şeması ile gösterimi:
Al go rit ma
è Birden yüze kadar sayıları ekrana yazdıran algoritmanın akış şeması ile gösterimi:
Başla
Bitir
vize, final, ödev
Geçtiniz ortalama =
(vize*0,3) + (final*0,6) + (ödev*0,1)
ortalama ≥ 60
Kaldınız
E H
Başla sayı = 0
sayı < 100
sayı = sayı + 1
Bitir
sayı
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Akış şeması
è Örneğin mxn boyutlu matrisin elemanlarının toplamını gösteren bir algoritmanın sözde kod ve akış şeması ile gösterimi aşağıdaki şekildedir. Bu algoritmada iç içe döngü kullanılır.
Al go rit ma
Başla
toplam = 0 i = 0 i < m
i++
toplam = toplam + matris[i,j]
Bitir topla(matris[ ], m, n)
toplam = 0
for (i = 0; i < m; i++) for (j = 0; j < n; j++)
toplam = toplam + matris[i,j]
print(toplam)
Sözde kod ile mxn matrisin elemanları toplamı
0201 03 0405 06
j = 0 j < n j++
toplam
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Nassi-Schnederman şeması
è Kısaca N-S şeması olarak bilinen yöntemde algoritma üst üste yığılmış dikdörtgenler ile gösterilir.
İşlemler sırasıyla en üstteki dikdörtgenden başlayarak en alttakine doğru ilerler. Koşul ve döngü işlemleri için dikdörtgenler kendi içinde parçalara ayrılabilir.
è Bu gösterimde bir noktadan geriye dönüş olmadığı için yalnızca yapısal program tasarımları için uygundur. Bu özelliğinden dolayı N-S şemaları, yapısal akış şemaları olarak da adlandırılmaktadır.
Al go rit ma
işlem
işlem
…
işlem
işlem
koşul
işlem
true false
işlem işlem koşul
işlem işlem işlem işlem
Ardışık işlemler Koşul ifadesi Döngü ifadesi
işlem
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Nassi-Schnederman şeması
è Örneğin vize, final ve ödev notları girilen öğrencinin dersten geçip geçmediğini gösteren algoritmanın N-S şeması ile gösterimi:
Al go rit ma
print("geçtiniz")
Ortalama ≥ 60
print("kaldınız")
true false
hesapla(vize, final, odev) input(vize)
input(final) input(odev)
ortalama = (vize*0,3) + (final*0,6) + (odev*0,1) if (ortalama >=60)
print("Geçtiniz.") elseprint("Kaldınız.")
Sözde kod ile gösterim
01 02 0403 05 06 07 0809
ortalama =
(vize*0,3) + (final*0,6) + (ödev*0,1) input(ödev)
input(final) input(vize)
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Nassi-Schnederman şeması
Al go rit ma
è Örneğin birden yüze kadar sayıları ekrana yazdıran algoritmanın N-S şeması ile gösterimi:
sayı = 0 sayı < 100
sayı = sayı + 1 print(sayı)
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Başla sayı = 0
sayı < 100
sayı = sayı + 1
Bitir
sayı
Warnier-Orr diyagramı
è Kısaca W-O diyagramı olarak bilinen bu algoritma gösterim yöntemi Jean Dominique Warnier ile Kenn Orr tarafından geliştirilmiştir. Bu gösterim, kendi içinde dallanan küme parantezleri ile ilerler.
İşlemler ve veriler arasındaki ilişkiyi göstermek ve kullanılan veri yapısının ifadesi için kullanışlı bir yöntemdir.
Al go rit ma
işlem işlem
işlem
……
Ardışık işlemler
işlem koşul
işlem
……
Koşul ifadesi
işlem
işlem E
H
işlem döngü
işlem
……
Döngü ifadesi
işlem
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Warnier-Orr diyagramı
è Örneğin vize, final ve ödev notları girilen öğrencinin dersten geçip geçmediğini gösteren algoritmanın W-O diyagramı ile gösterimi:
Al go rit ma
hesapla(vize, final, odev) input(vize)
input(final) input(odev)
ortalama = (vize*0,3) + (final*0,6) + (odev*0,1) if (ortalama >=60)
print("Geçtiniz.") elseprint("Kaldınız.")
Sözde kod ile gösterim
01 02 0304 05 06 07 0809
ortalama = (vize*0,3) + (final*0,6) + (odev*0,1) input(ödev)
input(final) input(vize)
ortalama ≥ 60
E print("Geçtiniz")
H print("Kaldınız")
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
Özyineleme
è Özyineleme (recursion) işlemi, algoritmanın kendisini doğrudan ve dolaylı olarak tekrar
çağırmasıdır. Bu işlem programlamada fonksiyonlar kullanılarak gerçekleştirilir ve bu fonksiyonlara özyinelemeli fonksiyon (recursive) denir.
è Özyinelemeli fonksiyon, özyinelemeli tasarıma uygun olabilecek büyük problemi çözmek için böl ve yönet mantığını kullanır ve genel yapısı şekildeki gibidir.
è Özyineleme işlemi kod yazımı ve çözümünde avantajlı olsa da, çoğu zaman iteratif (döngü kullanan) fonksiyonlara göre daha fazla bellek alanı kullanır.
Al go rit ma
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
fonksiyon()
if (sonlandirma degeri) return
else
fonksiyon()
Sözde kod
0201 0403 05
Özyineleme
è Örneğin n faktöriyel değerini hesaplayan bir algoritmanın hem iteratif hem de özyinelemeli tasarımları aşağıdaki şekildedir.
Al go rit ma
Dr.Öğr.Üyesi Hüseyin Bilal MACİT www.hbmacit.com
faktoriyel(n) f = 1
for(i = 2; i <= n; i++ ) f *= i
return f
İteratif fonksiyon sözde kodu
0201 0304 05
faktoriyel(n) if (n = 1)
return 1
elsereturn n * faktoriyel(n - 1)
Özyinelemeli fonksiyon sözde kodu
0201 03 0405