11 Mart 2022 Cuma

Algoritmanın Tarihi

Günümüzde sıkça karşımıza çıkan algoritma kelimesinin nereden geldiğini hiç merak etmiş miydiniz? Her ne kadar yazılım ile alakalı başlıklarda duymaya alışık olsak da algoritma kavramı, bilgisayarlardan çok daha köklü bir geçmişe sahip. Bu yazıda amacımız, kısaca algoritma kavramının kökenine inip tarih boyuncaki gelişim sürecinden bahsetmektir. Dilerseniz, yazımıza bir algoritma tanımıyla başlayalım. Corman, Leiserson, Rivest ve Stein tarafından yazılan Algoritmalara Giriş kitabının birinci bölümünde algoritma için şöyle bir tanım yapılır:

“Sözgelimi bir algoritma, girdi olarak bir değer veya değer kümesi alan ve çıktı olarak bir değer veya değer kümesi üreten herhangi bir hesaplama prosedürüdür.” [7]

            Dolayısıyla algoritmalar sadece bilgisayar dünyasına has bir kavram değildir, günlük hayatta karşılaştığımız birçok problemi çözmek için biz de algoritmalardan faydalanırız. Toplama, çıkarma gibi basit matematiksel işlemler veya ikinci dereceden denklemlerin çözülmesinde kullanılan yöntemler aslında birer algoritmadır. Algoritma doğrudan bir sonuç değil, sonuca götüren yoldur.

Algoritma Kelimesinin Kökeni

“Algoritma” (algorithm) kelimesi ilk kez 1957’te Webster’s New World Dictionary isimli Amerikan İngilizce sözlükte yerini aldı. Yapılan araştırmalar algoritma kelimesinin orta çağda çok daha yaygın olarak kullanılan “Algorism” kelimesinden geldiğini göstermektedir. “Algorism” kelimesi, Arap rakamları kullanılarak aritmetik işlemler yapmak anlamına gelir. Hint-Arap rakam sistemi, birinci ile dördüncü yüzyıllar arasında Hint matematikçiler tarafından geliştirilmiş, 9. yüzyılda Arap/Fars matematikçiler tarafından da kullanılmıştır. Önceleri Arap ve Fars matematikçiler tarafından “Hint Rakam Sistemi” olarak adlandırılan bu sistem, Arap tüccarlar aracılığıyla Avrupa’ya tanıtıldığı için daha sonradan “Arap Rakam Sistemi” olarak anılmıştır. Hint-Arap rakam sisteminin detayları ilk kez M.S. 625 yılında Brahmagupta adlı Hintli bir matematikçi tarafından Sanskritçe yazılmış ve Siddhanta isimli bir metinde ayrıntılı bir şekilde analiz edilmişti. Hârizmî ya da tam adıyla Ebû Ca'fer Muhammed bin Mûsâ el-Hârizmî, Brahmagupta’nın Siddhanta’sını okuduktan sonra Hint-Arap rakam sisteminin M.Ö. 3. yüzyılda Sümerler tarafından geliştirilen altmışlık sayı sisteminden çok daha kullanışlı olduğunu fark etmişti. “Hint Sayma Sanatı” (Kitab al-Muhtasar fil Hisab el-Hind) başlıklı kitabında, devrimsel bir fikir tanımlamış ve sadece on tane basit sembolle (rakamlarla) istenilen herhangi bir sayının temsil edilebileceğini dile getirmişti. Daha sonradan Hârizmî ve Kindî gibi diğer Arap bilim insanları da bu rakam sistemini kullanmaya başlamıştı. Hint-Arap sayı sisteminin Avrupa’ya taşınmasındaki öncü figür, İtalyan matematikçi Fibonacci olmuştu. Fibonacci’nin babası nüfuz sahibi zengin bir tüccardı. Fibonacci doğduktan sonra, Bicâye’deki (Bougie) ticaret odasını idare etmek için Cezayir’e gönderildi. Buradaki Arap matematikçiler, Fibonacci’ye Hint-Arap rakam sistemini öğrettiler ve Hârizmî’nin çalışmalarını gösterdiler. Fibonacci 1202 yılında Liber Abaci (Hesap Kitabı) isminde bir kitap yazdı ve kitabının ilk bölümünde Hint-Arap rakam sistemine yer verdi. Bu sistem, Romen rakamlarına göre daha kullanışlıydı çünkü tüccarların hesap kitap yapmasını kolaylaştırıyordu [12]. Hint-Arap rakam sisteminde özellikle bölme ve çarpma işlemlerinde kullanılan “algoritma”, Romen rakamlarıyla yapılan bölme ve çarpma işlemlerine göre çok daha kolaydı. 


