Son zamanlarda algoritma sözcüğüne haberlerde daha sık rastlıyoruz. Haber sitelerinde algoritma kelimesini (bkz https://www.ntv.com.tr/ara?q=algoritma) arattığımızda çok sayıda güncel haber listeleniyor. “WhatsApp, ‘herkesten sil’ özelliğini değiştirdi” () haberinde yeni algoritmayla “atılan mesajı silme” özelliğinin çalışma prensibinin değiştiği; “Pelikan yuvadan uçmaya hazırlanıyor” () haberinde Meteksan Savunma’nın geliştirdiği Pelikan Güdümlü Mermi Simülatörü’nün kullanıcıya farklı algoritma ve parametreleri deneyebilme imkanı verdiği; “Facebook kaç paranız olduğunu bilecek” () haberindeyse Facebook’un satın aldığı yeni algoritma anlatılıyor.
Önümüzdeki günlerde bu sözcüğü daha çok duyacağız gibi görünüyor. Henüz ülkemizde yaygınlaşmadı ama bir “algoritma çağı”ndan bahsedenler de var (http://radioopensource.org/the-algorithmic-age/, http://firstmonday.org/ojs/index.php/fm/article/view/8097/6583). Rainie vd.’ye (2017) göre algoritmalar her şeyi optimumlaştırmaya çalışıyor, hayat kurtarıyor, işleri kolaylaştırıyor ve kaosu önlüyor ancak şirket ve hükümetlerin elde edebileceği güç nedeniyle de endişe uyandırıyor. Rainie vd.’nin (2017) algoritmalar ve etkileri üzerine yaptıkları çalışmaya katılan bilişim teknolojileri uzmanların neredeyse tamamı algoritma tabanlı uygulamalar hakkındaki endişelerini ifade ediyor. Bu uzmanların %38’i algoritmaların olumlu ve %37’si olumsuz etkilerinin daha ağır bastığını düşünüyor. %25’ine göreyse algoritmaların olumlu ve olumsuz etkileri yarı yarıya. Ancak uzmanların büyük çoğunluğu, algoritmaların görünmez bir şekilde hızla yayılacağı ve gelecekteki etkilerinin çok daha büyük olacağı hakkında hemfikir.
Enformasyon çağı, bilgi çağı ve şimdi karşımıza çıkan algoritma çağı gibi tanımlamalara karşı bazı çekincelerim olsa da önümüzdeki günlerde algoritmaları daha çok konuşacağımız ve tartışacağımız kesin. Algoritmaları daha sağlıklı tartışabilmek için de bir zamanlar sadece matematikçilerin ve yazılım geliştirenlerin aşina olduğu bir terim olan algoritmanın ne olduğunun ve bilgisayımsal (computational) işlemlerdeki yerinin anlaşılması gerekiyor. Dolayısıyla kodlama eğitimlerini yalnızca bir meslek edindirme kursu olarak değerlendirmemeli. Bu eğitimler, öğrencilere bilgisayımsal bakış açısı kazandırmak için önemli bir fırsat. Hatta kodlamayı, eğitimin amacı değil, bilgisayımı anlamanın ve yaparak öğrenmenin bir aracı olarak ele almak daha yerinde bir yaklaşım olabilir. Birçok okulda yeterli bilgisayar altyapısının olmadığını düşünerek karamsarlığa kapılmamak lazım. Bilgisayımsal bakış açısı, bilgisayar olmadan da (belki daha başarılı olabilir) kazandırılabilir. Örneğin https://classic.csunplugged.org/ adresinde çocuklara bilgisayar bilimini, bilgisayar olmadan öğretebilmek amacıyla çeşitli oyunlar ve etkinlikler hazırlanmış. Aynı sitede, ücretsiz indirebilen ve çeşitli dillere çevrilmiş bir kitap da var. Kitap henüz Türkçeye çevrilmemiş olmasına karşın kitaptaki bazı etkinliklerin Türkçe çevirileri de var. İkilik düzeni, sıralama, arama ve metinleri sıkıştırmada kullanılan algoritmaları oyunla öğreten eğlenceli etkinlikler var.
Okullarda yıllardır Word, Excel, Power Point vb anlatılarak yapılan teknoloji eğitiminden kökten farklı bir eğitim anlayışına gereksinim var. ABD ve Avrupa’da kodlama eğitiminin hedefleri arasında ucuz işgücü yetiştirmek olabilir; belki biz de sadece onların acemi bir taklitçisiyiz. Buna rağmen bilgisayar bilimini, çeşitli algoritmaları ve kodlamayı neden öğrenelim? Bilişim teknolojilerinden yararlanmak (örneğin tweet atmak, sosyal ağlarda örgütlenmek) için tüm bunları bilmeye gerek var mı? Sonuçta, televizyon izleyebilmek için elektronik ya da modern sağlık hizmetlerinden yararlanmak için tıp üzerine çalışmıyoruz.
Kimi zaman eğlenceli de olabilecek bu öğrenme zahmetine katlanmak için başlıca iki nedenimiz olduğunu düşünüyorum. Birincisi, adı ister algoritma çağı isterse başka bir şey olsun algoritmalara dayalı toplumsal düzenlemelerin çoğalacağı bir sisteme doğru ilerliyoruz. Bilgisayarların çalışma ilkelerinin büyüden arındırılması gerekiyor. Bilgisayarların nasıl çalıştığı bilinmediği zaman bilişim teknoloji hakkındaki mitsel düşüncelere daha kolay kapılıyoruz. Ayrıca Erwig’in (2017) belirttiği gibi yaşadığımız dünyada kendi başına hareket edemeyen nesnelerle etkileşim halindeyiz ve temel mekanik bilgisi bu nesnelerin hareketini önceden tahmin edebilmemizi böylece daha güvende olmamızı sağlıyor. Erwig’e (2017) göre bilgisayar bilimi de benzer bir yarar sağlayacaktır. Toplumsal yaşamı ve politik sistemleri etkileyen algoritmaların nasıl çalıştıklarının, varsayımlarının, hangi koşullarda daha iyi sonuç verebildiklerinin ya da sonuçlarının kesin mi yoksa olasılık hesabına mı dayandığının bilinmesi önemlidir.
İkinci neden ise bilgisayar biliminin, bilgisayar ve elektronik cihazlar dışında da gündelik yaşamdaki sorunları anlamaya ve çözmeye katkıda bulunabilme potansiyelidir. Algoritma kelimesi, Ebu Abdullah Muhammed Bin Musa El-Harezmi’den (780-850) gelmektedir. Harezmi, Hindistan’da geliştirilmiş onluk sistemi ve Arap rakamlarıyla sıfır kavramını Avrupa’ya tanıtmıştır. Cebir kelimesi El-Harezmi’nin 1830’da yazdığı “El’Kitab’ül-Muhtasar fi Hısab’il Cebri ve’lMukabele” (Cebir ve Eşitlik Üzerine Özet Kitap) adlı eserinde geçmektedir. El-Harezmi bu kitabında “hangi sayının karesi, sayının 10 katı ile toplanırsa 39 eder?” probleminin çözüm yolunu hem sözlü hem de geometrik olarak göstermektedir. El-Harezmi’nin adını “Algorizm” olarak telafuz eden Avrupalılar da “Arap sayıları kullanarak aritmetik problemler çözme kuralları”na algoritma adını vermiştir (). Fakat algoritmalar, bu terim kullanılmaya başlamadan önce de vardır. Ayrıca belirli bir problemi çözmek için uygulanan bu alışılmış yöntemler (rutinler), olarak tanımlayabileceğimiz algoritmaların kullanım alanları matematikle sınırlı değildir. Babiller’in hukuksal sorunlarda karar verebilmek ve Latince öğretmenlerinin doğru gramer elde edebilmek için algoritmalardan yararlandığı bilinmektedir. Tüm kültürlerde algoritmaların geleceği tahmin etmek, hangi tıbbi tedavinin uygulanacağına karar vermek, yemek hazırlamak gibi uygulama alanları vardır (Barbin vd., 2012). Yemek ya da bir sandviç hazırlarken bir tarifte yer alan talimatları uygularız. Aslında yaptığımız şey malzeme, mutfak gereci, enerji ve hazırlama zamanı gibi kaynaklardan yararlanarak alışılmış yöntemleri uygulamak ve ham içeriği nihai bir ürüne dönüştürmektir. Bilgisayımsal eğitim, gündelik yaşamımızdaki bu tip süreçleri tekrar gözden geçirmemizi sağlayabilir.
Bu bağlamda, Erwig’in (2017) Once Upon an Algorithm: How Stories Explain Computing (Bir Zamanlar Bir Algoritma: Masallar Bilgisayımı Nasıl Açıklar) adlı kitabının güzel bir çeviriyle bilgisayımsal eğitim için eşsiz bir kaynak olacağını düşünüyorum. Erwig (2017), popüler masallar, romanlar ve filmler aracılığıyla bilgisayar biliminin temel kavramlarını basit ama ayrıntılı bir biçimde anlatıyor. Erwig’in (2017) Hansel ve Gretel’den nasıl yararlandığına bakalım.
Hansel’in Algoritması
Erwig (2017) algoritmaları tartışmaya bilgisayımın ne yaptığı ve ne olduğu sorularıyla başlar. Birinci görüş, bilgisayımın problem çözdüğüdür. Bu bakış açısında, bir problemin uygun biçimde gösterildikten ve alt problemlere ayrıldıktan sonra çözülebileceği vurgulanmaktadır. Bilgisayımla problem çözme arasındaki farklılıkları dikkate alan ikinci görüşe göreyse bilgisayım herhangi bir problem çözme değil bir algoritmanın uygulanmasıdır. Algoritma, bilgisayımı kesin olarak tanımlar, bilgisayımın otomatikleştirilmesini ve analizini olanaklı hale getirir. Bilgisayımda problemler ortak özelliklerine göre sınıflandırılır ve bu sınıfta yer alan problemlerin çözümü için bir algoritma tasarlanır. Böylece algoritmalar, belirli bir sınıfta yer alan problemlerin çözümünde uygulanabilecek bir beceri haline getirilir.
Erwig (2017) daha sonra bu tartışmayı Hansel ve Gretel adlı masalla derinleştirir. Masalı hatırlayalım. Hansel ve Gretel, babalarıyla ve üvey anneleriyle yaşayan iki kardeştir. Üvey anneleri, çocuklardan kurtulmak ister ve babalarını, çocukları ormanın derinliklerinde bir yere bırakmaya zorlar. Babasıyla üvey annesinin konuşmasına kulak misafiri olan Hansel’in aklına ormandan eve geri dönebilmek için bir çözüm gelir. Gece dışarı çıkar ve çakıl taşı toplayıp cebine doldurur. Sabahleyin ormanın derinliklerine doğru yola çıktıklarında Hansel cebindeki çakıl taşlarını yol boyunca serper. İki kardeş ormanda yalnız başlarına kaldıklarında havanın kararmasını beklerler. Daha sonra ay ışığında parlayan çakıl taşlarını takip ederek evlerine geri dönerler.
Burada temel problem, tehlikeli ormandan güvende olabilecekleri evlerine dönebilmektir. Problem tek adımda çözülemeyeceğinden Hansel problemi parçalara ayırır. Asıl problem şimdi iki çakıl taşı arasındaki mesafeyi kat etmekle çözülebilecek daha alt problemler haline getirilmiştir. Sistematik biçimde, çakıl taşlarını izlemeleri gerekmektedir. Sistematik yaklaşım, bilgisayımın temel özelliklerinden biridir. Aşağıdaki resimden de görüldüğü gibi Hansel, ana problemi daha kolay çözülebilir parçalara ayırarak çözebilmiştir. Fakat bu stratejinin tek başına yeterli olmadığına ve çakıl taşı gibi tamamlayıcı bir ögeye gereksinim duyduğuna dikkat edelim. Çözüm sürecinden anlaşıldığı gibi bilgisayımın gerçek dünyadaki bir problemi çözebilmesi için problemin gösterimi (representation) gerekmektedir. İlk gösterim, ormanın tehlikeli ve evin güvenli olduğu bir durumu ifade etmektedir. Hansel ve Gretel, tehlikeli bölgeden güvenli bölgeye geçmelidir. Hansel’in çözümünde ise bir çakıl taşı, o anda bulundukları yeri ve çakıl taşlarının tamamı da ormandan çıkış yolunu göstermektedir. Çakıl taşları, bilgisayımı olanaklı hale getirmektedir.
Bilgisayım, problem çözme sürecidir. Ama ne her bilgisayım bir problem çözer ne de her problem çözümü bilgisayımdır. Hansel ve Gretel, problemin gösterimiyle ilgisiz biçimde, etrafa çakıl taşı serpmiş olabilir. Ormanın içinde bunları takip ederek dolaşmaları ve sonra aynı yere gelmeleri bir çözüme götürmeyecektir. Her çözüm de bilgisayım kapsamında değerlendirilemez. Hansel’in gözleri iyi görmeyen cadıyı kilo almadığına inandırmak için parmağını uzatmak yerine bir kemik parçasını uzatması zekice ama anlık bir çözümdür. Bu çözümde sistematik bir yaklaşım yoktur. Hansel’in geri dönüş takibi için çakıl taşlarını kullanmayı akıl etmesi de sistematik bir düşüncenin sonucu olmayıp anlık bir çözümdür. Hansel’in daha sonra çakıl taşı bulamayınca ekmek parçalarını kullanması yine anlık bir çözümdür. Çakıl taşlarının takip edilerek eve dönülmesiyle uygulanan çözüm tekrarlanabilme özelliğine sahiptir. Ama Hansel’in çözüme yardımcı olmak amacıyla çakıl taşını kullanmayı akıl etmesi ve daha sonra bunun yerine ekmek parçalarını kullanmayı akıl etmesi tekrarlanamaz; üçüncü kere ormana bırakılmaları gerekseydi Hansel’in aklına bir başka parlak fikrin gelmesini bekleyecektik.
Bilgisayımın problem çözümü olarak ele alınması bilgisayımı sistematik ve bölünebilir bir süreç olarak göstermesi açısından önemlidir. Ancak bilgisayımın nasıl çalıştığını ve neden benzer durumlarda uygulanabilir olduğunu göstermekte yetersiz kalmaktadır.
Hansel ve Gretel, aşağıdaki algoritmayı uygulamaktadır:
- Daha önce ziyaret edilmemiş parlak bir çakıl taşı bul ve ona doğru ilerle.
- Eve geri dönene kadar bu adımı uygula
Algoritmaların en büyük özelliği tekrarlanabilirliktir. Hansel ve Gretel, aksi bir koşul oluşmadıkça aynı algoritmayı her seferinde başarıyla uygulayabilir. Bu nedenle, algoritmalar bilgisayımda temeldir. Bir algoritmanın bir dilde ifade edilebilmesi, bir sınırının olması (sonsuza kadar gitmemesi) ve işe yarar olması gerekir. Algoritma ayrıntılandırılabilir. Örneğin, Hansel’in taşları serperken görüş mesafesini dikkate alması gerekir. Çünkü bir taşın bulunduğu yerden sonraki taşın nerede olduğunu görerek hangi yöne gideceğine karar verebilmelidir. Masal da anlatılmamış ama aynı taşı iki kere ziyaret etme gibi bir durum da olabilir. O zaman ne yapmaları gerekir? Bu tip sorunların önüne geçebilmek için Hansel ve Gretel önlerine çıkan çakıl taşlarını toplamaları gerekecektir. Yeni algoritma aşağıdaki gibi olabilir:
- Daha önce ziyaret edilmemiş parlak bir çakıl taşı bul, bulunduğun yerdeki taşı cebine koy ve yeni taşa doğru ilerle.
- Eve geri dönene kadar bu adımı uygula
Ne yazık ki bu yeni algoritma nedeniyle masalın yeniden yazılması gerekecektir. Çünkü eve vardıklarında Hansel’in cebinde yine taşlar olacağından ekmek kullanmak zorunda kalmayacaklar, kuşlar yoldaki ekmekleri yemeyecek ve cadının eline düşmeyeceklerdir. Ama masalda anlatılmayan başka olasılıklar da vardır. Algoritmanın her zaman sonlanabilmesi ve doğru sonucu vermesi gerekmektedir. Eğer ormana doğru ilerlerken düz bir yol takip etmeyip zikzak çizdilerse aşağıdaki gibi bir durumla da karşılaşılabilir:
D noktasından hem B hem de C görülebiliyorsa algoritmanın bunu da dikkate alması, örneğin DCBA yolu yerine DBC’de takılıp kaldıysa bir önceki konumuna dönmesi gerekir. Algoritmaların durması da önemli bir özelliktir. “Daha önce ziyaret edilmemiş” şartını kaldırdığımızda işler yine karışabilir. Algoritmada sonsuz döngüye girilebilir.
Erwig (2017) daha sonra “bilgisayım algoritmanın uygulanmasıdır” görüşüne geçer ve bilgisayımın algoritma uygulandığında gerçekleştiğini belirtir. Bilgisayar, bilgisayım yapan kişi ya da şeydir. Buna göre iki tip bilgisayar vardır. Birincisi, anlayabileceği dilde tarif edilen herhangi bir algoritmayı en azından (prensipte) uygulayabilen, insan, dizüstü bilgisayar ya da akıllı telefon gibi evrensel bilgisayarlardır. İkinci tip bilgisayarlarsa tek bir algoritmayı çalıştırabilirler. Algoritmanın donanımla bütünleştiği hesap makineleri bu tip bilgisayarlardır.
Ayrıca bilgisayarın tipi veya bilgisayımı yapanın insan veya makine olması fark etmeksizin bilgisayımın bir maliyeti vardır. Bilgisayım için bilgisayarın kaynak kullanması gerekir. Oyun oynarken dizüstü bilgisayarınız ısınabilir ya da akıllı telefonda çok fazla uygulama çalıştırırsanız pili daha hızlı bitebilir. Bu nedenle, bir algoritmanın bir problemi çözebilmesinin yanında yeterince hızlı hesaplama yapabilmek için bilgisayım kaynaklarını nasıl kullandığı değerlendirilmelidir. Örneğin, bir sıralama algoritması 100 kaydı çok hızlı biçimde sıralayabilir. Ama milyonlarca kaydın aynı algoritmayla istenilen zamanda sıralanıp sıralanamayacağını öngörebilmek için algoritmanın sonuca nasıl ulaştığı bilinmelidir. Kayıt sayısının artması algoritmadaki adım sayısını nasıl etkilemektedir? Bir diğer deyişle, algoritmanın çalışma zamanı karmaşıklığı (runtime complexity) nedir?
Hansel ve Gretel’e dönersek… Çocukların algoritmasındaki “daha önce ziyaret edilmemiş parlak bir çakıl taşı bul ve ona doğru ilerle” bir algoritma adımıdır. Hansel ve Gretel’in adım büyüklüklerindeki farklılıklar ya da bilgisayarların işlemci modelleri algoritmanın uygulama hızında etkilidir. Ama algoritmaların verimlilik analizi ve birbiriyle karşılaştırılabilmesi için gerçek adımdan farklı olan algoritma adımı dikkate alınır:
Algoritmaların çalışma zamanı karmaşıklıklarının ölçümü daha büyük girdilerin (masalımızda daha uzun mesafelerde) çalışma zamanını nasıl etkileyeceğini göstermektedir. Hansel ve Gretel örneğinde, mesafe (kullanılan çakıl taşı) artıkça algoritma adımı sayısı da aşağıdaki gibi doğrusal olarak artmaktadır:
Her adımda bir çakıl taşı olmak zorundadır ve algoritmanın problemi çözüp çözememesi gidilen mesafeye, Hansel’in cebinin bu kadar çakıl taşı alıp alamayacağına bağlıdır. Hansel’in cebinin büyüklüğünün yolu bulmaya etkisi veya bilgisayar bilimi bağlamında bilgisayarın bir algoritmayı çalıştırabilmesi için gerekli alan, alan karmaşıklığı (space complexity) olarak adlandırılır. Görüldüğü gibi Hansel’in çakıl taşlı algoritması işe yarar gibi gözükmesine rağmen cebine sığan çakıl taşlarıyla sınırlıdır.
Şimdi masalı değiştirelim. Hansel’in cebi yeterince büyük değil ve bunun için yola bir çakıl taşı bıraktıktan sonra aşağıdaki gibi eve geri dönüp yeni bir çakıl taşı alması gerekiyor:
Bu durumda bir çakıl taşı koymak için 1 adım atacaktır. İkinci çakıl taşı için önce eve geri gidecek (1 adım), sonra da 2 adım ileri atacaktır. Üçüncü çakıl taşı için gidiş gelişte 5 (2 geri, 3 ileri adım), dördüncü için 7 adım (3 geri, 4 ileri adım) atacaktır. Böylece atılması gereken adımlar aşağıdaki gibi olacaktır:
Yukarıdaki örüntüye göre n çakıl taşlık mesafe için n² tane algoritma adımı gerekmektedir ve çalışma zamanı karmaşıklığını gösteren fonksiyonumuz bu sefer doğrusal değil, ikinci derece fonksiyondur:
Algoritmaların çalışma zamanı karmaşıklarının hesaplanması çeşitli algoritmaları karşılaştırma ve problemi istenilen sürede çözüp çözemeyeceğini öngörebilme olanağı sağlar. İkinci algoritma belki kısa mesafede uygulanabilir; ama mesafe artıkça Hansel’in kondisyonu yetersiz kalacaktır.
Erwig (2017), Hansel ve Gretel’den yola çıkarak bilgisayar bilimiyle ilgili birçok konuyu tartışmakta ve açıklamaktadır. Dil Derneği’nin sözlüğünde bilgisayar “çok sayıda aritmetiksel ya da mantıksal işlemlerden oluşan bir işi, önceden verilmiş bir izlenceye göre yapıp sonuçlandıran elektronik aygıt, elektronik beyin” olarak tanımlanıyor. Ama Erwig’in (2017) de vurguladığı gibi bilgisayar, bir insan da olabilir, elektronik aygıt da. Christian ve Griffiths’in (2017) Hayatımızdaki Algoritmalar adlı kitabı, “insan” bilgisayarların bilinçli veya bilimsiz kararlarında algoritmaların önemli bir yere sahip olduğunu göstermektedir. Yazının devamında da görüleceği gibi bu algoritmalardan yola çıkarak daha gerçekçi ve yararlı öneriler içeren bir kişisel gelişim kitabı bile yazılabilir.
En Doğru Yerde Duraklama
Boş park yeri bulmanın zor olduğu bir yere giderken çoğu zaman tereddüt ederiz: Boş bir yer gördüğümüzde hemen park etmeli miyiz? Yoksa daha az yürümek için arabayla biraz daha gidip şansımızı zorlasak mı? Ama ne kadar ilerlemeliyiz?
Seyahat eden bir turistiz. Haritaya baktığımızda güzergahımızda n tane otel olduğunu gördük. n. otele kadar gelip daha sonra içlerinden en iyi otele geri dönmek gibi bir şansımız olmadığından bir yerde durup konaklamamız gerekiyor. En uygun oteli nasıl seçeceğiz?
Otuz gün içinde bir kiralık ev bulmamız gerekiyor. İlk gördüğümüz evi beğendik. Hemen tutmalı mıyız? Ama biraz daha araştırma yapsak daha iyi olmaz mı? 29 gün boyunca kiralık evlere baksak, son gün de en beğendiklerimizi karşılaştırsak daha iyi olmaz mı? Ama ya beğendiğimiz ev tutulursa?
Ev kiralamaya bir de karşı taraftan, ev sahiplerinin gözünden bakalım. Kiralık ilanı verdikten sonra gelen ilk kiracı adayıyla anlaşalım mı? Ya daha iyi bir kiracı gelirse? Biraz daha bekleyebiliriz, ama Dimyat’a pirince giderken evdeki bulgurdan olmak da var.
Genç kızın kapısından görücü eksik olmuyor. Ne doktorlar, ne mühendisler evlenmek için kapısını çalıyor ama hiçbirine yüz vermiyor. Daha iyi bir koca adayı bekliyor. Anne ve baba, kızları evde kaldı diye endişeleniyor. Genç kız, daha ne kadar beklemeli?
Bu problemlerin hepsinde zamana karşı yarışırız. Tüm seçenekleri değerlendirmek istesek de kaynaklarımız sınırsız değildir; bir yerde durmamız ve kararımızı vermemiz gerekir. Nerede duracağız? Araştırmaya ne zaman son vermemiz gerekiğinin yanıtını arayan bu tip problemler en doğru yerde duraklama (optimal stopping) problemleri olarak adlandırılır. Christian ve Griffiths’in (2017) belirttiği gibi bu problemlerin en ünlülerinden biri de sekreter problemi olarak tanınmaktadır. Belirli bir sayıda sekreter adayı vardır ve işe alım, adayların özgeçmişine bakarak değil de birebir görüşülerek yapılacaktır. Aday uygunsa işe kabul edilecek ve görüşmeler sonlandırılacaktır. Yine yukarıdakilere benzer bir sorun vardır. Eğer aceleci davranılırsa en iyiyle hiç karşılaşmama, çok geç karar verilirse de belki de hiç olmayan daha iyiyi boş yere beklemiş olma ihtimali vardır. Ama matematik önemli bir ipucu sunmaktadır. Tek bir aday varsa bu adayın en iyi olma ihtimali %100’dür. İkinci aday varsa onun en iyi olma ihtimali %50, beşinci adayınki %20, yüzüncü adayınkiyse %1’dir. Dolayısıyla sonraki görüşmelerde daha iyi bir adayla karşılaşma ihtimali olabilir ama bu ihtimal giderek azalacaktır.
Şimdi adım adım ilerleyelim. İki adayımız var. Doğrudan birinciyi seçebiliriz veya onu göz ardı edip ikinciye geçebiliriz. Her iki durumda da en iyi adayı seçme ihtimalimiz %50. Üç adayımız varsa rastgele bir seçimle en iyi adayı seçebilme şansımız %33. Sonraki iki adayla görüşmeden ilk adayı seçersek veya ilk iki adayı eleyip üçüncüyü seçmek zorunda kalırsak en iyi aday için şansımız sadece %33 olacaktır. Ama algoritmamız şöyle olursa başarı şansımız %50 olacaktır:
- Birinci adayla görüş
- İkinci adayla görüş
- Eğer ilk adaydan daha iyiyse ikinci adayı seç
- Eğer ilk adaydan daha iyi değilse üçüncü adayı seç
Deneyelim. Üç kişi için altı farklı sıralama yapılabilir: 1-2-3, 1-3-2, 2-1-3, 2-3-1, 3-1-2, 3-2-1. Eğer birinci aday en iyi adaysa (1-2-3 ve 1-3-2 durumlarında) en iyiyi ararken onu kaçırırız. Eğer ikinci aday en iyi adaysa, ikinci adayın birinci adaydan güçlü olduğu durumlarda (2-1-3 ve 2-3-1 durumlarında) ikinci aday seçilecektir; zaten en iyi adaydır. İlk adayla görüştükten sonra ikincinin birinciden daha kötü olduğunu gördüğümüzden (3-1-2 durumu) üçüncü adaya geçerek yine en iyi adayı seçebiliriz. 3-2-1 durumunda ise ikinci aday birinciden daha iyi diye üçüncü adayı beklemediğimizden en iyi adayı seçme şansını kaçırırız. %100 doğru seçim yapamayız ama şansımızı %33’ten %50’ye çıkarmış oluruz.
Aday sayısı dört olduğunda ikinci, beş olduğunda da üçüncü adaydan sonra seçme işlemine başlamamız önerilmektedir. Aslında aday sayısı artıkça bu algoritma daha çok önem kazanmaktadır. Dört adaylı bir seçmede ikinciden, beş adaylıda üçüncüden sonra seçme işlemine başlamamız rastlantı değildir. Burada geçerli algoritma şöyledir:
- Hiçbirini seçmeden adayların %37’sine bakın
- %37’yi aştıktan sonra o ana kadar gördüğünüz adaylardan en iyi olanını seçin
Aşağıdaki tablodan da görüleceği gibi en iyi adayı seçme şansı yine %37’ye yaklaşacaktır:
Christian ve Griffiths’in (2017) belirttiği gibi algoritmaların içerdiği temel varsayımlar önemlidir. Yukarıdaki sekreter probleminde temel varsayım adayları ancak birbirleriyle karşılaştırarak hangisinin daha iyi olduğuna karar verebildiğimizdir. Elimizde ikinci adayın birincisinden ne kadar iyi olduğu hakkında hiçbir bilgi yoktur. Ama YDS (Yabancı Dil Bilgisi Seviye Tespit Sınavı) puanı gibi bir parametre eklersek en iyi adayı bulmaya daha çok yaklaşırız. Bu yeni koşulda, ilk %37’ye bakarken YDS puanı 95 olan birini doğrudan elemeyiz. Çünkü geri kalan adaylar arasında 95’ten yukarı puana sahip birini bulmak daha düşük olasılıktır. Bu nedenle, en iyi adayı bulmak için algoritmayı değiştirmek ve iyileştirmek gerekir.
Benzer bir durum, bir evini kiraya veren kişi için de geçerlidir. Sekreter probleminde olduğu gibi ev sahibinin bazı ön bilgilerle hareket etme şansı vardır. Kiracı adaylarını sadece verdikleri tekliflerle karşılaştırmaz; eve ödenecek en düşük ve en yüksek miktarları tahmin edebilir ve evin boş kalma maliyetini dikkate alarak kiracı adaylarıyla görüşür.
Christian ve Griffiths (2017), ev satışı, park yeri, sevgili seçimi gibi en uygun zamanda durup seçim yapmayı gerektiren problemler için uygulanabilecek farklı algoritmaları tartışmaktadır. Bu algoritmalar, her zaman en iyi adaya ulaştıramasa da rastgele bir seçimle karşılaştırıldığında en iyiye ulaşabilme olasılığını artırmaktadır.
Araştır veya Kullan
Christian ve Griffiths (2017), araştır/kullan ikileminde bilgi toplamak ve eldeki bilgiyi kullanma arasındaki dengeyi tartışmaktadır. Yabancı bir şehirde yemek yiyeceğiz. Daha önce gittiğimiz ve beğendiğimiz bir yere mi gitmeliyiz? Belki daha önce hiç gitmediğimiz bir yere giderek yeni tatlar aramalıyız. Bulunduğumuz şehri birkaç gün sonra terk edeceksek yeni tatlar aramak pek yararlı olmayacaktır. Çünkü iyi bir restoran keşfetsek bile bunun keyfini çıkarma süresi az olacaktır. Ama vaktimiz bolsa yeni şeyler denemek keşfettiğimiz tatların keyfini çıkarma süresi vereceğinden daha iyi bir seçenek gibi görünmektedir.
Christian ve Griffiths (2017) matematikçileri yıllardır meşgul eden bir soru sorar: “Bir kumarhanede iki kumar makinesi var. Birinde 15 oyun oynayıp 9 kere kazandınız ve 6 kere kaybettiniz. Diğerinde ise sadece iki oyun oynadınız ve sadece bir oyun kazandınız. Sonraki oyununuzu hangisinde oynardınız?” Birincisinde başarı oranı %60, diğerinde %50’dir. Hemen bir karar vermeden önce birincisinde 15 oyun oynarken diğerinde sadece iki oyun oynadığımızı dikkate almamız gerekir. Lokanta seçiminde olduğu gibi zaman yine önemli bir parametredir: Kumarhanede ne kadar kalacağız?
Herber Robbins 1952’de yazdığı makalesinde iki kumar makinesi için “Kazan kal, kaybet değiştir” stratejisinin işi şansa bırakmaktan daha iyi bir çözüm olduğunu savunmaktadır: Kazandığın sürece aynı makinede kal, kaybedince diğer makineye geç. Robbins’in bu stratejisini tartışan çok sayıda çalışma vardır. Bu tip araştırmalardan elde edilen sonuçlar hükümet ve şirket politikalarının oluşturulmasına yardımcı olmaktadır. Unilever 1970’lerde John Gittins adlı matematikçiden ilaç denemelerini en iyi şekilde planlamasını ister. Çünkü diğer ilaç şirketleri gibi Unilever de bir yandan yeni ilaçlar bulabilmek için AR-GE yatırımları yapmak isterken (araştır) diğer yandan mevcut ilaçlarından kazanç sağlamayı devam ettirmek istemektedir.
Web sitelerinde en uygun tasarımı bulmak için kullanılan A/B testi de yine bir araştır/kullan problemidir. A/B testlerinde web sitelerinin renk, resim, haber başlığı vb özellikleri değiştirilerek ziyaretçiler rastgele ama eşit bir şekilde farklı versiyonlara yönlendirilir. Sonra “KATKIDA BULUN”, “BAĞIŞ YAP”, “SATIN AL” gibi bağlantılara ne kadar tıklandığı karşılaştırılarak en uygun tasarıma doğru ilerlenir. İnternet reklamcılığında ve e-ticarette çok sık kullanılan bir stratejidir. ABD’deki son seçimlere sosyal ağlardaki yalan haberler damga vurmuş olsa da Obama’nın kazandığı seçimin yıldızı A/B testleridir.
Önbellekleme
Web tarayıcıların önbelleği, daha önce ziyaret edilen html sayfaları, resimler gibi içerikleri saklar ve daha sonraki ziyaretlerde bu içeriği web sunucuna gidip almak zorunda kalmadığı için önbellekteki içerik daha hızlı yüklenir. Önbellekleme, bilişim teknolojilerinde çok sık başvurulan bir yöntemdir. İşlemcilerin, sabit disklerin ve işletim sistemlerinin önbellekleri vardır. Bu nedenle, hafıza mimarisinde ve işlemci çiplerinin milimetrik yerleşiminde önbellekleme önemli parametrelerden biridir. Web sitelerinin hızlı açılması için sadece web tarayıcılarında değil sunucu tarafında da önbelleklemeye başvurulur.
Kısaca önbellekleme, sıklıkla başvurulan içeriğin daha hızlı erişilebilecek bir yerde saklanmasıdır. Önbelleklemeyi gündelik yaşamda da çok sık kullanırız. Sürekli kütüphaneye gitmemek için daha sık başvurulan kitapları kütüphaneden ödünç almak bir tür önbelleklemedir. Önbellek uygulamalarındaki en büyük kısıtlama önbelliğin sınırlı kapasitesidir. Örneğin kütüphaneden en fazla beş kitap ödünç alabiliriz. Yeni bir kitap almak istediğimizde elimizdeki beş kitaptan birinden vazgeçmemiz gerekir. Burada temel sorun, hangi kitabı iade edeceğimizdir. Farklı algoritmalar kullanılabilir. Örneğin, rastgele bir kitabı iade edip yenisini alabiliriz. İade ettiğimiz kitaba tekrar ihtiyacımız olduğunda ise yine elimizdeki beş kitaptan herhangi birini rastgele seçip iade edebiliriz. Bazı durumlarda basitliği nedeniyle tercih edilebilecek bir yöntemdir. İkinci yöntem, FIFO’dur (First-In, First-Out, İlk Giren İlk Çıkar). Buna göre yeni kitabı ödünç alabilmek için ilk aldığımız, yani en uzun süredir elimizde bulunan kitap iade edilmelidir. Fakat bu çözüm her zaman uygun olmayabilir. Belki de FIFO’da en önde yer alan kitabın en uzun süredir elimizde bulunma nedeni ona çok başvurmamızdır. Üçüncü yöntem, son zamanda en az kullanılanı çıkar (Least Recently Used – LRU), çoğu zaman en verimli sonucu sağlamaktadır:
LRU bize bir sonrakine ihtiyaç duyacağımız şeyin en son ihtiyacımız olan olduğunu, bundan sonra ihtiyaç duyacağımızın da muhtemelen en son ikinci kullanılan şey olduğunu söylemektedir. Ve en son ihtiyacımız olacak şey de en uzun zamandır kullanmadığımızdır (s. 140).
Gündelik hayatta LRU’ya sıklıkla başvururuz. Bazen de farkında olmadan. Dağınıklığın altında LRU algoritması yatıyor olabilir. Okumakta olduğu kitapları, kitaplığa geri yerleştirmek yerine masaya veya koltuğa koyanları ve dışarıdan gelince montu askıya asmayıp ortalıkta bırakanları bir de bu açıdan değerlendirebiliriz.
LRU önbellekleme için kullanılan tek algoritma değildir. Elde önbelleğe konulacak içeriğin ne olabileceği hakkında veri olduğunda farklı yöntemler de kullanılabilmektedir. Amazon, bir bölgede popüler olan ürünleri o bölgedeki alt depolarına göndererek çok daha hızlı teslimat yapabilmektedir. Netflix de insanların yaşadıkları yerlerle ilgili filmleri daha çok seyretmeye eğilimli olduğunu fark ettikten sonra filmlerini sunucularında buna göre depolamaya başlamıştır.
Çizelgeleme
Gündelik hayatta çok sık başvurduğumuz bir başka algoritma da önceliklerimizi belirlediğimiz ve buna göre harekete geçtiğimiz çizelgeleme algoritmalarıdır. Vaktimiz sınırlı ve yapmamız gereken işler vardır. Cuma gününde olduğumuzu ve önümüzde dolu dolu bir hafta olduğunu varsayalım. Pazartesi fizik ödevinin teslimi için son gün. Çarşamba matematikten, perşembe geometri ve biyolojiden sınav var. Cuma günü de matematik ödevimiz var. Bu arada doğalgaz almaya gitmemiz gerekiyor, en fazla beş gün yetecek doğalgaz kalmış.
Hayatta bazen işler yığılır ve her işi aynı anda yapamayacağımıza için bunları bir sıraya koymamız gerekir. Sıralamayı yaparken farklı ölçütler devreye girer. Bazen en yakın zamanda bitirilmesi gereken işten bazen de en kısa sürede bitebilecek işten başlarız. Bazı kişisel gelişim kitapları kısa sürede tamamlanabilecek bir işi hemen yapıp listeden çıkarmayı, bazıları önce en zordan başlamayı öğütler.
Matematikçiler ise olaya daha bilimsel yaklaşmaktadır. RAND’da çalışan Selmer Johnson 1954’te yayımlanan bir makalesinde şöyle bir problem ortaya atar: Biri çamaşırınızı yıkayan diğeri kurulayan iki makineniz var. Çamaşırları önce yıkayıp, sonra kurutmanız gerekiyor. Ancak bazı çamaşırlar fazla lekeli olduğu için daha uzun sürede yıkanmakta, ama kurulama zamanı değişmemektedir. Ayrıca çamaşırın fazla olması kurutmayı olumsuz etkilerken yıkamayı etkilememektedir. Çamaşır yıkamanın ve kurulamanın en iyi yolu nedir?
Johnson, en kısa yıkama süresini en başta, en kısa kurutma süresinin de en sonda olacağı bir algoritmanın en iyi çözüm olacağını belirtmektedir. Johnson’un çizelgelemeyi algoritmik olarak ifade etmesi, optimum çizelgeleme hakkında yapılan araştırmaları da artırır. Christian ve Griffiths (2017), Johnson’un çalışmasının iki makinenin çalışma sürelerini en iyileştirmek üzere kurulduğunu gündelik hayatta günlük kararlarımızda ise tek makine gibi davrandığımızı hatırlatmaktadır. Bir diğer deyişle, işlerin belirli yapılma süreleri varsa toplam zamanda bir iyileştirme yapmak söz konusu olmayacaktır. Nasıl bir iyileştirmenin hedeflendiği önemlidir.
İstenen iyileştirme, maksimum gecikmeyi azaltmak olabilir. Bunun için teslim tarihi en erken olan işten başlama stratejisi uygulanabilir. Hizmet sektöründeyseniz, müşterinin teslim tarihi, karşınıza geldiği andan itibaren başlayacağı için geliş sırasına göre bir çizelgeleme yapılması gerekecektir. Her hafta pazara gidip taze meyve alıyorsanız meyvelerin bozulma zamanı, teslim tarihleri olacaktır. En erken bozulacak meyveden başlanabilir. Christian ve Griffiths (2017) bunun en lezzetli ve sağlıklı seçenek olmasa da yiyeceklerin bozulma sürelerini en az indireceğini yazmaktadır.
Teslim tarihinin önemli olduğu işleri bitirmek içinse işlem sırası en kısa olan işi bitirmek daha uygun sonuç verecektir. Örneğin, pazartesi günü başlamanız gereken A (dört gün sürecek) ve B (bir gün sürecek) işleri varsa, B’den başlamak daha uygun bir çözüm olacaktır. Böylece B bir gün (iş teslimi pazartesi öğleden sonra), A da beş gün (iş teslimi cuma öğleden sonra) bekleyeceğinden müşterilerin toplam bekleme süresi altı gün olacaktır. A’dan başlanırsa bu iş perşembe günü biteceğinden A’nın bekleme süresi dört gün, B’ninki ise beş gün olacaktır. Her iki durumda da işler toplam beş günde tamamlanacaktır. Fakat toplam bekleme zamanı dikkate alındığında birinci ve ikinci seçenek arasında üç günlük bir fark vardır.
Önce en kısa olan işleri yapmak işler arasında bir öncelik sıralaması yoksa işe yarayacaktır. B işine başlamak için A’yı tamamlamak gerekiyorsa problem değişecektir ve yeni bir algoritmaya ihtiyaç vardır. Christian ve Griffiths’in (2017) sorunun bununla sınırlı olmadığını ekler. Hayat durağan değildir; A ve B için bir planlama yapıp işe koyulmuşken C işi gelmişse nasıl karar vermemiz gerekir? Hangi durumda yaptığımız işi yarım bırakıp C’ye başlamalıyız yoksa yeni işi göz ardı mı etmeliyiz? Farklı bir algoritma tasarlamak ve uygulamak gerekecektir; bu durumda benzer sorunlarla karşılaştığında “kullanıcıyı yavaşlatmadan ya da gerginlik içine sokmadan mümkün olduğu kadar uzun bir süre göreve devam eden” işletim sistemlerinin çalışma ilkelerinden yararlanılabilir.
***
Christian ve Griffiths’in (2017) kitabında yer alan diğer algoritmalar incelendiğinde zaten insan denen bilgisayarın sezgisel olarak sık sık bunlara başvurduğu; ama elektronik bilgisayarların çalışma ilkelerinden de yeni şeyler öğrenilebileceği ya da günlük kararlarını bu algoritmaları kullanarak iyileştirilebileceği görülmektedir. Christian ve Griffiths’in (2017) algoritma örnekleri, kişisel gelişim kitaplarından çok daha yararlı olabilir!
Algoritmaların doğası ve çalışma mantığı kavrandıktan sonra her bir algoritma karşılaşılan soruna göre olduğu gibi uygulanabilir veya yeni koşullara göre geliştirilebilir. Ancak son yıllarda, hükümetler ve şirketlerin hem gündelik hayata gömülü algoritmalara müdahale edebilme hem de yukarıdan yeni algoritmalar dayatabilme gücüne erişmeye başladığına da dikkat etmek gerekiyor. Algoritmalara dayalı düzenlemeler, kişisel sağlıktan sosyal politikalara kadar her alanda, hızla ve fazla dikkat çekmeden yayılıyor. Sonraki yazılarda özellikle algoritmaya dayalı düzenlemeler üzerinde duracağım.
Kaynaklar:
Barbin, E., Borowczyk, J., Chabert, J. L., Guillemot, M., Michel-Pajus, A., Djebbar, A., &
Christian, B., Griffiths, T. (2017). Hayatımızdaki Algoritmalar, Çev. Ali Atav, Buzdağı Yayınevi.
Erwig, M. (2017). Once Upon an Algorithm: How Stories Explain Computing. MIT Press.
Martzloff, J. C. (2012). A history of algorithms: from the pebble to the microchip. Springer Science & Business Media.
Rainie, L., Anderson, J., & Page, D. (2017). Code-dependent: Pros and cons of the algorithm age. Pew Research Center, 8.
İlk Yorumu Siz Yapın