ALGORİTMALAR – Algoritma nedir?

ALGORİTMA BULUNMASI

             Bir programın geliştirilmesi iki adımda gerçekleşir. Bunlardan birisi algoritmanın bulunması, diğeri ise bulunan algoritmanın bir program halinde sunulmasıdır. Algoritmanın bulunması, bir problemi çözmek için gerekli yöntemlerin bulunması ve yöntemlerin algoritmik olarak ifade edilmesini gerektirir.

Bilgisayar kullanarak problemi çözmek için sonuca giden yolun tam olarak belirlenmesi gerekir. Doğru bir yol izleyebilmek için, çıkılan ve ulaşılan yer tanımlanmalıdır. Aynı soru için değişik çözüm yolları geliştirilebilir. Unutmamalıyız ki biz bilgisayara ne öğretirsek oda bize dönüt olarak onu verecektir. Yani kurduğumuz algoritma doğru ise alacağımız sonuç doğru, değilse haliyle yanlış olacaktır [1].

Bundan dolayı problemleri çözmek için mutlaka doğru algoritma kurmak zorundayız.

Algoritma verilerin bilgisayara hangi çevre biriminden girileceğinin, problemin nasıl çözüleceğinin, hangi basamaklardan geçirilerek sonuç alınacağının, sonucun nasıl ve nereye yazılacağının sözel olarak ifade edilmesi biçiminde tanımlanabilir  [2].

 

Algoritmanın bulunması iki yöntemle olur;

  1. Problem Çözme Teorisi
  2. Pratik Yöntemler

 

1.Problem Çözme Teorisi

 

Bilgisayar kullanarak problem çözmek istiyorsak bizi sonuca götürecek yolu tam olarak belirtmek zorundayız. Bir problem için farklı çözüm yolları geliştirmemiz gerekir. Unutulmamalıdır ki biz bilgisayara ne öğretirsek o bize dönüt olarak onu verecektir. Yani kısaca şunu söyleyebiliriz kurduğumuz algoritma doğru ise sonuç doğru, yanlış ise sonuç yanlış olacaktır.

 

Problemin algoritması doğru bir şekilde kurulamadığı zaman problemin bilgisayar tarafından çözümü zorlaşmaktadır. Fakat insanların problemleri çözme şekilleri bilgisayarlardan farklıdır. İnsanlar, bir problemi yarım yamalak anlayarak çözmeye başlayıp beceremeyince geri dönüp problemi yeniden okuyabilir. Ya da deneme yanılma yöntemleri kullanarak vakit ve enerji kaybını önlemeyi düşünmezler. Öte yandan, büyük bir yazılım sisteminde sonuca yaklaşıldığında problemi yanlış anladığını fark ederek başa dönüp problemi daha iyi anlamaya çalışması çok zordur [3].

 

Bazılarına göre, problemin bir çözümü bulunmadan problemin tam olarak anlaşılamayacağı savunulmaktadır. Yani problem çözülememişse tam olarak anlaşılamamış anlamına da gelebilir. O halde problemi çözmeden önce tam olarak anlamak hiçbir zaman elde edilmeyecek ideal bir durumdur [3].

 

Problem Çözme Adımları:

 