“Algorism” kavramının Arap rakamları ile aritmetik işlem yapmak anlamına geldiğini söylemiştik. Ardından da Hint-Arap rakam sisteminin Avrupa’ya nasıl geldiğinden bahsettik. Peki, “Algorism” kelimesinin kökeni nedir? Orta çağda “Algorism” tekniği kullanarak hesap kitap yapanlara “Algorist”, abaküs (abacus) kullanarak hesap kitap yapanlara “Abacist” deniyordu. İlk başlarda dilbilimciler, “Algorism” kelimesinin “Algiros” (acı verici/zahmetli) ve “Arithmos” (sayı) kelimelerinin birleşiminden meydana geldiğini düşündüler. Bazıları kelimenin Kastilya Kralı Algor’un isminden geldiğini savundu. Ancak daha sonraları matematik tarihçilerinin yaptığı araştırmalar, kelimenin yukarıda da bahsettiğimiz ünlü Fars bilim adamı Hârizmî’nin isminden geldiğini ortaya koydu. Hem “Algorithm” (algoritma) hem de “Algorism” kelimeleri, Hârizmî adının Latin alfabesine çevrilmiş versiyonu olan “Algoritmi” ve “Algorismi” isimlerinden gelmektedir. Bunun nedeni “Algorism” tekniğinin Avrupalılar tarafından Hârizmî ile bağdaştırılmış olmasıdır. Başlarda sadece cebirsel denklemleri çözmek için kullanılan yöntemlere “algoritma” dense de, zaman geçtikçe kelimenin kullanım alanı genişlemiş ve daha kapsayıcı bir anlam kazanmıştır. Hârizmî, İran’da Büyük Horasan’ın Harezm şehrinde doğmuştur ve el-Hârizmî ismi buradan gelmektedir. Aynı zamanda Hârizmî’nin “Bir Araya Getirme-Cebr ve Sadeleştirme-Mukabele” adlı kitabının başlığında yer alan Arapça “al-ğabr” ifadesi, Türkçe “cebir”, İngilizce “algebra” kelimelerinin kökenini oluşturmaktadır. [1]

