13. bÖlÜm / chapter 13

24
13. BÖLÜM / CHAPTER 13 ALGORİTMA ALGORITHM Fatma Önay KOÇOĞLU*, Çiğdem SELÇUKCAN EROL** *Dr., Muğla Sıtkı Koçman Üniversitesi Mühendislik Fakültesi Yazılım Mühendisliği Bölümü, Muğla, Türkiye E-mail: [email protected] **Doç.Dr., İstanbul Üniversitesi Enformatik Bölümü ve Fen Fakültesi, Biyoloji Bölümü Botanik ABD, İstanbul, Türkiye E-mail: [email protected] DOI: 10.26650/B/ET07.2021.003.13 ÖZ Yaşamımız süresince birçok problem ile karşı karşıya kalmakta ve bu problemler için çözümler üretmeye çalışmaktayız. Çözümler üretirken tek bir çözüm üzerinde düşünmemekte, olası tüm çözümleri göz önüne alıp o an için en doğru ve mantıklı olanını seçmeye çalışmaktayız. Problemi çözmek üzere geliştirdiğimiz çözüm yolları genellikle belirli adımların veya kuralların izlenmesini gerektirmektedir. Bu süreç algoritma olarak tanımlanmaktadır. Algoritmalar hayatımızın hemen her alanında yer almaktadır. Sabah işe yetişmek için de, hekim olarak hastalarla görüşmelerde de farkında olarak ya da olmayarak algoritma kullanılmaktadır. Bilgisayarlarda da bir problemin çözümü için kod yazılacağı zaman öncelikle problem ele alınmakta, mümkün olduğunca kısa zamanda ve doğru sonuca ulaştıran çözüm adımları belirlenmektedir. Bu adımların belirli kurallar çerçevesinde anlaşılır ve sade bir şekilde ifade edilmesi ile algoritmalar elde edilmektedir. Algoritmalar geliştirildikten sonra bazı durumlar karşımıza çıkmaktadır. Bunlar, ortak bir dilde algoritmayı ifade etme, algoritma içerisinde kullanılan belirli yapılar ve hangi algoritmanın en iyi çözümü sağlayacağının belirlenmesidir. Çözüm geliştirici algoritmayı kendi anadilinde yazabilir, ancak ortak bir anlatım dilinde buluşabilmek böylece geliştirilen çözümün herkes tarafından anlaşılabilir olması için algoritma şekilsel bazı ifadeler kullanılarak farklı bir forma dönüştürülür. Bu form akış diyagramı olarak ifade edilmektedir. Hem algoritmalarda hem de akış diyagramında çeşitli yapılar kullanılmaktadır. Örneğin bir çözüm adımında birden fazla seçenek söz konusu ise ve duruma göre bu seçeneklerden biri seçilmesi gerekiyorsa bu noktada karar verme eylemi karşımıza çıkmaktadır. Bu doğrultuda sıralı, karar ve tekrarlı işlem yapıları kullanılmaktadır. Daha önce de ifade edildiği gibi, bir problemin çözümü için birden fazla algoritma geliştirilebilir. Geliştirilen bu algoritmaların hepsi de kullanılabilir. Ancak burada da hangi algoritmanın seçileceği problemi ile karşı karşıya kalınmaktadır. Bu problemin çözümünde algoritma karmaşıklığı belirlenmektedir. Belirtilen tüm bu hususlar göz önünde bulundurulduğunda algoritma geliştirme bir bilgisayar programı veya bir sistem geliştirmeden önce kapsamlı şekilde ele alınması gereken bir konudur. Bu bölümde problem çözme yaklaşımlarından biri olan algoritmanın ne olduğu, nasıl geliştirilebileceği ve algoritma ile ilgili temel bilgiler verilmiş, örneklerle açıklanmıştır. Anahtar Kelimeler: Akış diyagramı, algoritma, algoritma tasarımı, karmaşıklık TIP BİLİŞİMİ

Upload: others

Post on 02-Nov-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 13. BÖLÜM / CHAPTER 13

13. BÖLÜM / CHAPTER 13

ALGORİTMA

ALGORITHM

Fatma Önay KOÇOĞLU*, Çiğdem SELÇUKCAN EROL**

*Dr., Muğla Sıtkı Koçman Üniversitesi Mühendislik Fakültesi Yazılım Mühendisliği Bölümü, Muğla, TürkiyeE-mail: [email protected]

**Doç.Dr., İstanbul Üniversitesi Enformatik Bölümü ve Fen Fakültesi, Biyoloji Bölümü Botanik ABD, İstanbul, Türkiye

E-mail: [email protected]

DOI: 10.26650/B/ET07.2021.003.13

ÖZ

Yaşamımız süresince birçok problem ile karşı karşıya kalmakta ve bu problemler için çözümler üretmeye çalışmaktayız. Çözümler üretirken tek bir çözüm üzerinde düşünmemekte, olası tüm çözümleri göz önüne alıp o an için en doğru ve mantıklı olanını seçmeye çalışmaktayız. Problemi çözmek üzere geliştirdiğimiz çözüm yolları genellikle belirli adımların veya kuralların izlenmesini gerektirmektedir. Bu süreç algoritma olarak tanımlanmaktadır. Algoritmalar hayatımızın hemen her alanında yer almaktadır. Sabah işe yetişmek için de, hekim olarak hastalarla görüşmelerde de farkında olarak ya da olmayarak algoritma kullanılmaktadır. Bilgisayarlarda da bir problemin çözümü için kod yazılacağı zaman öncelikle problem ele alınmakta, mümkün olduğunca kısa zamanda ve doğru sonuca ulaştıran çözüm adımları belirlenmektedir. Bu adımların belirli kurallar çerçevesinde anlaşılır ve sade bir şekilde ifade edilmesi ile algoritmalar elde edilmektedir. Algoritmalar geliştirildikten sonra bazı durumlar karşımıza çıkmaktadır. Bunlar, ortak bir dilde algoritmayı ifade etme, algoritma içerisinde kullanılan belirli yapılar ve hangi algoritmanın en iyi çözümü sağlayacağının belirlenmesidir. Çözüm geliştirici algoritmayı kendi anadilinde yazabilir, ancak ortak bir anlatım dilinde buluşabilmek böylece geliştirilen çözümün herkes tarafından anlaşılabilir olması için algoritma şekilsel bazı ifadeler kullanılarak farklı bir forma dönüştürülür. Bu form akış diyagramı olarak ifade edilmektedir. Hem algoritmalarda hem de akış diyagramında çeşitli yapılar kullanılmaktadır. Örneğin bir çözüm adımında birden fazla seçenek söz konusu ise ve duruma göre bu seçeneklerden biri seçilmesi gerekiyorsa bu noktada karar verme eylemi karşımıza çıkmaktadır. Bu doğrultuda sıralı, karar ve tekrarlı işlem yapıları kullanılmaktadır. Daha önce de ifade edildiği gibi, bir problemin çözümü için birden fazla algoritma geliştirilebilir. Geliştirilen bu algoritmaların hepsi de kullanılabilir. Ancak burada da hangi algoritmanın seçileceği problemi ile karşı karşıya kalınmaktadır. Bu problemin çözümünde algoritma karmaşıklığı belirlenmektedir. Belirtilen tüm bu hususlar göz önünde bulundurulduğunda algoritma geliştirme bir bilgisayar programı veya bir sistem geliştirmeden önce kapsamlı şekilde ele alınması gereken bir konudur. Bu bölümde problem çözme yaklaşımlarından biri olan algoritmanın ne olduğu, nasıl geliştirilebileceği ve algoritma ile ilgili temel bilgiler verilmiş, örneklerle açıklanmıştır.