a-) Soru Tanımlama: Her şeyden önce çözülecek soru tam olarak anlaşılmalıdır. Yanlış anlaşılmış bir sorunun çözümü yanlış olacak ve istenileni vermeyecektir. Bu adımda yapılacak en ufak bir hata daha sonraki adımların yeni baştan yapılmasını gerektirebilir. Sorunun tanımı yapılırken var olan bilgiler, anlamları ve birbirleri ile ilişkileri tanımlanmalıdır. Daha sonra istenenler belirlenmeli ve bunların var olan bilgiler ile ilişkileri öğrenilmelidir. Son olarak yapılacak işlemler belirlenir. Mümkün ise örnek veriler ile elde edilen sonuçlar değerlendirilmelidir.
b-) Algoritma Geliştirme: Algoritma bir sorunun çözümü için izlenecek yolun tanımıdır. Kısaca algoritma mevcut bilgilerden istenilenlere erişme yöntemidir. Soru tanımını tam olarak yaptıktan sonra, çözüm için yol aramak gerekir. Genellikle bir sorunun birden fazla çözüm yolu olabilir. Bunlardan en uygunu seçilmeye çalışılır. Soru ne kadar karışık olursa olsun, alt birimlere bölünür. Her birimin çözümü ayrı, ayrı yapılır. Bu yapılırken birimler arası ilişki sürekli olarak korunur.
c-) Girdi ve Çıktı Biçimi Belirleme: Sonuçların dış ortama, dolayısıyla insana aktarımı düzgün bir biçimde yapılmalıdır. Programcı program çıktısı olarak almak istediği dökümün biçimini tasarlar. Bir döküm biçimi tasarlanırken anlaşılır ve kullanılabilir olmasına özen gösterilmelidir. Genellikle programa, çözdüğü soruna ilişkin bazı verilerin dışarıdan verilmesi gerekir. Örneğin bir denklem takımının kökleri bulunacaksa, ilgili katsayıların programa verilmesi gibi.
d-) Akış Şemasını Çizme: Akış şeması belirli bir işin yapılabilmesi için, basit işlemlerle şema halinde gösterilmesidir. Kısaca algoritmanın şemalarla gösterilmesidir. Algoritma geliştirildikten sonra, daha iyi anlaşılabilir olması ve programlama dillerine aktarımı daha kolay olması nedeniyle, akış şeması haline getirilir. Böylece sorunun çözüm basamakları, birbirleri ile ilişkileri ve bilgi akışı daha kolay görülebilir ve yanlışlıklar düzeltilebilir.
e-) Kodlama: Akış şemaları çizildikten sonra, sorunu yapısına uygun bir programlama dili seçilir. Bu dil ile akış şemaları dilin kurallarına uygun olarak bilgisayarın anlayabileceği duruma getirilir.
f-) Programı Sınama: Program yazıldıktan sonra, sonuçları daha önceden bilinen veriler girilerek, eldeki sonuçlarla çıkan sonuçlar karşılaştırılır. Programın doğru çalışıp çalışmadığı sınanır [1].

 

 

Algoritma bulunmasına basit bir örnek verecek olursak:

 

Soru: İki sayının toplamını bulan bir algoritmayı hazırlayınız.

 











Soru: İki sayının çarpımının bulunmasıyla ilgili algoritmayı hazırlayınız:

 

Değişkenler

 



Algoritma

 






 

Soru: Bir insanın sabah kalkıp, işine gitmek için yaptıklarını anlatan algoritmayı hazırlayınız.

 

Çözüm:

 

Yatmadan önce saatini ayarla,
Alarm çalınca kalk,
Elini yüzünü yıka,
Kahvaltı hazırla,
Kahvaltı yap,
İş elbiselerini giy,
Kapıyı aç ve dışarı çık,
Biletini al,
Otobüse bin (Arabanız varsa if… then),
İnmek için ikaz lambasına bas,
İşyerine doğru git,
İşyerine gir[4].

 

Örnekleri biraz zorlaştıracak olursak;

Örnek:

 

Ali internet arkadaşı Ahmet’e yaşını sormuştur. Ahmet ise kardeşleri ile yaşlarının çarpımının 48 olduğunu söylemiştir. Ali problemi çözemeyince başka bir ipucu istemiş, Ahmet de ona 2 kardeşinin olduğunu söylemiştir. Ali daha da çok ipucu isteyince Ahmet: “Annem kardeşime dilimi çıkardığım için bana vereceği çikolatayı ağabeyime verdi.” deyince Ali Ahmet’in yaşını belirlemiştir [3].

 

Son açıklama problemle ilgisiz gibi görünse de problemin çözümü için yeterli olmuştur.

 