Dünden Bugüne Algoritmalar

          

 Yapılan kazı çalışmalarında, algoritmaların varlığına dair elde edilen en eski bulgular Babillilere aittir. Babilli matematikçiler tarafından kil tabletlere işlenen yazılar, bir sayının kökünün yaklaşık değerini bulmak için tasarlanmış bir algoritma içeriyordu. Bu algoritma daha sonradan Yunan matematikçi İskenderiyeli Heron tarafından da kullanılmış, ve literatürde Heron Methodu olarak tanınmıştır. M.Ö. 300 yıllarında Öklid’in iki tam sayının en büyük ortak bölenini hızlıca bulmak için kullandığı Öklid algoritması ve asal sayıların bulunması için kullanılan Eratosthenes’in Eleği veya Eratosthenes Kalburu (Sieve of Eratosthenes) algoritması günümüzde de sıklıkla kullanılan en eski algoritmalara örnek olarak gösterilebilir. Aynı şekilde matematikçiler tarih boyunca π (pi) sayısının tam değerini hesaplamaya çalışmış, bunun için farklı algoritmalar geliştirmiştir [12]. Örneğin M.Ö. 250 civarında Arşimet, geliştirdiği algoritma sayesinde π sayısının 3.140845 ile 3.142857 arasında olduğunu saptamıştı. 1424’te İranlı bilim adamı Kâşî, virgülden sonraki 16 basamağı doğru hesaplamış ve yeni bir rekora imza atmıştı. 1615 yılında Alman bilim adamı Ludolph van Ceulen, π sayısını virgülden sonraki 32 basamağa kadar doğru hesapladı. Bundan dolayı π sayısı Almanya’da “Ludolphine Sayısı” olarak da anılmaktadır. Newton ve Liebniz’in birbirinden bağımsız olarak geliştirdikleri Kalkülüs konseptleri, π sayısının hesaplanmasındaki geleneksel yöntem olan geometrik algoritmaların yerini almaya başladı. 1706’da İngiliz bilim adamı John Machin, günümüzde Machin formülü olarak anılan yöntemi geliştirmiş ve virgülden sonra 100 basamağı doğru hesaplamıştı. Bu iş için bilgisayarlar kullanılmaya başlanmadan önce rekor 1946’da virgülden sonra 620 basamakla D.F. Ferguson’a aittir. Günümüzde rekor, 14 Ağustos 2021’de İsviçre’deki Grisons Uygulamalı Bilimler Üniversitesi’nde yapılan bir çalışmaya aittir. Süper bilgisayarda çalışan bir program, 108 günlük çalışmanın sonunda virgülden sonra 62, 831, 853, 071, 796 basamaklık sonuçla yeni bir rekora imza atmıştır [5].

            Algoritmaların gelişiminde kilometre taşlarından biri de İngiliz matematikçi George Boole (1815-1864) tarafından Boole Cebiri’nin (Boolean Algebra) geliştirilmesi olmuştur. Boole Cebiri, değişkenlerin değerinin 1 (doğru) veya 0 (yanlış) olduğu bir cebir alt başlığıdır. Sayısal devrelerin tasarlanmasında Boole Cebiri hayati önem taşır. 0, sistemin kapalı; 1, açık olduğu durumu temsil eder. Elektrik devlerindeyse 1, yüksek voltajı; 0, düşük voltajı temsil etmektedir. Bilgisayar mimarisinin yapı taşlarından olan sayısal elektronik devrelerinin çalışma mantığı, Boole Cebiri’ne dayanmaktadır [6]. Charles Babbage’ın (1791-1871), 1837’de yapmaya başladığı analitik makine, tasarlanan ilk bilgisayar olarak kabul edilmektedir. Ada Lovelace’ın (1816-1852) bu makine için yazdığı Bernoulli sayısı hesaplama algoritması, bilgisayarlar için yazılan ilk algoritma kabul edilir. İlk kez o zaman, bir problemin insanlar tarafından değil bir makine tarafından çözülebilmesi için bir algoritma yazılmıştır.. Babbage bu makineyle, mühendislik hesaplarının hatasız bir şekilde yapılmasını hedefliyordu ancak yeterli hibeyi alamadığı için projeyi tamamlayamadı.

            20. yüzyılda makineleri anlama şeklimizde meydana gelen değişiklikler, otomat teorisi ve Turing makinesi, sadece belli bir algoritma için özelleşmiş bilgisayarlar değil; iyi tanımlanmış, sonlu herhangi bir algoritmayı çalıştıracak bilgisayarların tasarlanmasının yolunu açmıştır. Turing makinesi, Babbage’ın analitik makinesinin aksine her türlü matematiksel hesabı yapabilme iddiasında bulunuyordu. Aynı şekilde Alonzo Church de geliştirdiği lambda kalkülüs (λ-calculus) sayesinde herhangi bir problemin rekürsif fonksiyonlar aracılığıyla çözülebileceğini savunuyordu. Bu yöntem, matematiksel problemler için formel bir çözüm yöntemi sunması açısından son derece önemlidir. Church ile Turing’in çalışmaları aynı döneme denk gelmişti ve Church-Turing Tezi başlıklı makalelerinde lambda kalkülüs ile Turing makinesinin aynı işlevi gördüğü savunuluyordu. Turing, makalelerinde her türlü matematiksel hesabın sanal bir makine yardımıyla yapılabileceğini savunuyordu. Church ve Turing’in fikirleri dönemin makine algısı için devrim niteliğindeydi. Her ikisi de yapmış oldukları araştırmalardan ötürü bilgisayar biliminin kurucusu kabul edilmektedir.

20. yüzyılın başlarından günümüze dek bilgisayar biliminde çok sık rastladığımız birçok algoritma geliştirildi. Dijkstra’nın en kısa yol algoritması, Prim algoritması, Kruskal algoritması, quicksort, mergesort gibi sıralama algoritmaları, ikili ağaç yapıları, Knuth-Morris-Pratt algoritması, A* arama algoritması ve daha niceleri bu dönemde üretildi. Yakın zamanda birçok akademik makalenin odak noktası haline gelen makine öğrenmesi ve yapay zeka gibi başlıklar da birçok yeni algoritmanın üretilmesini sağlamıştır. Nesne tanımlaması için kullanılan YOLO (You Look Only Once) algoritması veya yüz taraması için kullanılan Viola-Jones algoritmaları, çok daha karmaşık algoritmalara örnek olarak verilebilir. Bu algoritmalar, insan beynini taklit eden yapay sinir ağlarından faydalanmaktadır.

Algoritma Analizi

            Yakın zamanda bilgisayar biliminin çok daha sistematik bir hal alması, algoritma analizi kavramını da beraberinde getirmiştir. Bilgisayar biliminde algoritma analizi, belirli bir algoritmanın zaman veya hafıza karmaşıklığının, girdi boyutu cinsinden hesaplanmasına verilen isimdir. Hafıza karmaşıklığı, algoritmanın işlevini yerine getirmesi için kullandığı bellek miktarı olarak özetlenebilir. Zaman karmaşıklığı ise algoritmanın tamamlanma süresini ifade eder [4]. Zaman karmaşıklığı genellikle en kötü, en iyi ve ortalama olmak üzere üç farklı senaryo için ayrı ayrı hesaplanır. Algoritma analizi kavramı ilk kez Donald Knuth tarafından 4 Kasım 1969 tarihinde verdiği bir ders sırasında kullanılmış [9], daha sonradan teorik bilgisayar biliminin ayrılmaz bir parçası haline gelmiştir. Donald Knuth, bu alandaki çalışmalarından ötürü “Algoritma Analizinin Kurucusu” olarak anılmaktadır. Algoritma analizi teknikleri, geliştirilen algoritmaların hafıza ve zaman karmaşıklığının saptanmasını kolaylaştırmakta, bu sayede sadece doğru sonuca ulaştıran değil, aynı zamanda sade ve hızlı algoritmaların tasarlanmasının önünü açmaktadır.

Kısaca algoritmalar, günümüzde neredeyse her alanda varlığı sürdürmektedir ve teknolojik gelişmeler sayesinde hayatımızda merkezi bir önem kazanmış durumdadır. Yukarıda da bahsettiğimiz gibi algoritmalar sadece bilgisayarlarla alakalı değildir. Evde, iş yerinde ve günlük hayatımızın birçok noktasında karşılaştığımız problemleri, kafamızda oluşturduğumuz algoritmalar sayesinde çözmeye çalışırız. Farklı algoritmaları inceleyip öğrenmeye çalışmak, kişinin problemlere karşı bakış açısını geliştirecek, özgün çözümler üretmesini sağlayacaktır.

 

Kaynaklar:

 

[1] Abdüsselam Altunkaynak., “Cebir” biliminin kurucusu “el-Hârizmî”. [Website]. 25.01.2022 tarihinde http://www.altunkaynak.net/bilim-onculeri/cebir-biliminin-kurucusu-el-harizmi-nin-hayati-eserlerli-arastirmalari-ve-dunyadaki-etkileri adresinden alındı.

 

[2] “Al-Khwarizmi”. 14.02.2022 tarihinde https://commons.wikimedia.org/wiki/File:Al-Khwarizmi_portrait.jpg adlı siteden alındı.

 

[3] “Archimedes circle area proof”. 14.02.2022 tarihinde https://commons.wikimedia.org/wiki/File:Archimedes_circle_area_proof_-_inscribed_polygons.svg adlı siteden alındı.

 

[4] Bilgisayarnot. (2020). “Algoritmanın zaman ve hafıza karmaşıklığı”. [Blogpost]. 14.02. 2022 tarihinde https://bilgisayarnot.blogspot.com/2020/05/algoritma-zaman-hafza-karmasiklik.html adlı siteden alındı.

 

[5] Chronology of Computation of π. 26.01.2022 tarihinde https://en.wikipedia.org/wiki/Chronology_of_computation_of_%CF%80 adlı siteden alındı.

 

[6] Codecrucks. (2021). “Evolution of algorithm - origin and history”. [Website]. 25.01.2022 tarihinde https://codecrucks.com/evolution-of-algorithm-origin-and-history/ adresinden alındı.

 

[7] Corman T. H., Leiserson C. E., Rivest R. L. ve Stein C. (2002).  Algoritmalara giriş, (2. baskı). McGraw-Hill.

 

[8] Çölgeçen, R. (2004) Bilgisayar programlama sanatı: 1.cilt: Temel algoritmalar. (C. Uğurkaya). İstanbul: Papatya Yayıncılık

 

[9] “Donald Knuth”. 14.02.2022 tarihinde http://www.turkcewiki.org/wiki/Donald_Knuth adlı siteden alındı.

 

[10] Goyanes, J. G. (2009). History of the formulas and algorithms for π. Cornell University. [Website]. 26.01.2022 tarihinde https://arxiv.org/abs/0807.0872 adlı siteden alındı.

 

[11] Internet Archive: Wayback Machine.  Knuth: Recent News.” [Website]. 14.02.2022 tarihinde https://web.archive.org/web/20160828152021/http://www-cs-faculty.stanford.edu/~uno/news.html adlı siteden alındı.

 

[12] Saçı, C. (2021). Hârizmî’den Fibonacci’ye: Hint-Arap rakamlarının evrimi ve modern dünyaya etkisi. Listelist.  [Website]. 25.01.2022 tarihinde https://listelist.com/rakamlar-nasil-ortaya-cikti/ adresinden alındı.

 

Yazar: Karahan Sarıtaş

Editörler: Berna Kurt, Fatma Güldoğan, Bilge Nur Kılıç

 

 

 

 

 

 

Hiç yorum yok:

Yorum Gönder

Hikaye Anlatıcılığında Monomit Kuramı

          Birey olarak biz ve içerisinde bulunduğumuz sosyal küre; ailemizden arkadaşlarımıza, beraber vakit geçirdiğimiz insanlardan bir pa...