Anahtar Kelimeler: Akış diyagramı, algoritma, algoritma tasarımı, karmaşıklık

TIP BİLİŞİMİ

Page 2: 13. BÖLÜM / CHAPTER 13

ALGORİTMA250

1. Problem Nedir?

Problem kavramı, günlük hayat akışında zihnimizde “istenmeyen bir durum” yargısı oluştursa da farklı bilim alanlarında bu kavramın anlamı değişiklik göstermektedir. Örneğin, sosyal bilimlerde hoşa gitmeyen, çözüm üretilmesi gereken ve kurtulmak istenilen durum olarak ifade edilirken, matematikte içinde bulunulan şartlar göz önüne alınıp, mevcut verinin kullanılarak, teorem ve kurallar yardımıyla bir sonuca ulaşılmak istenilen durum şeklinde ifade edilmektedir. Ancak hangi anlamda kullanılırsa kullanılsın her durumda problem için üretilmesi gereken bir çözüm söz konusudur. Hatta bu durumda tek bir çözümden değil bir çözüm kümesinden de bahsedilebilir. Bir problem için çözüm üretilirken de belirli aşamalara ihtiyaç vardır. Bu aşamalar;

- Problemin belirlenmesi,

- Problemin anlaşılması (verilen ve istenenlerin belirlenmesi),

- Problem için farklı çözüm yollarının ortaya konulması,

ABSTRACT

Throughout our life, we face many problems and try to find solutions for these problems. While producing solutions, we do not think about a single solution, we consider all possible solutions and try to choose the most correct and logical for that moment. The solutions we have developed to solve the problem usually require following certain steps or rules. We define this process as algorithm. That is why algorithms are present in almost every area of our lives. People use an algorithmic solution, whether they are aware of it or not, to catch up to work in the morning or in meetings with patients as a doctor. When a code is to be written to solve a problem in computers, the problem is addressed first, and the solution steps that lead to the right result as soon as possible are determined. Algorithms are obtained by expressing these steps in a clear and simple way within the framework of certain rules. Some situations arise after the development of algorithms. These are expressing the algorithm in a common language, the specific structures used in the algorithm, and determining which algorithm will provide the best solution. The solution developer can write the algorithm in her/his native language, but the algorithm is transformed into a different form by using some shapes to meet a common expression language so that the developed solution can be understood by everyone. This form is expressed as a flowchart. Various structures are used in both algorithms and flowcharts. For example, if there is more than one option in a solution step and one of these options must be selected according to the situation, then, at this point, the role of decision-making action emerges. Accordingly, sequential, decision, and loop structures are used. More than one algorithm can be developed to solve a problem. All these developed algorithms can be used. However, the problem of which algorithm to choose is encountered. The complexity of the algorithm is determined in the solution of this problem.Considering all these issues, algorithm development is an issue that needs to be addressed comprehensively before developing a computer program or a system. This section describes what algorithm is as a problem-solving approach, how it can be developed, and provide and explain basic information with examples.

Page 3: 13. BÖLÜM / CHAPTER 13

251Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

- Oluşturulan çözüm yollarının test edilmesi,

- En uygun çözüm yolunu belirlemek,

- Çözümün uygulanması

- Elde edilen sonuçların değerlendirilmesi

şeklinde sıralanabilir. Problem çözümü için farklı yaklaşımlar geliştirilmiştir. Bu yakla-şımlar algoritmik ve sezgisel yaklaşımlardır. Bu kitap bölümünde algoritmik yaklaşım esas alınmıştır. Yaklaşımlar ile ilgili açıklamalardan önce algoritma kavramını ele almak gerek-mektedir.

2. Algoritma Nedir?

Algoritma kelimesi, IX. yüzyılda Orta Asya’da Harizm bölgesinde doğmuş ve yaşamış matematikçi Muhammed bin Musa Al-Harezmi’nin adından gelmektedir. Harezmi cebir ala-nındaki çalışmaları ile matematiğe çok büyük katkılar sunan bir alimdir. Harezmi, “Kitab- ül Mukhtasar fi Hisap al-jabr wa’l-muqabala” adlı kitabında cebir ve algoritma ile ilgili çalış-malarını toplamış, bu kitap dünya çapında oldukça ilgi gören ve birçok dile çevrilen bir kitap haline gelmiştir. Harezmi’nin isminin telafuzundaki farklılıklar sonucu da kitapta ilk kez bahsedilen yeni yaklaşım “algoritma” adını almıştır.

Algoritma, Türk Dil Kurumu Bilim ve Sanat Terimleri Sözlüğü (Bilişim Terimleri Sözlü-ğü-1981)’ nde “Bir sorunun çözümü için, sonlu sayıda adım biçiminde iyice tanımlanmış, sonlu bir kurallar kümesi” şeklinde tanımlanmaktadır (TDK 2020). Birçok araştırmacı da algoritma ile ilgili çeşitli tanımlamalar yapmıştır. Kurnaz (2008), bu tanımı en basit ifade ile bir işin nasıl yapılacağını gösteren adım adım tarif; Çölkesen (2014) programlamayı da dâhil ederek, belirli bir iş veya görevi tanımlanmış veya sonradan tanımlanacak veri modellerine göre basamak basamak belirtmek ve bilgisayar ortamında bir programlama dili vasıtasıyla kodlamak; Kalaycı (2012), bir problemin çözümü için ortaya konulan çözüm adımları şeklinde ifade etmiştir. Tüm bu tanımlardan yola çıkarak algoritma tanımı, “bir problemin en kısa yoldan, mantıklı ve doğru çözümü için uygulanması gereken ardışık ve sonlu adımlar dizisi” şeklinde yapılabilir.

Bu tanımlar ele alındığında algoritmanın ardışık, sonlu, problemin çözümüne yönelik olması gibi özelliklerinin olduğu anlaşılmaktadır. Ancak bir algoritmanın özellikleri bununla sınırlı değildir. Bir algoritmanın sahip olması gereken özellikler aşağıda kısaca açıklanmıştır;

- ALGORİTMA ETKİN OLMALIDIR

Algoritma etkin olmalı, gereksiz yinelemeler içermemelidir. İhtiyaç duyulduğunda başka algoritmalar tarafından kullanılabilmelidir. Algoritma, olası tüm ihtimaller göz önünde

Page 4: 13. BÖLÜM / CHAPTER 13

ALGORİTMA252

bulundurularak, mümkün olduğunca genel olarak yazılmalıdır. Gerekirse ana ve alt algorit-malar olarak parçalı şekilde tasarlanabilir.

- ALGORİTMA KESİN OLMALIDIR

Algoritmada kesinlik önemlidir. İşlemlerin sonucu net olmalıdır. Algoritmanın bütün adımları belli olmalı ve buradaki her adım kesin olmalı, şansa bağlı olmamalıdır. Matematik-sel olarak doğrulanabilmelidir.

- ALGORİTMA SONLU OLMALIDIR

Algoritmaların mutlaka bir başlangıcı olmalı ve sonsuz döngüye girmemeleri bir yerde sonlanmaları gerekmektedir.

- ALGORİTMA GİRDİ VE ÇIKTI İÇERMELİDİR

Her algoritma bir üretim birimi olarak düşünülebilir. Ham madde girişine ihtiyaç duyar ve bu giriş sonucunda mutlaka bir ürün (çıktı) üretir.

- ALGORİTMANIN PERFORMANS DEĞERLENDİRMESİ YAPILMALIDIR

Algoritma karmaşıklıkları ve girdi miktarı ile performansları ölçülerek probleme en uygun algoritma tercih edilmelidir. Bu nedenle algoritmanın performans değerlendirmesi yapılabil-melidir. Belirsiz ifadeler içermemeli anlaşılır olmalıdır.

Görüldüğü gibi bir problemi çözmek için algoritma geliştirmek istendiğinde bilmemiz/ dikkat edilmesi gereken özellikler/ kısıtlar bulunmaktadır. Bu özelliklere dikkat etmeden de problemin çözümü mümkün olabilir mi? Evet, olabilir. Bir problemin çözümü için iki yak-laşımdan söz edilmişti: Algoritmik ve Sezgisel Yaklaşımlar. Algoritmik yaklaşım, çözümün adım adım belirtildiği ve çözüm kümesi içerisinden en uygun çözümün seçildiği yaklaşımdır. Sezgisel yaklaşım ise, tam anlamıyla bir çözüm söz konusu olmadığında veya algoritmik bir yaklaşım ile çözüme ulaşılamadığı durumlarda çözümü tasarlayan kişinin tecrübesine bağlı olarak problem çözümünü şekillendirmesine dayalı bir yaklaşım türüdür. Ancak problem çö-zümünde genellikle ve öncelikle algoritmik yaklaşım (algoritma ile problem çözümü) tercih edilir. Algoritmik yaklaşım ile çözülemeyen problemler için sezgisel (heuristic) yaklaşım kullanılmaktadır. Sezgisel yaklaşımda çözümün doğruluğu ispatlanmayabilir. Bir probleme çözüm üretilebilir ancak her zaman problemi çözeceği ya da aynı hızda çözeceği garanti edilemez.

Page 5: 13. BÖLÜM / CHAPTER 13

253Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

3. Algoritma Tasarımı

Algoritma tanımı yapılırken bir problemin çözümü için gerekli ardışık adımlardan oluş-tuğu ifade edilmişti. Dolayısıyla bu adımların neler olacağı, hangi sırada bu adımların uygu-lanması gerektiği, algoritmanın farklı gösterim türleri ile ifadesi gibi unsurların belirlenmesi gerekmektedir. İfadeden de anlaşılacağı üzere bu bir tasarım işidir ve algoritma tasarımı olarak ifade edilmektedir.

Algoritma tasarımı için öncelikle problem analizi yapılmalıdır. Problemde verilenler, elde edilmek istenen sonuç ve bu sonuca ulaşılabilmesi için gerçekleştirilmesi gereken ara işlemle-rin neler olduğu belirlenmelidir. Bunun yanı sıra veri ve sonucun algoritma içerisinde temsil edilmesi için kullanılan bazı ifadeler söz konusudur ve değişken olarak adlandırılmaktadır. Değişken, problem içerisinde değişen değerler alma durumu olan veriyi, anlamca en yakın ve en kısa şekilde ifade edebilmek için kullanılan karakter veya karakter topluluklarıdır. Yani bir problemin çözümünü tasarlarken verilenler için değişken oluşturulabilmekte, problem farklı sayılar için çözülürken sadece değişken değerleri değiştirilebilmektedir. Örneğin bir öğren-cinin vize ve final notlarının aritmetik ortalaması bulunmak istensin. Çözümü ve algoritmayı tasarlarken bunu herhangi bir öğrenci için yapıyormuş gibi davranmak gerekir. Yani öğren-cinin notları 50 ve 70 ise, “50 ve 70’i topla, ikiye böl sonuç 60’tır” şeklinde ifadeler değil de, “öğrencinin vize notunu al, final notunu al, vize ve final notunu topla, toplamı ikiye böl, sonucu ekrana yazdır” şeklinde ifadeler kullanılmalıdır. Buradan görüleceği üzere vize notu her öğrenci için farklı olabilir. Benzer şekilde bu durum final notu, vize ve final notu toplamı ve elde edilen sonuç için de geçerlidir. Dolayısıyla bunlar da birer değişen değerlerdir. Bu durumda “öğrencinin vize notu”, “öğrencinin final notu” gibi uzun ifadeler kullanmak yerine VN, vize_notu, v_notu, FN, f_notu gibi değişken ismini verdiğimiz karakter toplulukları kullanılabilir.

Algoritmanın tasarlanırken farklı gösterim türlerinden yararlanılmaktadır. Algoritmanın sözde kod, akış diyagramları, Nassi-Schnederman şemaları, Warnier-Orr şemaları gibi farklı gösterim şekilleri mevcuttur. Algoritma gösteriminde ağırlıklı olarak; konuşma diline yakın ve belirli bir programlama diline yönelik öğeler içermeyen “Sözde Kod (Pseudocode)” ile beraber grafiksel gösterimi amaçlayan akış diyagramı ve simgeleri kullanılmaktadır.

3.1. Sözde Kod

Algoritmanın yazım diline yakın ancak bir programlama dilinden de farklı olacak şekilde ifade edildiği gösterim şeklidir. Sözde kod, gerçek programlamaya geçmeden önce problem çözümü için gerçekleştirilmesi gereken adımların, yani algoritma adımlarının daha anlaşıla-

Page 6: 13. BÖLÜM / CHAPTER 13

ALGORİTMA254

bilir olması amacıyla sade bir dille hatta günlük hayatta kullandığımız dile yakın, algoritma ve program akışı yapısına sadık olarak yazılmaktadır. Böylece sözde kodun programcıya gerçek kodlama aşamasında algoritmanın ana hatlarını ve programın çalışma mantığını ak-taracak şekilde yol gösterici olması amaçlanmaktadır. Sözde kodun özellikleri aşağıdaki gibi özetlenmiştir:

- Sade dille yazılır ve problemin çözümü için gerekli tüm adımlar açık bir şekilde belir-tilir.

- Herhangi bir programlama diline özgü ifadeler kullanılmaz.

- Programlama dilinden bağımsız olarak program mantığının anlaşılmasını amaçlar.

- Kullanılan bazı ifadeler söz konusu olsa da genelleştirilmiş bir standardı yoktur.

- Hataların sözde kod aşamasında yakalanması ve giderilmesi daha kolay ve az maliyet-lidir.

Örnek 1. Sözde Kod

Bir öğrenciye ait vize ve final notlarının aritmetik ortalamasını bulan ve ortalama 50’den büyük ise “Başarılı” aksi halde “Başarısız” sonucunu döndüren programın sözde kodunun yazılması.

Sözde Kod

1. Vize notu için V, final notu için F ve ortalama için Ort SEÇ2. BAŞLA3. V değerini OKU4. F değerini OKU5. Ort=(V+F)/2 HESAPLA6. EĞER Ort>50 ise “Başarılı” YAZ