Ali’ye verilen ipucu Ahmet’in kardeşlerinin yaşlarının çarpımıdır. Ali bu açıklamadan Ahmet’in birden fazla kardeşi olduğunu anlamış ve 48’in 3’lü, 4’lü ve 5’li tüm çarpanlarında oluşan bir liste oluşturmuştur. Ali burada Ahmet’in en az 3, en fazla 5 kardeşi olabileceğini varsaymıştır[3].

bu bilgi gereği, olası bütün alternatifleri bulunduran bir liste oluşturalım:

 

48x1x1x1x1

24x2x1x1x1

12x2x2x1x1

6x2x2x2x1

6x4x2x1x1

6x8x1x1x1

3x2x2x2x2

3x4x2x2x1

3x4x4x1x1

3x8x2x1x1

3x16x1x1x1

48x1x1x1

24x2x1x1

12x2x2x1

12x4x1x1

6x2x2x2

6x4x2x1

6x8x1x1

3x4x2x2

3x8x2x1

3x16x1x1

48x1x1

24x2x1

12x2x2

12x4x1

6x4x2

6x8x1

3x8x2

3x16x1

 

 

Tablo1[3]

 2.Pratik Yöntemler

 Şimdiye kadar problem çözmenin hep felsefi yönlerini anlattık. Ama ne yazık ki gerçek hayattaki problemler felsefe yaparak çözülmezler. Problem çözmek için birçok pratik yöntem geliştirilmiştir. Bu yöntemlerin her biri bir grup problemi çözmektedir. Diğer gruplardaki problemleri ise çözemezler. Ama tüm yöntemlerde bazı ortak özelliklerden bahsedilebilir[3].

 

Örnek:

Dört yarışmacı, Ali, Ayşe, Oya ve Gül yarışma öncesi şöyle tahminler yaparlar:

 

Ali, Ayşe’nin kazanacağını düşünür.

Ayşe, Gül’ün sonuncu olacağını düşünür.

Oya, Ali’nin üçüncü olacağını düşünür.

Gül, Ali’nin tahminlerinin doğru olduğunu düşünür.

 Sadece bir tahmin doğrudur ve bu tahmini kazanan yarışmacı yapar. Bu yarışı Ali, Ayşe, Oya ve Gül hangi sıra ile bitirmişlerdir?

Bu problemde Ali ve Gül’ün tahminleri eşdeğerdir. Ama sadece bir tahmin doğru olacağına göre her ikisi de yanlış olmak zorundadır. İşte bu anda problemin çözümüyle ilgili önemli bir adım atmış olduk. Bundan sonra, problemin doğru çözümü için eldeki verileri değerlendirmek yeterlidir. Ali’nin tahmini doğru olmadığına göre Ayşe yarışı kazanamayacaktır. O halde yarışı kazanacak yegâne insan Oya’dır. Oya doğru tahmini yaptığına göre Ali üçüncü olmuştur. Bu aşamada yarışma sırası için iki alternatif oluşmuştur:

 

(Oya, Ayşe, Ali, Gül) veya (Oya, Gül, Ali, Ayşe)

Ayşe’nin tahmini doğru olmayacağına göre sıra (Oya, Gül, Ali, Ayşe) şeklinde olacaktır [3].

Yukrıdaki problemin çözümü sırasında atılan ilk adım çok önemlidir ve neredeyse problemin nasıl çözüleceğini bilmeye eşdeğerdir. İlk adımın atılması ve ardından genişletilerek problemin çözülmesi yaratıcı düşünce gerektirir [3].

Şimdi problem çözme ile ilgili bazı genel yaklaşımlardan bahsedecek olursak:

Birincisi problemi geri geri giderek çözmektir. Eğer problem herhangi bir ürünün hangi yollarla üretildiğini bulmaya çalışıyorsa, verilen çıktıdan kullanılan girdiyi elde etmek üzere geri geri gidilir. Örneğin, elimizde kâğıttan yapılmış bir kayık varsa, kâğıdın katlarını yavaş yavaş açarak kayığın nasıl yapıldığını keşfedebiliriz[3].

