ALGORİTMA ve İLGİLİ TEMEL KAVRAMLAR
Algoritma, herhangi bir sorunun çözümü için izlenecek yol anlamına gelmektedir.
Karşımıza çıkan problemi çözmek için kafamızda veya bir kağıt üzerinde tasarladığımız işlem yolu da diyebiliriz[3].
ALGORİTMA İLE İLGİLİ TEMEL KAVRAMLAR
Bilgisayar bilimlerinde kullanılan kavram ve kelimeler gündelik hayatta kullandığımızdan daha farklı anlamlar taşırlar. Bu kavramlardan en önemlileri;
- Sunum
- Program
- Yürütüm olarak bilinir.
SUNUM, algoritmanın ifade biçimidir. Algoritma ve sunum arasındaki ilişki hikâye ile kitap arsındaki ilişkiye benzetilebilir. Hikâye soyut ve kavramsaldır. Kitap ise hikâyenin elle tutulur gözle görülür bir sunumudur. Kitap çeşitli dillerle yazılabilir, ya da değişik formatlarda basılabilir. Ama sunduğu hikâyenin içeriğini değiştirmez. Aynı algoritma birçok değişik şekilde ifade edilebilir[1].
Örneğin, ax+b=0 denkleminin kökü geleneksel olarak x=-b/a
Denklemi ile hesaplanır. Ama bu işlem söyle bir komutla da sunulabilir.
“sabit terimin işaretini değiştir ve x’in katsayısına böl.”
Aynı işlem bir elektrik devresi ile de gerçekleştirilebilir. Bütün bu sunumlar farklı olmasına rağmen gerçekleştirdikleri algoritma aynıdır[1].
PROGRAM, bir algoritmanın bilgisayar için geliştirilmiş biçimsel sunum şeklidir. Bu amaç için çeşitli programlama dilleri kullanılır. Bir programın yürütümü demek o program tarafından sunulan algoritmayı gerçeklemek demektir. Şekil 1 de algoritma, sunum, program ve yürütüm arasındaki ilişki görülmektedir. Şekilden de anlaşılacağı gibi algoritma, sunum, program ve yürütüm birbirinden ayrı ama ilintili kavramlardır[1].
Algoritmanın sonlu bir işi tamamlaması gerekir. Ancak sonlu bir iş bilgisayar tarafından sonlu bir sürede yerine getirilebilir. Aksi takdirde bilgisayar anlamsız bir takım döngüler içinde sonuç vermeyecek bir yığın hesap yapar. Oysa ki, algoritmanın bilgisayara, bir amaca yönelik işleri gerçekleştirecek komutlar vermesi gerekir. Böyle bir sınırlama her ne kadar bazı uygulama alanları için geçersiz gibi görünüyorsa da, bilgisayarın yapabileceği işlerin sınırlarını çizmesi açısından önemlidir[1].
Hangi problemlerin algoritmik yaklaşımlarla çözülebileceğini, hangilerinin ise çözülemeyeceğini belirlemek ve bu problem türleri arasındaki sınırları çizmek çok önemlidir. Ancak algoritmik olan bir iş bilgisayar tarafından yapılabilir. Uygulama alanlarının birçoğunda sadece sonlu işler anlamlı sonuçlar üretebilir. “şu adımı tekrarla” tarzında bir komutun fazla bir anlamı yoktur. Fakat bazı uygulama alanlarında sonlanmayan işler de gerekebilir. Örneğin, bir hastanın nabız atışlarını sürekli izlemek, ya da bir taşıtın hız ve sıcaklığını ölçmek gibi işler sonlu değildir. Bazı bilim adamları tekrarlanan bu adımların sonlu algoritmaların tekrarından başka bir şey olmadığını öne sürmektedirler. Diğerleri ise bu tür uygulamaların algoritma tanımındaki sonlu iş kavramı ile çelişki içinde olduğunu düşünmektedirler[1].
Algoritma adımlarının en önemli özelliği açık-seçik ve yürütülebilir olmasıdır. Adımlar içinde taşınan bilginin bilgisayar tarafından tam olarak anlaşılabilmesi gerekir. Adımlar yoruma açık, birden fazla anlam taşıyan ya da yaratıcı düşünce gerektiren karmaşıklıkta olmamalıdır. Sadece basit ve iyi tanımlanmış komutlar içermelidir.
Algoritmanın açık-seçik olması ile sunumun açık-seçik olması farklıdır. Genellikle, sunumdaki belirsizlik ile algoritmadaki belirsizlik birbirine karıştırılmaktadır. Algoritma açık-seçik olabilir ama sunumunda bazı belirsizlikler olduğu için algoritmanın açık-seçik olmadığı sanılır. Örneğin, bir algoritmada
“10’dan küçük doğal sayıların listesini yap”
Adımı eğer doğal sayı tanımını bilmeyen bir bilgisayar için hazırlanmışsa belirsizlik içerir. Bu belirsizlik algoritmadan değil, o algoritmanın yeterli detayda sunulmamasından kaynaklanan bir belirsizliktir. Bu tür belirsizlikler bir sonraki bölümde tanımlanan ilkeller sayesinde bertaraf edilebilir[1].
Şimdi de yürütülebilen ya da geçekleştirilebilen adım özelliği üzerinde duralım.
Bu özelliği şöyle bir örnekle açıklayabiliriz:
- Tüm doğal sayıların bir listesini yap
- Bu sayıları en küçükten en büyüğe doğru diz
- En küçüğünü listeden çıkar
Yukarıda belirlenen adımlar seti bir algoritma oluşturmaz. Çünkü birinci ve ikinci adımları yürütülebilmemiz mümkün değildir. Doğal sayıların tam bir listesi yapılamaz. Doğal sayıların en büyüğü ve en küçüğü olmaz[1].
Son olarak algoritmanın sıralı adımlar setinden oluşması gerektiğinden bahsedelim. Algoritmadaki adımların belirli bir sıra içindeki gerçeklenmesi gerekir. Yalnız bu, her adımın teker teker ele alınması anlamına gelmez. Hatta paralel algoritmalar aynı anda birden fazla adımı gerçekleyebilirler. Ancak, böyle dahi olsa adımların yürütümünde, kendi içinde mantığı bulunan bir sıra yapısı mevcuttur. Örneğin, iki işlemcili bir bilgisayar elindeki sayıları gruplayarak aynı anda farklı sabitlerle çarptıktan sonra sonuçları toplayabilir. Böylece çarpma işlemini teker teker değil de ikişer ikişer yapacağı için sonuç daha hızlı bulunmuş olur[1].
ALGORİTMALARIN SUNUMU
Bu bölümde algoritmaların sunumu için gerekli iki önemli kavramı tanımlayacağız. Bu kavramlardan ilki, karmaşık işleri basitleştirerek ifade etmemize yarayan ilkeller, ikincisi ise algoritmaları yarı biçimsel bir dille anlatmamıza yardım edecek sözde kodlardır[1].
İlkeller
İnsanoğlunun algoritmik yaklaşımları sunmak için kullanabileceği en kolay araç günlük konuşma dilimiz olan doğal dillerdir. Doğduğumuz günden beri anne ve babalarımızın bize yağdırdığı komutlarla büyür ve o komutları beynimizle yerine getirerek gelişiriz.
- Ellerini yıka,
- Dişlerini fırçala,
- Pijamalarını giy,
- Yatağına yat.
Tarzında sunular algoritmalar tüm çocukluğumuzu doldurur[1].
Algoritma anlatımı zor ve karmaşık hareketler, basit şekiller doğal dillerden çok daha etkin ve verimli bir araç olacaktır. Kibrit çöpleriyle tavadan balık çıkarma bilmecesini hepimiz biliriz. Sorun balığa dokunmadan çöpleri hareket ettirerek 2 adımda balığı dışarı çıkartacağımı anlatmaktır. Bu adımları konuşma diliyle anlatabilmek için çok uzun uğraşmak gerekir. Oysa şekiller ile bunu anlatmak çok daha kolay olacaktır.
Ama genellikle bu tür sunumlar yanlış anlamalara ve belirsizliklere yok açabilir. Örneğin; örgü hakkında hiçbir fikri olmayan birinin örgü örme şekillerine bakarak kazak örmesi kolay değildir[1].
Benzeri örnekler doğal diller içinde verilebilir. “oku baban gibi cahil olma” meşhur özdeyişi yanlış anlamanın iyi bir örneğidir. Bütün bunlara ek olarak detay seviyesinin tam belirlenmediği durumlarda da yanlış anlamalara ya da anlaşılmamalara sebep olabilir. Örneğin; beşinci sınıf öğrencisine metreyi santimetreye çevir dendiği zaman ne yapacağını bilir. Ama aynı işi yapabilmek için 1. sınıf öğrencisinin metre ve santimetre tanımlarını bilmesi gerekir. Kısacası, herhangi bir haberleşme ve bilgi alışverişi söz konusu olduğu zaman kullanılan sunum şeklinin bilgiyi tam ve anlaşılır bir şekilde sunabilmesi büyük önem taşır[1].
Bilgisayar bilimleri yukarıda anlatılan sorunlara bazı yapı taşları tanımlayarak çözüm getirir. Algoritmalar basit yapı taşları ile oluşturulur. Bu yapı taşlarına ilkeller denir.
Örneğin, toplama ve bölme işlemlerini kullanarak verilen bir dizindeki sayıların aritmetik ortalamasını hesaplayan bir ilkel yaratılabilir. Başka bir ilkel, verilen bir dizindeki en büyük ya da en küçük sayıyı hesaplamak için oluşturulabilir[1].
İlkellere kesin ve tam tanımlar yükleyerek belirsizlik ve karışıklık ile ilgili pek çok sorun çözülür. Ayrıca, ilkeller algoritmalardaki detay düzeylerini de belirlerler. Bir dizi ilkel ve bir dizi kural ile karmaşık fikirler basit öğelere indirgenerek anlatılabilir. Bu yaklaşım sonucu, doğal dillere alternatif olarak programlama dilleri geliştirilmiştir[1].
Her ilkelin iki ana parçası vardır.
- Sözdizimi,
- Anlam
Sözdizimi, ilkelin sembolik sunumu, anlam ise o ilkelin sunduğu kavramları gösterir. Kimyasal formüllerde sözdizim elementlerin oluşturduğu molekülün özellikleridir. Örneğin, su için sözdizim H2O dan oluşan karakterlerdir, ama anlamı için çok uzun tasfirler gerekebilir.
Karmaşık bir olayı basit ilkelerle ifade edebilmek için kendimiz de bir sözdizim yaratabiliriz.
Örneğin, yün örme olayının temel öğeleri dönüş, yüz ilmek şeklinde tanımlanabilir[1].