DEĞİL İSE6.1. “Başarısız” YAZ

7. BİTİR

Örnek 1’de görüldüğü üzere basit ve kısa ifadeler ile öğrenci başarı durumunu gösteren bir algoritmanın sözde kodu oluşturulmuştur. Burada özellikle komutlar koyu ve büyük harfler ile belirtilmiştir. Bunun yanı sıra sözde kodun birinci satırında verilenler için değişkenler oluşturulduğuna dikkat edilmelidir. Bu adımdan sonra değişkenler kullanılmıştır.

3.2. Akış Diyagramı

Algoritmaların herhangi bir kişi tarafından bilgisayar programına dönüştürülebilir olması için ortak bir dil ile ifade edilmesi gerekmektedir. Örnek 1’de hazırlanan sözde kod Türkçe olarak hazırlanmıştır ve belirli bir standart olmadığından dünyanın başka bir yerindeki kişi

Page 7: 13. BÖLÜM / CHAPTER 13

255Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

tarafından anlaşılması pek mümkün görünmemektedir. Ancak bu noktada akış diyagramları yardıma yetişmektedir.

Algoritmaların daha önceden standardize edilmiş belirli geometrik semboller ile göste-rim şekline akış diyagramı denir. Algoritmada ifade edilen her bir komut akış diyagramında bir sembol ile temsil edilmektedir. Örneğin Örnek 1’de yer alan sözde kodun 5. satırındaki hesaplama (işlem) komutunun akış diyagramındaki karşılığı dikdörtgen sembolüdür. Akış diyagramları hazırlanırken dikkat edilmesi gereken bazı hususlar söz konusudur (Gülseçen ve Kartal, 2011):

- Sembollerin iç içe geçmemesi,

- İşlem akış yönü çizgilerinin birden fazla büklüm bulundurmaması ve birbirlerini kes-memesi,

- Başta karşılaştırma işlem kutusu olmak üzere bütün kutulara dörtten fazla giriş–çıkış bağlanmaması.

Akış diyagramları da algoritmada olduğu gibi sıralı adımlardan meydana gelmeli, algo-ritmada belirtilen sıra takip edilmelidir. Şekil 1’de sık kullanılan akış diyagramı sembollerine yer verilmiştir.

Akış diyagramı başla/bitir sembolü algoritmanın başlangıç ve bitiş noktalarını gös-termektedir. İşlem sembolü ise işlem/hesaplama/atamanın gerçekleştirildiği adımları ifade etmektedir. Veri giriş/çıkış sembolü girilen ve çıkan verinin olduğu adımları temsil eder. Ör-neğin öğrencinin vize ve final notunun ekrandan girilmesi bir veri girişini, öğrencinin girilen vize ve final notuna göre hesaplanan ortalamasının ekrana aktarılması ise veri çıkışını ifade etmektedir. Bağlantı sembolü ise aynı sayfaya sığmayan ya da parçalı çizilen akış diyagramla-rının bağlantılarının sağlanması için kullanılmaktadır. Akış yönü sembolleri adımlar arasında hangi yönde gidilmesi gerektiğini, okların ucu gidilecek bir sonraki adımı göstermektedir. Yazdırma sembolü ise genelde veri çıkış sembolü ile eşdeğer anlamda kullanılsa da kağıt üzerine bir yazdırma aracının kullanıldığı durumu ifade etmek için kullanılmaktadır. Geriye kalan karar ve döngü sembolleri ise bu kitap bölümünün ilerleyen kısımlarında verilen, prog-ramlamada temel yapılardan olan karar ve döngü yapılarının açıklamaları ile ele alınacaktır. Programlamada üç temel yapı kullanılmaktadır. Bunlar sıralı yapı, karar yapısı ve döngü (tekrarlı işlem) yapısıdır.

Page 8: 13. BÖLÜM / CHAPTER 13

ALGORİTMA256

Şekil 1. Akış diyagramı sembolleri

Page 9: 13. BÖLÜM / CHAPTER 13

257Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

Örnek 2. Algoritma ve Akış Diyagramı

Bir öğrencinin aylık harcamaları hesaplanmak istenmektedir. Bu öğrenciye ait aylık har-camalarının hangi kalemlerde olduğu ve bu kalemlerin bursuna göre oranları aşağıda veril-miştir. Aylık burs miktarı verisi öğrenciden alınmakta, her bir kalem için harcama miktarları hesaplanmakta, sonuç bir kâğıda yazdırılmaktadır. Bu probleme ait algoritmayı ve akış di-yagramını tasarlayınız. (Oranlar: Kira: %25, Fatura: %10, Kredi Kartı Giderleri: %10, Yemek Giderleri: %15)

Problemin Analizi:

Verilenler (VERİ): Burs (B) ve Oranlar: Kira: %25, Fatura: %10, Kredi Kartı Giderleri: %10, Yemek Giderleri: %15. Burs miktarı her öğrenci için farklı olabileceğinden bir değişken, soru içerisinde verilen oranlar ise tüm hesaplamalar için aynı olduğundan sabit veri şeklinde değerlendirilmektedir.

İstenenler (BİLGİ): Kira Tutarı (KT), Fatura Tutarı (FT), Kredi Kartı Tutarı (KKT), Yemek Giderleri Tutarı (YGT). Belirtilen her bir tutar girilecek burs miktarına göre değişe-ceğinden, her biri bir değişken olarak değerlendirilmektedir.

İşlemler:

KKT=B*0,10 | KT=B*0,25 | FT=B*0,10 | YGT=B*0,15

Problemin Algoritması:

1. Başla

2. Burs miktarını al.

3. Verilen oranlara göre kira tutarı hesapla.

4. Verilen oranlara göre fatura tutarı hesapla.

5. Verilen oranlara göre kredi kartı tutarı hesapla.

6. Verilen oranlara göre yemek giderleri tutarı hesapla.

7. Kira, fatura, kredi kartı, yemek giderleri tutarlarını kâğıda yazdır.

8. Bitir

Page 10: 13. BÖLÜM / CHAPTER 13

ALGORİTMA258

Problemin Akış Diyagramı:

Açıklama: Algoritmada ilk ve son adımlar başla ve bitir adımlarından oluşmaktadır. Akış diyagramına da bakıldığında başlama ve bitirme adımları başla ve bitir sembolleri ile gös-terilmektedir. Algoritma başlatıldıktan sonra sırası gelen adım 2. adım olup burs miktarının alınmasıdır. Akış diyagramına bakıldığında paralelkenar sembolü ile bir veri giriş/çıkış sem-bolünün yer aldığı görülmektedir. Bu sembolün içerisi ise öğrenciden alınan burs miktarı verisinin tutulduğu B değişkenidir. Yani burs olarak 2000 değeri kullanılacaksa bundan son-raki yapılacak işlemlerde B’nin değeri 2000 olarak alınacaktır. Başka bir burs değeri girilirse B’nin değeri son girilen burs değerini alacaktır. Görüldüğü üzere her bir değer için algoritma yazılmamakta, girilen farklı değerler B değişkeni ile tutulmaktadır.

Page 11: 13. BÖLÜM / CHAPTER 13

259Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

