Yakın zamana kadar, algoritmalar yalnız bilgisayar bilimcilerinin alanıydı ama artık hayatımıza girdiler ve yaygınlaşıyorlar. Algoritma artık yabancı bir sözcük değil. Algoritmik ticaret, algoritmik önyargı, Twitter algoritması, hatta algoritmik savaş – tüm bu terimler son yıllarda kelime dağarcığımızın parçası haline geldi. Bazı insanlar yeni bir çağda yaşadığımızı iddia edecek kadar ileri gidiyor: Algoritma çağı.
Ancak algoritmalar aslında o kadar yeni değil. Yüzlerce, binlerce yıldır bilerek veya bilmeyerek onları kullandık. Algoritmalar, belirli bir sonuca ulaşmak için adım adım gerçekleşmesi gereken eylemlerdir. Bilgi paylaşımının en yaygın araçlarından biridir. Örneğin, birine bir şeyin nasıl yapılacağını öğretme sürecinde algoritmaları kullanıyoruz.
Algoritmaların bazı yönleri son yıllarda değişti. Özellikle bilgisayarların kullanılmaya başlanması günümüzde birçok algoritmanın geçmişte hayal edebileceğimizden çok daha karmaşık olmasını sağladı. Peki algoritma geçmişten bugüne nasıl gelişti ve değişti?
Algoritmanın Ortaya Çıkışı
Algoritma terimi, 9. yüzyıl Pers matematikçi Harezmi'nin adından türemiştir. Latince adı Algoritmi'dir ve "ondalık sayı sistemi" anlamına geliyordu. Yüzyıllar boyunca bu anlamda kullanıldı. Modern algoritma kavramı 19. yüzyılda İngilizce olarak ortaya çıktı ve ilk ticari bilgisayarların geliştirildiği 1950'lerden başlayarak yaygınlaştı. "Algoritma" adını daha sonradan aldı.
İlk algoritma Babiller tarafından MÖ 1700'de kök çıkarma (ikinci dereceden denklemleri çözme) yöntemi olarak geliştirildi. Sonraki ilk algoritmalar MÖ 4. yüzyılda Antik Yunanistan'da kağıt üzerinde bulunmuştur. Gerasalı Nikomakhos veya Öklid gibi bilginler o zamanlar modern matematiğin merkeziydi. Fikirlerinin anlaşılmasını ve uygulanabilirliğini kolaylaştırmak için onları adım adım eylemler biçiminde ifade ettiler.
MÖ 3. yüzyılda Gerasalı Nikomakhos, Eratosten Kalburu'nu geliştirdi. Eratosten Kalburu günümüzde verimli bilgisayar kodu yazmayı öğrenen öğrenciler tarafından kullanılıyor. Asal sayıları belirleme sürecini basitleştirmeyi sağladı. Asal sayılar, kendisinden küçük iki doğal sayının çarpılmasıyla oluşturulamayan birden büyük doğal sayılardır. Örneğin dört asal sayı değildir çünkü iki ile iki çarpılarak oluşturulabilir. Beş ise aksine asal sayıdır. İlk birkaç asal sayıyı bulmak zor olmasa da (örneğin 2, 3, 5, 7, 11, 13, 17, 19, 23 ve 29) büyük asal sayıları bulmak çok zaman alır.
Kriptografide büyük asal sayılar çok önemlidir. Eratosten Kalburu bir sayı kümesinden (örneğin 1 ile 10.000 arasında) yalnız asal sayılar kalana kadar tüm asal olmayan sayıları çıkarmaya yarayan adımlara sahip. Bugün, bu tür sayıları belirleme görevini basitleştiren çok sayıda algoritma bulunuyor. Eratosten Kalburu asal sayıları tespit etmede daha iyi olan (daha hızlı veya daha az adım gerektiren) bir algoritma ailesi doğurdu.
Bu günlerde Nikomakhos'tan çok daha iyi bilinen bilgin Öklid, iki sayının en büyük ortak bölenini belirleyen bir algoritma geliştirdi. Öklid'in algoritması tüm hesaplamayı kolaylaştırmıştı. Örneğin, yeni bir zemin gereken 612 x 2006 santimetre büyüklüğünde bir odanız olsun. Öklid'in algoritması zemini eşit şekilde kaplayacak en büyük kare karoların boyutunu bulmayı sağlar. Algoritma tarafından verilen cevap 34 cm'ye 34 cm'dir ve 18'e 59 karo dizilimi demektir. Elbette algoritma harç genişliğini dikkate almadığından bunun için boşluk bırakmak gerek. Ancak bu da hesaplanabilir ve bir algoritma ile ifade edilebilir.
İlk Makine Algoritmaları
Öklid'den sonraki birkaç yüzyıl içinde kağıt üzerinde çok daha fazla algoritma oluşturuldu. Bir makinede kullanılması amaçlanan ilk algoritma Ada Lovelace tarafından geliştirilmiş ve 1843'te yayımlanmıştır.
Ada ilginç bir karakterdi. 1815'te şair Lord Byron'ın tek meşru çocuğu olarak doğdu. Matematikte büyük yetenekler geliştirdi ve şiir sevgisi genlerinde olduğu için hem bilim hem de şiir sevgisini geliştirmeyi ve dengelemeyi başardı. Zihniyetini "şiirsel bilim" olarak tanımladı. Yetenekli bir matematikçi olarak, icatları nedeniyle "bilgisayarların babası" olarak anılan Charles Babbage ile tanıştı. Her ikisi de bir çalışma ilişkisi ve dostluk geliştirdi. Ada, Charles'ın tasarımlarından biri olan Analitik Motor'la çok ilgilendi.
Analitik Motor mekanik bir bilgisayardı – hesaplamaları otomatikleştiren bir makineydi. İlk algoritmayı Analitik Motor ile yazdı. Çalışması, Bernoulli sayıları adı verilen karmaşık sayı dizisini hesaplamak için Motor'un nasıl yapılandırılacağını gösteren bir formüldü. Formül bugün tarihteki ilk bilgisayar algoritması olarak kabul edilir.
Ada kendini sadece matematiksel hesaplamayla sınırlamadı. 19. yüzyılda yaşadığı düşünülürse gerçek bir vizyonerdi. Çağdaşlarının çoğu ilk mekanik bilgisayarları sayı-çarpıcı olarak görürken, o, hesaplama yapmanın ötesinde birer işbirlikçi araç olarak mekanik bilgisayarın geniş potansiyelini gördü. Sadece hesaplamayı otomatikleştirmekten çok daha fazlasını yapabileceklerini anladı.
Ne yazık ki, Analitik Motor'un yapımı Ada'nın ölümünden önce tamamlanmadı ve bu nedenle algoritmasını çalışırken göremedi. Hatta Analitik Motor asla bitirilememiş ve Charles Babbage'ın bir başka tasarımı olan Fark Motoru yalnızca 1991'de Londra Bilim Müzesi tarafından inşa edilmiştir. Charles Babbage'ın kullanabileceği malzeme ve teknolojiler kullanılarak işlevsel olduğu gösterildi. Babbage, tasarımlarını ürettirme konusunda şanssızdı. Ada Byron'ın algoritmasını çalıştıracak gerçek bir Analitik Motor asla var olmadı.
19. yüzyıl "makinelere gömülü algoritmalar" çağı oldu.
Her türlü insan eylemini otomatikleştiren çok sayıda algoritma oldu. Bir kumaş parçası üzerinde karmaşık bir desene ihtiyacınız varsa, Fransız dokumacı ve tüccar Joseph Marie Jacquard'ın sizin için bir çözümü vardır: Jakarlı Tezgah. Kumaş üreticilerinin bir dokuma tezgahına nasıl dokuma yapacağını delikli kartlarla belirleyerek sofistike desenler üretmeyi sağladı. Benzer şekilde, ilk telefon santralleri telefon görüşmelerini bağlarken gelişmiş mekanik cihazları kullandı. İki kişinin birbiriyle konuşmasını sağlamak için sıralanan talimatları otomatik gerçekleştirdiler. Tüm bu makineler zamanında çığır açıcıydı ve bugün de hala etkileyicidir. Bu makinelerin bazılarının karmaşıklık düzeylerine hayran olmamak elde değil. Ancak, tüm bu cihazlar hala tamamen mekanikti. Kollardan, anahtarlardan, millerden yapılmıştı. Çok gürültülüydüler ve bugünlerde bilgisayar dediğimiz şeyden çok uzaklardı.
İlk Bilgisayar Algoritmaları
Elektronik bilgisayarlar için algoritma geliştirme düşüncesi ilk kez 1930'larda ortaya çıktı. Alan Turing alandaki ilk öncülerdendi. Turing'in amacı yalnız asal sayıları belirleyen veya en büyük ortak böleni hesaplayan belirli bir algoritma geliştirmek yerine genel algoritmalar bulmaktı. Bu genel algoritma daha sonra belirli görevleri gerçekleştirmede kullanılabilirdi. Turing'in kavramsal çalışması, şu anda Turing Makinesi olarak bilinen şeyin geliştirilmesine yol açtı. Turing Makinesi ilk genel amaçlı bilgisayarların ortaya çıkmasına neden olmuştur. Burada genel amaçlı öneki önemli. Önceki makinelerin aksine, yeni bilgisayarlar keyfi talimat alabiliyordu. Üreticiler tarafından bile tahmin edilmeyen amaçlar için kullanılabilirlerdi. Başka bir deyişle: Turing'in çalışması, uygulamalar kurabileceğimiz ve çalıştırabileceğimiz bilgisayarların geliştirilmesine yol açtı.
Turing makinesi konsepti olmadan akıllı telefonunuz olmazdı.
Yıllar içinde algoritmalar son derece karmaşık hale geldi. Aslında o kadar karmaşık ki, nasıl çalıştıklarını açıklamak çoğu zaman imkansızdır. 20. yüzyılda birçok kişi bilgisayar algoritmalarını kara kutular olarak gördü. Tam olarak nasıl çalıştıklarını anlamak şart değildi. Tek önemli olan girdiler ve çıktılardı. 21. yüzyıldaki algoritmalar içinse durum kontrolden çıktı: İnsanlar artık yeni algoritmaların belirli çıktılara nasıl ulaştığını açıklayamıyor. Tıpkı yapay zeka algoritmaları gibi.
Örneğin ilkelerini açıklayabilirsiniz. Bir algoritmanın yapay sinir ağını kullandığını söyleyebilirsiniz. Ayrıca ağın nasıl oluşturulduğunu ve girdinin nasıl belirli bir çıktı ile sonuçlandığını da açıklamak olasıdır. Ancak açıklanamayan şey, belirli bir sonucun neden o algoritmanın çıktısı olmuş olduğudur. Hapis yatma süresi bir algoritma tarafından belirlenen Eric L. Loomis, COMPAS algoritmasının kendisini neden yüksek riskli suçlu olarak gördüğünü anlamaya çalıştı. Ancak imkansızdı. Algoritmaların karmaşıklığı cezbedicidir ve her şey henüz yeni başlıyor.
Algoritmaların her yerde olduğu bir dünyada yaşıyoruz – sadece kağıt üzerinde veya zihnimizde değil, algoritmalar makineleri, bilgisayarları ve robotları kontrol ediyor.
Küçük, büyük her yerde bulunurlar ve bazen gerçekten nasıl çalıştıklarını anlamak imkansızdır.
Algoritma Hakkında Sık Sorulanlar
Algoritma nedir ve bir programdan farkı nedir?
Algoritma, bir problemi çözmek veya bir görevi yerine getirmek için adım adım uygulanan bir prosedürdür; program ise bir bilgisayarın yürütebileceği talimatlar topluluğudur. Bir algoritma, bir programın tasarımı veya planı olarak düşünülebilir.
Bazı yaygın algoritma tasarım teknikleri nelerdir?
Bazı yaygın algoritma tasarım teknikleri kaba kuvvet, böl ve yönet, dinamik programlama ve açgözlü algoritmaları içerir. Bu tekniklerin her birinin eldeki probleme bağlı olarak farklı güçlü ve zayıf yönleri vardır.
Bir algoritmanın verimliliğini nasıl ölçeriz?
Bir algoritmanın verimliliğini ölçmenin bir yolu, zaman karmaşıklığını veya girdi boyutu arttıkça çalışma süresinin nasıl büyüdüğünü analiz etmektir. Genellikle zaman karmaşıklığını, bir algoritmanın gerçekleştirmesi gereken işlemlerin sayısına bir üst sınır veren Big O notasyonunu kullanarak ifade ederiz.
Algoritma nedir ve bilgisayar bilimleriyle ilişkisi nedir?
Algoritma, bir problemi çözmek veya bir hedefe ulaşmak için adım adım uygulanan bir prosedürdür. Bilgisayar bilimlerinde algoritmalar yazılım geliştirmek ve hesaplama problemlerini çözmek için kullanılır.
Bazı farklı algoritma türleri nelerdir?
Sıralama algoritmaları (verileri belirli bir sıraya göre düzenleyen), arama algoritmaları (bir veri kümesindeki belirli verileri bulan) ve optimizasyon algoritmaları (bir soruna mümkün olan en iyi çözümü bulmaya çalışan) dahil olmak üzere birçok farklı algoritma türü vardır.
Kaynaklar:
- Sipser, Michael (2006). Introduction to the Theory of Computation. PWS Publishing Company.
- Dilson, Jesse (2007). The Abacus ((1968, 1994) ed.)