BÖLÜM 1 Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK Algoritmaların Hesaplamadaki Rolü Algoritma nedir? Algoritmaları çalışmak neden faydalıdır? Bilgisayarlarda kullanılan diğer teknolojilere göre algoritmaların rolü nedir? Bu bölümde bu soruları cevaplayacağız. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 2 Algoritmalar Algoritma, girdi olarak bir değer ya da değerler kümesi alan ve çıktı olarak bir değer ya da değerler kümesi üreten herhangi bir iyi tanımlanmış işlemsel prosedürdür. Dolayısıyla, algoritma girdiyi çıktıya dönüştüren işlemsel adımlar dizisidir. Algoritma, iyi tanımlanmış işlemsel bir problemi çözmek için bir araçtır. Problemin açıklamaları istenen girdi ve çıktıların genel koşullarını belirler. Örneğin, bir dizi sayının artan sırada sıralanması istenebilir. Bu problemle pratikte çok karşılaşılır ve pek çok tasarım tekniği ile analiz araçlarının geliştirilmesine zengin bir temel oluşturur. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 3 Sıralama problemi Girdi: n adet bir dizi sayı (a1,a2,a3,…,an). Çıktı:giriş dizisinin a1’≤a2’≤a3’≤ … ≤ an’ olacak şekilde permütasyonu (sıralama) (a1’,a2’,a3’,…,an’) Örneğin, (31,41,59,26,41,58) giriş dizisine göre bir sıralama algoritması (26,31,41,41,58,59) çıkış dizisini döndürür. Böyle bir giriş dizisine sıralama probleminin örneği (instance) denir. Sıralama probleminin örneği, problem ifadesindeki tüm kısıtları sağlar. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 4 Algoritma Bir algoritma, eğer tüm giriş örnekleri için doğru çıkışı üretiyorsa doğrudur denir. Doğru bir algoritma verilen işlemsel problemi çözer. Yanlış algoritma tüm giriş örnekleri için doğru çıkışı üretmeyebilir ya da hiç doğru sonuç üretmeyebilir. Beklenilenin aksine, eğer hata oranlarını kontrol edebiliyorsak yanlış algoritmalar da bazen faydalı olabilir. Büyük asal sayıların bulunması: hata oranı kontrol edilebilir bir algoritma (Bölüm 31) Fakat biz doğru algoritmalar ile ilgileniyor olacağız. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 5 Algoritma Bir algoritma Türkçe/İngilizce olarak bir konuşma diliyle Bilgisayar programıyla Donanım tasarımıyla tanımlanabilir. Tek gereksinim, takip edilecek işlemsel prosedürün kesin/hatasız olarak tanımlanmış olmasıdır. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 6 Algoritma Ne tür problemler algoritmalar ile çözülür? Sıralama elbette algoritmaların geliştirildiği tek problem değil. Human Genome Project: İnsan DNA’sındaki 100000 genin tanımlanması İnsan DNA’sını oluşturan 3milyar kimyasal baz çifti dizilerinin belirlenmesi Bu bilginin veritabanında tutulması Veri analizi için araçlar geliştirilmesi Tüm bu adımlar karmaşık algoritmalar gerektiriyor. Bu tür biyolojik problemleri çözmek için kitapta pek çok yöntem var (kapsamımız dışında). Amaç, kaynakları en etkin kullanarak görevlerin üstesinden gelmek. Kazanımlar, zaman (insan ve makine), para, laboratuar tekniklerinden çıkarılacak daha fazla bilgi. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 7 Algoritma İnternet Tüm dünyada insanların çok büyük miktarlarda veriyi edinmelerini ve bu veriye hızlı erişimlerini sağlıyor. Zeki algoritmalar yardımıyla internet siteleri büyük hacimlerdeki veriyi işleyebiliyor ve yönetebiliyor. Örneğin, Verinin izleyeceği en iyi rotanın bulunması Özel bilgilerin yer aldığı sayfaları hızlıca bulan arama motorları Elektronik ticaret Kişisel bilgilerin (kredi kartı numarası, şifre, faturalar) mahremiyeti Sayısal algoritmalar ve sayı teorisi tabanlı teknolojiler Kriptoloji Dijital imza Üretim veya diğer ticari girişimler Kısıtlı kaynakları en etkin şekilde tahsis etmek Bir petrol şirketi, beklenen karını maksimize etmek için tesisini nereye kuracağını bilmek isteyebilir. Bir siyasi aday, seçimi kazanma şansını maksimize edecek kampanya reklamları satın alarak nereye para harcayacağına karar vermek isteyebilir. Bir uçuş firması, her uçuşu kapsayan ve mürettebatla ilgili tüm yasal düzenlemelere uygun olacak şekilde mürettebatı seferlere en az maliyetli olarak atamak isteyebilir. Bir internet servis sağlayıcı, müşterilerine daha etkin bir hizmet sunabilmek için ek kaynaklarını nereye yerleştirmesi gerektiğini bilmek isteyebilir. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 8 Algoritma Tüm bu örnekler lineer programlama (Bölüm 29) ile çözülebilecek problem örnekleridir. Bu problemler (bazıları kapsamımız dışında) ve başka özel problemlerin nasıl çözüleceği anlatılacaktır. Örneğin, Komşu çiftler arasındaki mesafelerin üzerinde işaretli olduğu bir yol haritası olsun. Bir noktadan diğerine giden en kısa rotanın bulunması isteniyor. muhtemel tüm rotalar çok fazla olabilir. En kısa rotayı nasıl seçebiliriz? Burada yol haritası bir graf olarak modellenecek ve grafta bir noktadan diğerine giden en kısa yol bulunacak. Çözümü Bölüm 24’de anlatılacak. İki adet X=(x1,x2,…,xm) ve Y=(y1,y2,…,yn) şeklinde sıralı dizi verilmiş olsun. X ve Y deki ortak en uzun dizinin bulunması isteniyor. X’in alt dizisi, X’den bazı elemanların çıkarıldığında kaln X dizisidir. Örneğin, (A,B,C,D,E,F,G)’nin alt dizisi (B,C,E,G) olabilir. X ve Y’nin en uzun ortak alt dizilerinin uzunluğu iki dizinin birbirine ne kadar benzediğinin bir ölçüsüdür. Örneğin, eğer iki dizi DNA zincirinin baz çiftleri ise ve uzun bir ortak alt dizileri varsa bu dizileri benzer olarak düşünebiliriz. X’in m adet sembolü, Y’nin n adet sembolü varsa X ve Y’nin 2m ve 2n muhtemel alt dizisi vardır. X ve Y’nin muhtemel tüm alt dizilerinin seçimi ve bunların eşleştirilmesi aşırı fazla zaman alabilir, m ve n küçük olmadığı sürece. Bu problemin mümkün olduğunca etkin şekilde çözümü için dinamik programlama olarak bilinen genel bir tekniğin nasıl kullanılacağını Bölüm 15’de göreceğiz. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 9 Algoritma Bölümler kütüphanesi ile ilgili mekanik bir tasarım problemi verilmiş olsun. Öyle ki, her bölümde diğer bölümlerin örnekleri olabilir. Bölümlerin, her bölüm onu kullanan bölümden önce görülecek şekilde listelenmesi isteniyor. Örneğin, kütüphanede bilgisayar mühendisliğine ait kitapların olduğu bölümü düşünelim. Bilgisayar mühendisliği kitaplarının içinde elektrik elektronik kitapları da olabilir. Bu durumda elektrik elektronik kitaplarının bölümü, onu kullanan bilgisayar mühendisliği bölümünün önüne yerleştirilmelidir. Eğer tasarımda n adet bölüm varsa n! Muhtemel sıra vardır. Faktöriyel, üstel fonksiyondan bile daha hızlı artan bir fonksiyon olduğundan muhtemel tüm sıralamaları üretip, bunların belirtilen kısıt bakımından sağlamasının yapılması mümkün değildir (az bölüm olduğu durum hariç). Bu problem, bir topolojik sıralama örneğidir ve bunun etkin çözümü Bölüm 22’de anlatılacaktır. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 10 Algoritma Pek çok ilginç algoritmik problemin ortak iki özelliği: Pek çok aday çözüm var; fakat çok büyük bir kısmı eldeki problemi çözemiyor. Çözebilen, en iyi çözebilen algoritmanın bulunması oldukça zor olabiliyor. Pratik uygulamaları vardır. Bahsedilen problemler içinde en kolay problem en kısa yolun bulunması problemi. Bir ulaşım firması, örneğin bir kamyonculuk ya da bir demiryolu şirketi, bir yol ya da ray ağı üzerindeki en kısa yolu bularak kendine ekonomik kar sağlayabilir. Çünkü daha az işçi ve daha az yakıt kullanılacak. İnternet üzerindeki bir yönlendirme düğümü ağ üzerindeki en kısa yolu bularak mesajı hızlıca yönlendirebilir. Ya da New York’dan Boston’a gitmek isteyen biri web sayfasından uygun sürüş yönlendirmelerini bulmak isteyebilir, ya da sürüşü esnasında GPS kullanabilir. Algoritmalarla çözülen problemlerin hepsinin kolayca tanımlanmış aday sonuç kümeleri yok. Örneğin, bir sinyalin örneklerini gösteren sayısal değerler kümesi verilmiş olsun ve biz bu sinyallerin ayrık Fourier dönüşümlerini yapmak isteyelim. Ayrık Fourier dönüşümü zaman domeninden frekans domenine dönüştürür, örneklenen sinyaldeki değişik frekansların gücüne karar verebileceğimiz bir dizi sayısal katsayı üretir. Sinyal işlemenin kalbi olmasının yanında, ayrık Fourier dönüşümünün veri sıkıştırma ve büyük polinomlarla tamsayıların çarpılmasında da uygulamaları vardır.Bölüm 30’da bu problem için etkili bir çözüm olan hızlı Fourier dönüşümü anlatılacaktır. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 11 Veri Yapıları Veri yapısı: veriye erişim ve üzerinde değişim yapmayı kolaylaştıracak şekilde veriyi depolama ve düzenleme yolu. Tüm amaçlar için iyi çalışacak tek bir veri yapısı yok. Dolayısıyla, veri yapılarının kısıtlarını ve güçlerini bilmek önemli. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 12 Teknik Kendi algoritmalarınızı geliştirebileceğiniz algoritma tasarımı ve analizi yöntemleri, bunların ispatları ve etkinlikleri anlatılacak Farklı bölümlerde algoritmik problem çözümlerinin farklı açıları hedefleniyor. Örneğin, Medyan bulma ve sıra istatistiği Bölüm 9 Minimum yayılım ağaçlarının hesaplanması Bölüm23 Ağdaki maksimum akışın belirlenmesi Bölüm 26 Böl ve yönet Bölüm 4 Dinamik programlama Bölüm 15 … Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 13 Zor problemler Kitabın çoğu etkin algoritmalarla alakalı. Etkinlik ölçütü ise hız. Yani, bir algoritmanın sonucunu üretmesine kadar geçen süre. Fakat öyle problemler var ki etkin çözümü yok. Bölüm 34’de böyle problemlerin bir alt kümesi çalışılmış ve bunlara NP-complete (nondeterministic polynomial time) deniyor. Neden NP-complete problemler ilginç? Öncelikle, NP-complete problemler için etkin bir algoritma şu ana kadar bulunamamış, kimse bu problemler için etkin bir algoritma olamayacağını ispat edememiş. Başka bir deyişle, hiç kimse NP-complete problemler için etkin bir algoritma olup olmadığını bilmiyor. İkincisi, NP-complete problemler kümesinin çok önemli bir özelliği var: eğer herhangi bir NP-complete problem için etkin bir algoritma varsa tüm NPcomplete problemler için bir algoritma var demektir. Üçüncüsü, birçok NP-complete problem etkin algoritmalarını bildiğimiz problemlere benzer, fakat aynı değil. Bilgisayar bilimcilerin kafası karışık: Problem ifadesindeki küçük bir değişim, en iyi bilinen algoritmanın etkinliğinde büyük bir değişime sebep olur? Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 14 Zor problemler Bir örnek: Merkezi bir deposu olan bir dağıtım firması düşünün. Her gün depodaki sevkiyatı kamyona yüklüyor ve ürünleri ilgili adreslere dağıtmak üzere etrafa yolluyor. Günün sonunda her bir kamyon ertesi gün tekrar sevkiyata çıkmak üzere depoya gelmek zorunda. Maliyeti azaltmak için firma, her kamyonu en az yolculuk yaptıracak dağıtım duraklarını seçmek istiyor. Bu problem, çok iyi bilinen traveling-salesman problemidir ve bir NP-complete’dir. Bilinen etkin bir algoritması yoktur. Fakat, bazı varsayımlarla mümkün olan en az mesafeden çok da uzak olmayan toplam mesafeyi veren etkili algoritmalar var. Bölüm 35 böyle “yaklaşım algoritmaları” nı anlatıyor. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 15 Paralellik Güç yoğunluğu saat hızı (clock rate) ile süper lineer orantılı olarak artar ve saat hızı yeterince yüksek olduğunda çipler erime riskiyle karşı karşıya kalır. Dolayısıyla, saniyede daha fazla hesaplama yaptırabilmek için çipler sadece bir tane değil, birkaç işlemci çekirdeği (core) içerecek şekilde tasarlanır. Çok çekirdekli bilgisayarlar ≈ardışık birkaç tek çipli bilgisayar Bir tür “paralel bilgisayar”. Çok çekirdekli bilgisayarlardan en iyi performansı alabilmek için paralelliği akılda tutarak algoritma geliştirilmelidir. Bölüm 27 çok çekirdekliliğin avantajını kullanan “multithreaded” (çok iş parçacıklı) bir algoritma modeli sunuyor. Bu model teorik açıdan avantajlı ve “satranç şampiyonası” programı gibi başarılı birkaç bilgisayar programına da temel teşkil ediyor. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 16 Alıştırma Sıralama gerektiren gerçek dünya örneği? Gerçek dünya ortamında hızdan başka ne gibi etkinlik ölçütleri var? Daha önceden bildiğiniz bir veri yapısı seçip bunun güçlü yanlarını ve kısıtlarını tartışınız. En kısa yol ve traveling-salesman problemleri nasıl benzerler? Nasıl farklılar? Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 17 Teknoloji olarak algoritmalar Bilgisayarların sonsuz hızlı olduğunu ve bilgisayar hafızasının bedava olduğunu varsayalım. Bu durumda algoritmaları çalışmamız için bir sebep var mı? Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 18 Teknoloji olarak algoritmalar Evet. Eğer sonlanan ve doğru cevap üreten bir çözüm istiyorsak algoritmalar çalışılmalı. Eğer bilgisayarlar sonsuz hızlı olsaydı herhangi doğru bir yöntem problemi çözebilirdi. Hemen herkes gerçekleştirdiği uygulamanın iyi bir yazılım mühendisliği çerçevesinde olmasını ister. Yani, iyi tasarlanmış ve dökümantasyonu sağlam uygulamalar geliştirmek ister. Ama çoğu zaman uygulaması en kolay yöntem kullanılır. Elbette bilgisayarlar hızlı olabilir, ama sonsuz hızlı değiller. Hafıza ucuz olabilir, ama bedava değil. Dolayısıyla, hesaplama süresi sınırlı bir kaynak. Hafızada kaplanan alan da. Kaynaklar akıllıca kullanılmalı. Bunun için de algoritmalar zaman ya da alan bakımından etkin olmalı. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 19 Verim (Etkinlik) Aynı problemi çözmek için verimleri önemli ölçüde değişen farklı algoritmalar icat edilmiş. Bu farklılıklar yazılım ya da donanım kaynaklı farklılıklardan çok daha önemli olabilmekte. Örneğin, Bölüm 2’de sıralama için 2 algoritma var. Birincisi insertion sort (yerleştirmeli sıralama) ve n adet elemanın sıralanması c1n2 (c1: n’den bağımsız bir sabit) süre alıyor . Kabaca n2 ile orantılı zaman alıyor. İkincisi merge sort (birleştirerek sıralama) ve c2nlog2n zaman alıyor (c2: n’den bağımsız bir sabit). Çoğu zaman c1< c2 . insertion sort: c1n.n (n’nin bir çarpanı) merge sort: c2n.log2n (log2n’nin bir çarpanı) (dahaküçük) n=1000➩log2n=10, n=1000000➩log2n≈20 Buna rağmen insertion sort küçük giriş boyutu için genelde merge sorta göre daha hızlı çalışıyor. n yeterince büyüdüğünde merge sort’un logn-n avantajı, sabit faktörler arasındaki farkın önüne geçer. c1 c2‘den ne kadar küçük olursa olsun merge sort’un daha hızlı olduğu bir geçiş noktası her zaman vardır. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 20 Örnek: 10.000.000 adet sayı içeren dizi sıralanacak. 10.000.000 çokmuş gibi görünse de sayıların 8 bayt tamsayı olduğu varsayılırsa giriş 80 megabayt yer kaplar ve bu da ucuz bir diz üstü bilgisayarın hafızasının çok çok altındadır. A Bilgisayarı : daha hızlı insertion sort Saniyede 10 milyar komut çalıştırıyor (anormal bir rakam!) Dünyanın en hünerli programcısı insertion sort’u makine diliyle programlıyor ve sonuç kodlar 2n2 komut gerektiriyor (n sayı için) B Bilgisayarı : daha yavaş merge sort Saniyede 10 milyon komut çalıştırıyor (1000 kat yavaş) Ortalama bir programcı yüksek seviyeli bir dil ve verimsiz bir derleyici kullanarak merge sort’u kodluyor ve sonuç kodlar 50nlogn komut alıyor Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 21 Örnek: (Devam) 10 milyon sayının sıralanması için: A Bilgisayarı B Bilgisayarı Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 22 Örnek: (Devam) Run time’ı daha yavaş artan bir algoritma kullanmak, çok zayıf bir derleyicisi olan B bilgisayarını bile A bilgisayarından 17 kat daha hızlı yaptı! 100 milyon sayı sıralanırken merge sort’un avantajı daha da büyüyecek. İnsertion sort: 23 gün Merge sort: <4 saat Problemin boyutu arttıkça merge sort’un avantajı da artacak. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 23 Algoritmalar ve diğer teknolojiler Bahsedilen örnekler, bir bilgisayar donanımı gibi algoritmaları da teknoloji olarak düşünmemiz gerektiğini gösteriyor. Genel sistem performansı seçilen hızlı donanım kadar tercih edilen etkin algoritmalara da bağlı. Diğer bilgisayar teknolojilerinde hızlı ilerlemeler olduğu gibi algoritmalarda da her geçen gün ilerlemeler kaydedilmektedir. Algoritmalar Gelişmiş bilgisayar mimarileri ve üretim teknolojileri Kullanımı kolay, sezgisel, grafik kullanıcı arayüzleri (GUI) Nesneye dayalı sistemler Gömülü Web teknolojileri Kablolu ve kablosuz hızlı haberleşme gibi gelişmiş modern bilgisayar teknolojileri kadar gerçekten önemli mi? Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 24 Algoritmalar ve diğer teknolojiler Cevap: evet! Bazı uygulamalar (basit Web tabanlı uygulamalar) açıkça uygulama katmanında algoritmik içerik gerektirmiyor olsa da pek çoğu gerektiriyor. Örneğin, bir noktadan diğerine nasıl gidileceğine karar veren Web tabanlı bir servis düşünün. Uygulama hızlı bir donanım, GUI, WAN ile belki de nesne yönelimli olarak gerçeklenmeli. Fakat, aynı zamanda rota bulma (belki en kısa mesafe algoritmasını kullanarak), harita gösterimi ve adres ekleme gibi belli başlı operasyonlar için de algoritmalar gerektirebilir. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 25 Algoritmalar ve diğer teknolojiler Dahası, uygulama seviyesinde algoritmik içerik gerektirmeyen uygulamalar bile büyük ölçüde algoritmalara dayanır. Uygulama hızlı bir donanım istiyor mu? Donanım tasarımı algoritmaları kullanır. GUI olacak mı? Herhangi bir GUI tasarımı algoritmalara dayanır.haberleşme olacak mı? Ağdaki yönlendirme çok büyük oranda algoritmalara dayanır. Uygulama makine koduyla değil de bir dil ile mi yazıldı? Daha sonra derleyici (compiler), yorumlayıcı (interpreter) ya da çevirici (assembler) tarafından işlenecek ve buralarda algoritmalar fazlaca kullanılıyor. Modern bilgisayarlarda kullanılan teknolojilerin çoğunun temelinde algoritmalar var. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 26 Algoritmalar ve diğer teknolojiler Ayrıca, giderek artan bilgisayar kapasiteleri ile geçmiş problemlerden daha büyük problemleri de çözmek için kullanabiliriz. Önceki örnekte gördüğümüz gibi insertion sort ve merge sort’u karşılaştırırken, daha büyük problem boyutları algoritmalar arasındaki etkinliği daha da belirginleştiriyor. Sağlam bir algoritmik bilgi ve tekniğe sahip olmak iyi donanımlı bir programcıyı diğerlerinden ayıran özelliklerden biridir. Modern hesaplama teknolojisi ile algoritmalar hakkında çok fazla şey bilmeden bazı işler başarılabilir; fakat algoritmalar konusunda iyi bir geçmişe sahipseniz çok daha fazlasını yapabilirsiniz. Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 27 Alıştırma Uygulama seviyesinde algoritmik içerik gerektiren bir uygulama örneği vererek içerilen algoritmaların işlevini tartışınız. Aynı makine üzerinde insertion sort ve merge sort’un uygulamalarını karşılaştırdığımızı varsayın. n giriş boyutu için, merge sort 64nlgn adım çalışırken insertion sort 8n2 adım çalışıyor. n‘nin hangi değerleri için insertion sort merge sort’u geçer? Aynı makine üzerinde uygulama zamanı (run time) 100n2 olan bir algoritmayı uygulama zamanı 2n olan bir algoritmadan daha hızlı yapacak en küçük n kaçtır? Dr. Öğr. Ü. Zehra KARAPINAR ŞENTÜRK 28