Burs verisi girildikten sonra algoritmada verilen oranlara göre Fatura, Kira, Kredi Kartı ve Yemek Gideri tutarlarının hesaplanması istenmektedir. Bu da akış diyagramında veri girişin-den sonra gelen işlem sembolü ile gösterilmiştir. Bu sembolün içerisi de problemin analizinde belirtilen işlemlerin yazılması ile doldurulmuştur. Son olarak elde edilen tutarların kâğıda yazdırılması söz konusudur. Bunun için de yazdırma sembolünden yararlanılmıştır. Yazdı-rılan tutarlar Fatura, Kira, Kredi Kartı ve Yemek Gideri tutarları olduğundan bu tutarlara ait değişkenler kullanılmıştır. Yine hatırlanmalıdır ki, bu tutarlar burs verisine göre değişecektir. Dolayısıyla işlemler sonucu da değişiklik gösterecektir. Bu sembol içerisine değişken isimleri yazıldığından o an değişken hangi değeri tutuyorsa o değer kâğıda yazdırılacaktır.

4. Temel Yapılar ve Akış Diyagramı Gösterimleri

4.1. Sıralı Yapı

Sıra ile mantık çerçevesinde birbiri ardına gelen işlemlerin meydana getirdiği yapıdır. Yeni bir işlem önceki işlemin bitişi ile başlamaktadır. Sıralı yapının akış diyagramı ile gösterimi Şekil 2’de yer almaktadır.

Şekil 2. Sıralı yapı

4.2. Karar Yapısı

Günlük hayatta da sıkça içinde bulunduğumuz karar verme durumu, algoritma tasarımında da karşımıza çıkmaktadır. İş yerimize veya okula gitmeye çalıştığımızı varsayalım. Otobüs durağında beklerken birçok otobüs gelecektir. Öncelikle gelen otobüslerin numarasına bakar, gitmek istediğimiz yer için kullanılan otobüsün numarası olup olmadığını kontrol ederiz. Bu kontrol sonrasında otobüs numarası koşulumuza uygunsa otobüse bineriz aksi durumda bir sonraki otobüsü bekleriz. Dolayısıyla koşulun sağlanma durumuna göre otobüse binmeye veya bir sonraki otobüsü beklemeye karar veririz.

Programlamada da karar yapısı aynı mantık ile çalışır. Karar verme noktasına gelindiğinde önce kontroller yapılır ardından elde edilen sonuçlara göre hangi yolun izlenmesi gerektiğine karar verilir. Karar verme noktası dediğimiz yer koşul ifadelerinin yer aldığı bölümdür. Örne-ğin Örnek 1’de öğrencinin başarılı olma koşulu vize ve final notu ortalamasının (Ort) 50’den büyük olmasıdır. Dolayısıyla bu durumun koşul ifadesi aşağıdaki gibi olacaktır.

Ort > 50

Page 12: 13. BÖLÜM / CHAPTER 13

ALGORİTMA260

Koşul ifadelerinin sonuçları “doğru” veya “yanlış”tır. Doğru ifadeler 1, yanlış ifadeler ise 0 olarak kabul edildiğinde, koşul ifadesi örneğine göre ortalama 50’den büyük ise koşul ifadesinin sonucu 1, yanlış ise 0 değerini alacaktır.

Koşul ifadesinin akış diyagramlarında gösterimi Şekil 1’de de gösterildiği üzere eşkenar dörtgen biçimindedir. Bu dörtgenin içerisine koşul ifadesi yazılır. Dörtgenin dört köşesinde ise akış yönü sembolleri yer almaktadır. Bu sembollerden birisi dörtgene doğru iken diğeri dörtgenden dışarıya doğrudur. Dörtgene doğru akış yönü sembolü bir önceki işlemde ele edilen sonucun karar yapısına iletilmesini, dörtgenden dışa doğru akış yönü sembolü karar ifadesinden sonra gidilecek yapıyı göstermektedir. Yine Örnek 1 için akış diyagramında karar yapısı gösterimi Şekil 3’teki gibi olacaktır. Buna göre koşul ifadesi sağlanıyorsa (sonuç 1 ise) “Evet” yönü, sağlanmıyorsa (sonuç 0 ise) “Hayır” yönüne gidilecektir.

Şekil 3. Örnek 1 için karar yapısı

Bir akış diyagramında birden fazla karar yapısı kullanılabilmekte, hatta bu karar yapıları arka arkaya da gelebilmektedir. İç içe karar yapısı dediğimiz bu durumlarda bir karar yapısının varlığı, önceki karar yapısında yer alan koşulun gerçekleşmesine veya gerçekleşmemesine bağlıdır. Bu durumdaki bir karar yapısı akış diyagramında Şekil 4’teki gibi yer alacaktır. Şe-kil 4 incelendiğinde koşul 1 ifadesi gerçekleşmediği taktirde yani cevap “Hayır” olduğunda koşul 2 irdelenecek bu koşulun doğruluğuna göre diğer adımlara devam edilecektir. Koşul 1’in sağlanması durumunda yani cevap “Evet” olduğunda ise koşul 2 hiç değerlendirmeye alınmayacaktır. Örneğin bir öğrencinin yıl sonu ortalama puanına karşılık hangi harf notunun gelmesi gerektiğini bulmak için böyle bir karar yapısı kullanılabilir. Öğrencinin notu (ogr_not) 75 ve üzeri ise A, 50 ile 75 arası ise B, diğer durumlarda ise F notu geleceği varsayılırsa, sırasıyla koşul 1 ve koşul 2 ifadeleri aşağıdaki şekilde olacaktır.

Page 13: 13. BÖLÜM / CHAPTER 13

261Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

ogr_not>=75ogr_not>50 ve ogr_not<75

(koşul 1)(koşul 2)

Şekil 4. İç içe karar yapısı

Örnek 3. Karar Yapısı Algoritma ve Akış Diyagramı

Bir hastanın tahlil sonuçları incelenecek ve bulgular doğrultusunda karar verilecektir. Bu değerlendirme için bir bilgisayar programı kullanılacaktır. Hastanın glukoz değeri 70 ile 100 mg/dL arasında (sınır değerler dahil) ise bilgisayar ekranına “Hasta sağlıklıdır”, aksi durumda ise “HbA1c’ye bakılmalıdır” ifadesinin yazdırıldığı probleme ait algoritma ve akış diyagramını tasarlayınız.

Problemin Analizi:

Verilenler (VERİ): Glukoz Değeri (GD)

İstenenler (BİLGİ): Hasta ile ilgili değerlendirme sonucu (“Hasta sağlıklıdır” ya da “HbA1c’ye bakılmalıdır” mesajı)

Problemin Algoritması:

1.Başla

2.Hastanın glukoz değeri alınacak.

3. Değer 70 ile 100 mg/dL arasında (sınır değerler dahil) ise 4. adıma, değilse 5. adıma gidilecek.

Page 14: 13. BÖLÜM / CHAPTER 13

ALGORİTMA262

4. Ekrana “Hasta sağlıklıdır” yazdırılacak ve 6. adıma gidilecek.

5. Ekrana “HbA1c’ye bakılmalıdır” yazdırılacak.

6. Bitir.

Problemin Akış Diyagramı:

Dikkat edilmelidir ki; problemin algoritması yazılırken 3. ve 4. adımlarda kendilerinden sonra hangi adıma gidilmesi gerektiği ifade edilmiştir. Algoritma yapısında eğer başka bir komuta (ifadeye) yer verilmiyorsa, otomatik olarak bir sonraki adım dikkate alınmaktadır. Yani eğer 3. adımda hangi adımlara gidilmesine dair bir ifade yer almasaydı otomatik olarak 4. adıma, 4. adımdan da (6. adıma git ifadesi olmasaydı) benzer şekilde otomatik olarak 5. adıma gidilecekti. Ancak böyle bir durumda ekrana hem “Hasta sağlıklıdır”, hem de “HbA-1c’ye bakılmalıdır” ifadeleri arka arkaya yazdırılmış olacaktır. Bu durumda mantıksız bir sonuç elde edilecek, problemde istenilen yerine getirilemeyecektir. Özellikle 3. adım göz önünde bulundurulduğunda cümle içerisinde “ise” ve “değilse” sözcükleri yer almaktadır. Bu sözcükler koşul ifadelerinin göstergesidir ve belirtilen koşullara göre ne yapılması gerektiğini belirtmektedir.

Page 15: 13. BÖLÜM / CHAPTER 13

263Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

4.3. Tekrarlı İşlem (Döngü) Yapısı

Bazı problemlerin çözümünde tekrar eden işlemler söz konusu olmaktadır. Böyle du-rumlarda gerek algoritma içerisinde, gerekse hazırlanan bilgisayar programlarında ifade ve kodların tekrarını engellemek için tekrarlı işlem (döngü) yapıları kullanılmaktadır. Böylece tekrar eden işlemleri her tekrar için yazmak yerine işlemleri bir kez yazıp, bu işlemlerin tekrar ettiğini belirten semboller kullanılmaktadır.

Örnek 1 üzerinden açıklamak gerekirse; Örnek 1’deki algoritma baştan sona bir kez takip edildiğinde sadece bir öğrenci için işlemler gerçekleştirilmektedir. Bir okuldaki tüm öğrenci-ler için başarı durumu belirlenmek istendiğinde ise Örnek 1’de yer alan algoritmanın yeterli olmadığı açıktır. Dolayısıyla tasarlanan algoritma istediğimiz çözüme uygun değildir. İşte bu durumlarda döngü ifadesi algoritmaya ve döngü sembolü de akış diyagramına yerleştirildi-ğinde algoritma için yapılacak işlemlerin birden fazla kere tekrar edeceği anlaşılacak, çözüm doğru ve tam olarak ifade edilmiş olacaktır.

Akış diyagramlarında döngü yapıları altıgen ile temsil edilmektedir. Bu yapı Şekil 5’te görülmektedir. Tekrarlı işlem yapısında döngü değişkeni adını verdiğimiz ve i ile ifade edi-len bir değer kullanılmaktadır. Tekrarlı işlem yapısı içerisinde yer alan tüm işlemlerin her tekrarında i’nin değeri değişmekte, böylece işlemlerin kaç kez tekrar ettiği belirlenmektedir. Altıgen içerisinde döngünün başlangıç noktası (i=1), döngünün nereye kadar devam edeceği başka bir ifade ile döngünün devam etme koşulu (i<=50) ve döngü değişkeninin ilerleme durumu (i++) belirtilmektedir. Genellikle i değeri 1’den başlatılırken, problemin içeriğine göre farklı başlangıç değerleri de alabilmektedir. Bu nedenle tekrarlı işlem yapısı içerisinde bu başlangıç değeri belirtilmektedir. Devam etme koşulu, hangi koşul sağlandığı sürece dön-güdeki işlemlerin tekrar ettirileceğini göstermektedir. İlerleme durumu ise döngü yapısının içerisi tekrar ettikten sonra i değerinin nasıl bir değişiklik göstereceğini ifade eder. Döngü içerisindeki işlemler bir kez gerçekleştirildikten sonra döngü değişkeni ilerleme durumunda belirtilen şekilde değiştirilerek (arttırılıp/azaltılarak) döngü yapısı devam koşuluna uygun olup olmadığı kontrol edilir. Eğer koşul sağlanıyorsa döngü devam edecek demektir. Bu durumda işlemler baştan başlatılır. Aksi durumda ise döngüden çıkılır ve döngü yapısından sonra gelen adım ile devam edilir.

Şekil 5 incelenecek olursa, başlangıç noktası 1 olarak belirtilmiştir. Döngü, i sayısı 50’den küçük ve eşit olduğu sürece devam edecektir. Bunun yanı sıra döngü içerisindeki tüm işlem-ler bir kez tamamlandığında i sayısı 1 arttırılacaktır. Burada i değerini 1 arttırma i++ olarak gösterilmektedir. Benzer şekilde 1 eksiltmek istenirse i--, 2 arttırmak istenirse i+2 şeklinde

Page 16: 13. BÖLÜM / CHAPTER 13

ALGORİTMA264

ifade edilmektedir. Döngünün ilk turda işleyişi şu şekildedir:

- i 1’den başlayacak,

- işlemler bir kez gerçekleştirilecek,

- i bir arttırılıp 2 olacak,

- i değeri kontrol edilecek, 2 sayısı 50’den küçük olduğu için başa dönülerek işlemler tekrarlanacak

Bu işlemler dizisi devam etme koşul ifadesine göre tekrar edecek veya döngü sona ere-cektir.

Şekil 5: Döngü yapısının akış diyagramında gösterimi

Örnek 4. Döngü Yapısı Algoritma ve Akış Diyagramı

Önlenemeyen bir virüs salgını sebebiyle her saat sonunda var olan hasta sayısının %1’i kadar yeni hasta oluşmaktadır. Güncel hasta sayısı verisinin alındığı ve bu sayıya göre 5 saat sonunda oluşacak toplam hasta sayısının hesaplanarak sonucun bilgisayar ekranına yazdırıl-dığı probleme ait algoritmayı ve akış diyagramını tasarlayınız.

Problemin Analizi:

Verilenler (VERİ): Toplam Hasta Sayısı (THS), hasta sayısı artış oranı (%1), 5 saatlik süre

İstenenler (BİLGİ): Yeni Hasta Sayısı (YHS)

İşlemler: YHS= THS*0.01

THS= THS +YHS

Page 17: 13. BÖLÜM / CHAPTER 13

265Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

Problemin Algoritması:

1. Başla

2. Başlangıç anındaki Toplam Hasta Sayısı alınacak.

3. i=1’den başlamak üzere i<=5 olacak şekilde döngü tanımlanacak.

3.1. Toplam Hasta Sayısının %1’i hesaplanarak Yeni Hasta Sayısı elde edilecek.

3.2. Toplam Hasta Sayısı ile Yeni Hasta Sayısı toplanacak, son durumdaki Toplam Hasta Sayısı elde edilecek.

3.3. i, 1 arttırılacak.

3.4. i, 5’ten büyük ise Adım 4’e, değilse Adım 3.1’e gidilecek.

4. Toplam Hasta Sayısı ekrana yazdırılacak.

5. Bitir.

Problemin Akış Diyagramı:

Açıklama: Bu örnekte karşımıza THS= THS +YHS şeklinde matematiksel mantığa uy-mayan bir işlem çıkmaktadır. Buradaki eşitlik bir matematiksel eşitlik değil programlamada kullanılan bir “atama” işlemidir. Eşitlik bir başka deyişle “=” işareti programlamada atama operatörü olarak kullanılmaktadır. Bu atama işlemi ile sağ tarafta elde edilen değer sol taraf-taki değişkene atanır.

Page 18: 13. BÖLÜM / CHAPTER 13

ALGORİTMA266

Örnek 4 için döngü yapısı başladığında Toplam Hasta Sayısı (THS) 1000 ise, 1 saat sonun-da Yeni Hasta Sayısı (YHS) 1000*0.01 işlemi ile 10 olacaktır. Bu doğrultuda, 1. saat bittiğinde yeni hastalar ile birlikte toplam hasta sayısı hesaplanmak istenirse THS+YHS=1000+10’dan toplam 1010 olarak bulunacaktır. Problemde 5 saat sonundaki toplam hasta sayısı istenmek-tedir. Dolayısıyla döngü 2. kez (2. saat için) çalıştırıldığında Toplam Hasta Sayısı artık 1000 değil bir önceki saat sonucunda oluşan 1010’dur ve ikinci saatin sonunda oluşacak hasta sayısı bu değer üzerinden hesaplanmalıdır. Dolayısıyla THS değerinin döngünün ikinci adımı için 1010 olarak alınması gerekmektedir. THS değişkenine bu güncel değeri atamak için THS= THS +YHS atama işlemi kullanılır. Bunun anlamı THS ve YHS değerlerini topla ve THS’nin yeni değerini bu toplam sonucu elde edilen değer olarak belirle demektir. Eğer bu işlem adımı olmasaydı THS her zaman en başta girilen 1000 değerini almaya devam edecek, döngü 5 kez dahi dönse işlem sonucu değişmeyecekti. Aşağıda THS değişkenine ait değerin, döngünün 3 kere dönmesi sonucu meydana gelen değişimi verilmiştir (Toplam Hasta Sayısı ilk anda 1000 olarak kabul edilmiştir).

YHS=1000*0.01=10, THS=1000+10=1010 1. saat sonu

YHS = 1010*0.01= 10.1, THS =1010+10.1= 1020.1 2. saat sonu

YHS =1020.1*0.01= 10.201, THS =1020.1+10.201= 1030.301 3. saat sonu

Örnek 5. Karar ve Döngü Yapısının Bir Arada Olduğu Algoritma ve Akış Diyagramı

Bir poliklinikte günde 50 hastaya bakılmaktadır. Hastalar, İç Hastalıkları, Göz ve Ku-lak-Burun-Boğaz branşlarında muayene olacaktır. Gün sonunda hangi branşta kaç hastanın muayene olduğu bilgisine erişilmek istenmektedir. Bu sayım işlemi için bir bilgisayar prog-ramı kullanılacaktır. Bu bilgisayar programında ekrandan her hasta için branş türü girilmekte gün sonunda program branşın hasta sayısını ekrana yazdırmaktadır. Bu probleme ait algorit-mayı ve akış diyagramını tasarlayınız.

Problemin Analizi:

Verilenler (VERİ): Günlük hasta sayısı (50), hastanın hangi branşta muayene olacağı (MB)

İstenenler (BİLGİ): Dahiliye Hasta Sayısı (DHS), Göz Hasta Sayısı (GHS), KBB Hasta Sayısı (KHS)

İşlemler: DHS=DHS+1

GHS=GHS+1

KHS=KHS+1

Page 19: 13. BÖLÜM / CHAPTER 13

267Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

Problemin Algoritması:

1.Başla

2. i=1’den başlamak üzere i<=50 olacak şekilde döngü tanımlanacak.

2.1. Hastanın hangi branşta muayene olacağı alınacak.

2.2. Hasta Dahiliye branşında muayene olacaksa Dahiliye Hasta Sayısı 1 arttırılacak ve Adım 2.5’e gidilecek değilse Adım 2.3’e gidilecek.

2.3. Hasta Göz branşında muayene olacaksa Göz Hasta Sayısı 1 arttırılacak ve Adım 2.5’e gidilecek değilse Adım 2.4’e gidilecek.

2.4. KBB Hasta Sayısı 1 arttırılacak.

2.5. i, 1 arttırılacak.

2.6. i, 50’den büyük ise Adım 3’e, değilse Adım 2.1’e gidilecek.

3. Dahiliye Hasta Sayısı, Göz Hasta Sayısı, KBB Hasta Sayısı ekrana yazdırılacak.

4. Bitir.

Problemin Akış Diyagramı:

Page 20: 13. BÖLÜM / CHAPTER 13

ALGORİTMA268

5. Algoritma Yazma Algoritması

Bu başlığa kadar bir problemin tanımından çözümüne, algoritma kavramından ve tasarı-mından bahsedilmiştir. Tekrar algoritma yazma konusuna geri dönülecek olursa, algoritma tasarımının da aslında “algoritma yazma” sonucuna varmak istenilen bir problem olarak göz önüne alınabileceği açıktır. Bir problem olduğuna göre çözüm için bir algoritma yazmak da bu noktada söz konusudur. Özetlenecek olursa algoritma yazmanın da bir algoritması mevcuttur ve aşağıda “algoritma yazma algoritması” verilmiştir.

Problem: Algoritma geliştirirken nasıl bir yol izlenmesi gerekir?

1 Başla

2 Problemi tanımla

3 Çözüm yolları geliştir

4 Çözüm yollarından bir tanesini seç

5 Seçtiğin çözümü adım adım yaz

6 Yazdığın adımları sözde kod a çevir

7 Akış diyagramı oluştur

8 Sözde kodları bir programlama dilinde yaz

9 Algoritma karmaşıklığını hesapla, gerekirse 3. adıma dön.

10 Seçilen algoritmayı uygula

11 Dur

6. Algoritma Karmaşıklığı

Bir problemin çözümü için birden fazla algoritma geliştirilebilir. Geliştirilen bu algorit-maların hepsi de kullanılabilir. Ancak burada da hangi algoritmanın seçileceği problemi ile karşı karşıya kalınmaktadır. Bu problemin çözümünde algoritma karmaşıklığı imdadımıza yetişmektedir. Bu seçimde bizi sınırlayan iki öğe bulunmaktadır: Hız (Zaman) ve Bellek (Yer). Algoritma karmaşıklığında bu durum “Zaman Karmaşıklığı” ve “Alan Karmaşıklığı” olmak üzere iki ayrı başlıkta incelenmektedir. Az yer kaplayan ve daha hızlı çalışan algoritma makbuldür. Algoritma seçiminde istediğimiz çözüme bir an önce ulaşmak için hız ön planda gibi gözükse de algoritma fiziksel kısıt (mevcut olamayan RAM gereksinimi) nedeni ile kul-lanılamayabilir. Bu nedenle daha yavaş ancak mevcut RAM ile kullanılabilecek bir algoritma

Page 21: 13. BÖLÜM / CHAPTER 13

269Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

seçilebilir. Algoritmayı seçerken mevcut hafıza ve zaman kısıtlarımıza göre en verimli olanı tercih etmek gerekmektedir. Ancak algoritma karşılaştırmalarında milisaniyelik farkların bile oldukça büyük maliyetlere neden olabileceği göz önünde bulundurulmalıdır. Günümüz büyük veri çağında bu kodlar sadece bir kere değil gün içerisinde milyarlarca kere çağırılabilir. Bu durumda 0,001 mili saniyelik fark bile bir milyon kat fark yaratabilecektir. Bu fark kullanıcı açısından donanım ihtiyacı olarak maliyete de neden olabilir. Görüldüğü gibi algoritma seçimi kritik bir noktadır. Peki bu algoritma analizi nasıl yapılır? Genel olarak algoritmanın ulaşabi-leceği en kötü veya en iyi durum hesaplanır. Bu hesaplamalar, algoritmaların karmaşıklığını göstermek için kullanılan asimptotik notasyonlar ile yapılmaktadır:

O notasyonu: Büyük-O ve Küçük-o olmak üzere iki çeşittir. En kötü durumu hesaplamak için kullanılır. Bağıntıyı üstten sınırlamaktadır. Analiz edilen algoritma için verilen durumdan daha uzun sürmeyeceğinin bir nevi garantisidir.

Ω notasyonu: Büyük omega (big-Ω ) ve Küçük omega (small-ω ) olmak üzere iki çeşittir. Bağıntıyı alttan sınırlamaktadır. En iyi durumu hesaplamak için kullanılır.

Θ notasyonu: (Büyük) Teta (Θ). Bağıntıyı alttan ve üstten sınırlamaktadır. Ortalama du-rumu hesaplamak için kullanılır.

Bu notasyonlardan en çok O notasyonu kullanılmaktadır. Çünkü hem bellek hem de hız için en kötü durum analizi hesaplanabilir. En iyi durumla karşılaşma ihtimali her zaman mümkün olmayabilir.

Algoritma analizinde hız ve zaman boyutu gibi iç faktörlerin haricinde, girdi verisinin büyüklüğü gibi dış faktörler de önemlidir. Zaman (hız) ve alan (bellek) karmaşıklıkları algorit-maları analiz ederken, girdi miktarı ise kıyaslama yaparken sıklıkla kullanılmaktadır (Şekil 6).

Şekil 6. Algoritma analizinin temel unsurları/ sınırları

Page 22: 13. BÖLÜM / CHAPTER 13

ALGORİTMA270

Eğer algoritma girdisi küçük ise zaman ve alan karmaşıklığı göz ardı edilebilir. Girdi miktarı arttığında bu analizlere ihtiyaç duyulmaktadır. Girdi boyutu az iken analiz yapılması yanıltıcı sonuçlar da doğurabilir. Örneğin; 1. algoritmanın zaman karmaşıklığı 1000.n, 2. algoritmanın zaman karmaşıklığı ise 2n olsun. Bu durumda; girdi boyutu 1 ve 10 olduğunda 2. algoritma daha hızlı, 100 olduğunda 1. Algoritma daha hızlı olmaktadır; bkz. Tablo 1.

Tablo 1. Algoritma karşılaştırma tablosu

n Algoritma 1(1000.n)

Algoritma 2(2n) Tercih

1 1000 2 Algoritma 2

10 10.000 210=1024 Algoritma 2

100 100.000 2100= 1.267.650.600.228.230.000.000.000.000.000 Algoritma 1

Tablo 1’de aynı girdi miktarları ile iki algoritma zaman karmaşıklıkları hesaplanarak kar-şılaştırılmıştır. Bu karşılaştırma nasıl yapılmaktadır? Zaman karmaşıklığını hesaplayabilmek için öncelikle algoritmanın “yürütme zamanı” hesaplanmalıdır. Yürütme zamanı, bir algo-ritmanın, temel kabul edilen işlemlerden kaç tane yürüterek işlevini yerine getirebileceğini gösteren bağıntı olarak tanımlanmaktadır. n elemanlı bir küme için T(n) şeklinde gösterilir. Yürütme zamanının hangi temel işleme (aritmetik işlem, döngü, vb.) göre hesaplanacağı açıkça belirtilmelidir. Zaman karmaşıklığı ise, asimtotik notasyonlarla ifade edilir. Örneğin O(g(n)) notasyonuna göre bir algoritmanın zaman karmaşıklığı O(n) şeklinde verilirse, bu algoritma için; en kötü durumda, n değeri arttıkça, karmaşıklığı doğrusal olarak artmaktadır. Alan karmaşıklığını hesaplayabilmek için ise algoritmanın “alan maliyeti” hesaplanmalıdır Bir algoritmanın işlevini yerine getirmesi için gerekli bellek alanı “alan maliyeti” olarak adlandırılmaktadır. Her bir elemanı 2 byte lık tam sayı olan n elemanlı bir küme için alan maliyeti S(n)= 2n olarak hesaplanır. Alan karmaşıklığı da zaman karmaşıklığına benzer şe-kilde asimtotik notasyonlar ile ifade edilir. Örneğin bir algoritmanın alan karmaşıklığı O(n2) şeklinde verilirse, bu algoritma için; en kötü durumda, n’ nin büyük değerleri için bellek gereksinimi karesel olarak artmaktadır.

Kaynakça / ReferencesÇölkesen, R. (2014). Bilgisayar mühendisliği ve yazılım tasarımında veri yapıları ve algoritmalar (9.bs). İstan-

bul: Papatya Yayıncılık Eğitim AŞ.

Gülseçen, S., Kartal Karataş, E. (2011). C ile programlamaya giriş. İstanbul: İstanbul Üniversitesi Yayınları.

Kalaycı, T.E. (2012). Temel bilgisayar programlama, C programlamaya giriş. Erişim Adresi: http://cs.bilkent.edu.tr/~zeynep/files/cbu/2.hafta/cprogramlama.pdf, Erişim Tarihi: [03.03.2020].

Kurnaz, S. (2008). Veri yapıları ve algoritma temelleri (2.bs). İstanbul: Papatya Yayıncılık Eğitim.

Nabiyev, V. V. (2013). Teoriden uygulamalara algoritmalar (4.bs). Ankara: Seçkin Yayıncılık.

Page 23: 13. BÖLÜM / CHAPTER 13

271Fatma Önay KOÇOĞLU, Çiğdem SELÇUKCAN EROL

Algoritma (2020, 3 Mart). Türk Dil Kurumu içerisinde. Erişim Adresi: https://sozluk.gov.tr/?kelime=.

Şeker, Ş.E. (2008). Sezgisel algoritmalar (buluşsal algoritmalar, heuristic algorithms). Erişim Adresi: http://bilgisayarkavramlari.sadievrenseker.com/2008/12/22/sezgisel-algoritmalar-bulussal-algoritmalar-heuristi-c-algorithms/, Erişim Tarihi: [03.03.2020].

Şeker, Ş.E. (2010). Karmaşıklık sınıfları (complexity classes). Erişim Adresi: http://bilgisayarkavramlari.sadiev-renseker.com/2010/06/17/karmasiklik-siniflari-complexity-classes, Erişim Tarihi:[03.03.2020].

Şeker, Ş.E. (2010). Algoritma analizi. Erişim Adresi: http://bilgisayarkavramlari.sadievrenseker.com/2010/09/24/algoritma-analizi-analysis-of-algorithms, Erişim Tarihi:[03.03.2020].

Page 24: 13. BÖLÜM / CHAPTER 13