İkinci problem çözme yöntemi ise elimizdeki problemi daha basit ya da önceden çözülmüş bazı problemlere indirgeyerek çözmektir. Bu yöntem program geliştirmede büyük önem taşır. Program geliştirmede karşımıza çıkan en önemli sorun, geliştirilen programın genel bir problem setini çözmekten ziyade sadece tek bir örneğe yönelik çözüm üretmesidir. Oysaki biz geliştirilen bir programın olabildiğince geniş bir problem kümesine, ya da o problem için olabilecek tüm örneklere çözümler üretebilmesini hedefleriz. Örneğin, elimizde birkaç isimlik bir liste varsa, bu isimleri alfabetik olarak sıraya dizebilecek bir algoritma yazabiliriz. Ama bu algoritma listemizdeki isimler değiştiği zaman da çalışmalıdır[3].

Örnek:

Ali, Murat, Oya ve Gül isimlerini alfabetik olarak sıralayan programın algoritması;

 Bu problemi çözebilmek için;

Oya ile Gül’ün yerlerini değiştir.

Gül ile Murat’ın yerlerini değiştir.

adımları yeterli olacaktır[3].

Yukarıdaki yöntemle başka bir isim listesini alfabetik olarak sıralayamayız. İstediğimiz şey hem yukarıda verilen listeyi, hem de olabilecek tüm listeleri sıralayabilecek bir algoritma geliştirmektir. Genellikle bir problemi önce özel haller için çözer, sonra da bu özel çözümlere bakarak onları genelleştirme yoluna gideriz[3].

Şimdi genel manada hazırlanmış algoritmalara bir göz atalım:

 

a-)1’den 100’e kadar olan sayıların toplamını veren algoritma[5].

  1. Toplam T, sayılar da i diye çağırılsın.
  2. Başlangıçta T’nin değeri 0 ve i’nin değeri 1 olsun.
  3. i’nin değerini T’ye ekle.
  4. i’nin değerini 1 arttır.
  5. Eğer i’nin değeri 100’den büyük değil ise 3. adıma git.
  6. T’nin değerini yaz.

 

b-) Sınavdaki en büyük notun bulan algoritma[6].

1. En büyük = ilk sınav kâğıdındaki not (ya da olabilecek en düşük değer kabul edilebilir).
2. İncelenecek sınav kâğıdı var ise
3. 1 Sınav kâğıdındaki not > En büyük ise En büyük = Sınav kâğıdındaki not
4. En büyük değerini yaz.
5. Dur

c-) 20’den 50’ye kadar olan sayıların toplamını bulan algoritma yazınız[6].

A1 –> S=20 : T=0 (Sayı 20 T değeri 0 ile basla)
A2 –> TßT+S (T’ye sayıyı ekle T’yi göster.)
A3 –> S=S+1 (Sayıyı bir artır.)
A4 –> S<50 ise A2’ye git. (Eğer şayi 50’den küçük ise Adim 2’ye git)
A5 –> T’yi göster. (T’nin değerini göster.)
A6 –> Dur Akis Şeması

d-) 30 ile 90 arasındaki çift sayıların toplamını bulan algoritma yazınız[6].

A0 –> Basla
A1 –> S=0 : T=0 (Sayı 0, Toplam değeri 0 olsun)
A2 –> S=S+1 (Sayıyı bir artır, sayıyı göster.)
A3 –> T=T+2S+28 (28 sayısına çift sayı olması için sayıyı 2 ile çarp ve toplama ekle, toplamı göster)
A4 –> 2S+28<90 ise git A2 (Eğer Çift sayı 90 değerinden küçük ise Adim 2’ye git)
A5 –> O=T/S (Toplam değeri sayıya böl ve ortalamayı bul)
A6 –> O’yu yaz. (Ortalamayı göster)
A7 –> Dur

Bu konu ile yani algoritmalarla ilgili hazırlanmış slayta buradan ulaşabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Close
Join me: