25 Mayıs 2015 Pazartesi

Algoritma Nedir? Mertcan Gökçe

ALGORİTMA NEDİR ?
Algoritma, matematikte ve bilgisayar biliminde bir işi yapmak için tanımlanan, bir başlangıç durumundan başladığında, açıkça belirlenmiş bir son durumunda sonlanan, sonlu işlemler kümesidir. Yani belli bir problemi çözmek veya belirli bir amaca ulaşmak için çizilen yola algoritma denir. Genellikle programlamada kullanılır ve tüm programlama dillerinin temeli algoritmaya dayanır. Aynı zamanda algoritma tek bir problemi çözecek davranışın, temel işleri yapan komutların veya deyimlerin adım adım ortaya konulmasıdır ve bu adımların sıralamasına dikkat edilmelidir. Bir problem çözülürken algoritmik ve sezgisel (herustic) olmak üzere iki yaklaşım vardır. algoritmik yaklaşımda da çözüm için olası yöntemlerden en uygun olan seçilir ve yapılması gerekenler adım adım ortaya konulur. Algoritmayı belirtmek için ; metinsel olarak düz ifade ve akış diyagramı olmak üzere 2 yöntem kullanılır. Algoritmalar bilgisayarlar tarafından işletilebilirler. Algoritma kelimesi, Özbekistan'ın Harezm, bugünkü Türkmenistan'ın Khiva kentinde doğmuştur.
ALGORİTMA TARİHİ
Yaklaşık M.Ö. 1600 – Babilliler bilinen ilk çarpanlara ayırma ve kök bulma algoritmasını geliştirdiler.
Yaklaşık M.Ö. 300 – Öklid algoritması
Yaklaşık M.Ö. 200 – Eratosthenes Elemesi
263 – Gaussal eleme, LiuHui tarafından tanımlandı.
813 ve 833 yılları arasında Harezmi doğrusal ve ikinci dereceden denklemleri çözmek için bir algoritma geliştirdi. Algoritma ismi bu kişinin adından türetilmiştir
1614 – John Napierlogaritmayi kullanan hesaplamaları yapmak için bir metod geliştirdi
1671 – Newton-Raphson metodu, Isaac Newton tarafindan geliştirildi.
1690 – Newton-Raphsonmethodu bağımsız olarak Joseph Raphson tarafından da bulundu
1805 – Cooley-Tukeyalgoritmasi Carl Friedrich Gauss tarafından biliniyordu
1926 – Boruvka algoritması
1934 – Delaunay üçgen bölümlemesi BorisDelaunay tarafından geliştirildi
1940′lar
1945 – Birleştirmeli sıralama John vonNeumann tarafından geliştirildi
1947 – (Simplex algoritması) basit/tekyönlü algoritma George Dantzig tarafından geliştirildi
1950′ler
1952 – Huffman kodlaması David A. Huffman tarafından geliştirildi
1954 – Radix sıralaması bilgisayar algoritması Harold H. Seward tarafından geliştirildi
1956 – Kruskal algoritması Joseph Kruskal tarafından geliştirildi
1957 – Prim algoritması Robert Prim tarafından geliştirildi
1957 – Bellman-Ford algoritması R. Bellman ve L. R. Ford tarafından geliştirildi
1959 – Dijkstra algoritması EdsgerDijkstra tarafından geliştirildi
1959 – Shell sıralaması D. L. Shell tarafından geliştirildi
1959 – De Casteljau algoritması Paul de Casteljau tarafından geliştirildi
1960′lar
1960 – Hızlı Sıralama C. A. R. Hoare tarafından geliştirildi
1962 – Ford-Fulkerson algoritması L. R. Ford ve D. R. Fulkerson tarafından geliştirildi
1962 – Bresenham doğru algoritması Jack E. Bresenham tarafından geliştirildi
1964 – Öbek-sıralama J. W. J. Williams tarafından geliştirildi
1965 – Cooley-Tukey algoritması James Cooley ve John Tukey tarafından yeniden bulundu
1965 – Levenshtein aralığı ) Vladimir Levenshtein tarafından geliştirildi
1965 – Cocke-Younger-Kasami (CYK) algoritması bağımsız olarak T. Kasami tarafından geliştirildi
1967 – Viterbi algoritması Andrew Viterbi tarafından önerildi
1967 – Cocke-Younger-Kasami (CYK) algoritması bağımsız olarak D. H. Younger tarafından geliştirildi
1968 – A* grafik arama algoritması Peter Hart, NilsNilsson ve BertramRaphael tarafından geliştirildi.
1970′ler
1970 – Knuth-Bendixcompletion algoritması Donald Knuth ve P. B. Bendix tarafından geliştirildi
1972 – Graham taraması Ronald Graham tarafından geliştirildi
1973 – RSA şifreleme algoritması CliffordCocks tarafından geliştirildi
1973 – Jarvismarch algoritması R. A. Jarvis tarafından geliştirildi
1974 – Pollard’ın p-1 algoritması John Pollard tarafından geliştirildi
1975 – Genetik algoritma John Holland tarafından popülerleştirildi
1975 – Pollard’ınro algoritması John Pollard tarafından geliştirildi
1975 – Aho-Corasick algoritması Alfred V. Aho ve Margaret J. Corasick tarafından geliştirildi
1976 – Salamin-Brent algoritması bağımsız olarak EugeneSalamin ve Richard Brent tarafından geliştirildi
1976 – Knuth-Morris-Pratt algoritması Donald Knuth ve VaughanPratt ve bağımsız olarak J. H. Morris tarafından geliştirildi
1977 – Boyer-Moorestring (karakter öbeği) arama algoritması bir harf öbeğinin başka bir harf öbeği içerisinde bulunup bulunmadığını arayan algoritma geliştirildi
1977 – RSA şifreleme algoritması RonRivest, Adi Shamir ve LenAdleman tarafından yeniden bulundu
1977 – LZ77 algoritması Abraham Lempel ve JacobZiv tarafından geliştirildi
1978 – LZ78 algoritması LZ77 algoritmasından Abraham Lempel ve JacobZiv tarafından geliştirildi
1978 – Bruun’un algoritması ikinin katları için G. Bruun tarafından önerildi
1979 – Khachiyan’ınellipsoit metodu LeonidKhachiyan tarafından geliştirildi
1980′ler
1981 – İkinci dereceden eleme metodu Carl Pomerance tarafından geliştirildi
1983 – Simule edilmiş tavlama metodu (Simulatedannealing) S. Kirkpatrick, C. D. Gelatt ve M. P. Vecchi tarafından geliştirildi
1984 – LZW algoritması LZ78′den Terry Welch tarafından geliştirildi
1984 – Karmarkar’ın iç nokta algoritması NarendraKarmarkar tarafından geliştirildi
1985 – Simule edilmiş tavlama metodu (Simulatedannealing) bağımsız olarak V. Cerny tarafından geliştirildi
1986 – Blum BlumShub L. Blum, M. Blum, ve M. Shub önerildi
1988 – Özel sayı alanı elemesi John Pollard tarafından geliştirildi
1990′lar
1990 – Genel sayı alanı elesi Özel sayı alanı elesi yönteminden Carl Pomerance, Joe Buhler, HendrikLenstra, ve LeonardAdleman tarafından geliştirildi
1991 – beklemesizsenkronizasyon Maurice Herlihy tarafından geliştirildi
1992 – Deutsch-Jozsa algoritması D. Deutsch ve R. Jozsa tarafından önerildi
1994 – Shor’un algoritması Peter Shor tarafından geliştirildi
1994 – Burrows-Wheeler dönüşümü Michael Burrows ve David Wheeler tarafından geliştirildi
1996 – Grover’ın algoritması Lov K. Grover tarafından geliştirildi
1996 – RIPEMD-160 HansDobbertin, AntoonBosselaers, ve BartPreneel tarafından geliştirildi
1998 – rsync algoritması Andrew Tridgell tarafından geliştirildi
1999 – Yarrow algoritması Bruce Schneier, John Kelsey, ve NielsFerguson tarafından tasarlandı
2000′ler
2001 – LZMA sıkıştırma algoritması
2002 – AKS öncelik testi primality test ManindraAgrawal, NeerajKayal ve NitinSaxena tarafından geliştirildi

Algoritma Çeşitleri

Arama Algoritmaları
Adında anlaşılacağı üzere dijital sistemlerde arama yapılmak istendiğinde kullanılabilecek algoritma çeşididir. Listeler, şekiller ve metinleri üzerinde arama yapılmasını sağlar. Yaygın olarak kullanılan arama algoritmaları şunlardır; ikili arama algoritması, enine arama algoritması, derin öncelikli arama algoritmalarıdır.
Genetik Algoritmaları
Yapay zeka sistemlerinde sık kullanılan bir algoritma çeşididir. Genetik bilindiği üzere insanın biyolojik yapısını inceleyen bilim dalıdır. Genetik algoritma ismini genetik bilimine benzer bir yapıda çalıştığından dolayı almıştır. Bu algoritma genellikle yer bulma işlemlerinde kullanılır. Çalışma mantığı ise sanal genler oluşturulur. Sonrasında bu genlerin mutasyonu sonucu en kaliteli sonuçlara ulaşılmasını sağlamaktır. Bu konu ile ilgili yapay zeka algoritmaları adlı yazıyı okumanızı tavsiye ederim.

Kriptografik Algoritmalar
Şifreleme amaçlı kullanılan algoritma çeşitleridir. Bu algoritma tipi sayesiyle dosyaların güvenliği sağlanabilir. Temel çalışma yapısı kullanıcı tarafından şifreleme yapılır ve dosya açılmak istendiği zaman oluşturulan şifre bilinmiyorsa içerideki bilgilere ulaşılamaz.
Kök Bulma Algoritmaları
Matematik konusu olan kök işlemleri üzerine çalışan algoritma türüdür. x olarak tanımlı bilinmeyen denklemleri kök bulma algoritma yardımı ile çözebilirsiniz.
Sıralama Algoritmaları
Alfabatikyada sayısal sıralama yapmak için kullanılan algoritma türüdür. Sürekli geliştirilmeye açık bir algoritma türüdür. Sıralama işleminin başarılı ve düzgün bir şekilde yapılması için oldukça önemlidir. Bu işlemi karşılaştırma yaparak yapmaktadır. Yani 1 ile 2 yi büyüklüğe göre sıralayacak olursak 2>1 şeklinde yaparız. Sıralama algoritması bu mantıkla sıralama yapmakta fakat bu kadar basit amaçlar için kullanılmamaktadır.
Diğer Algoritma Çeşitleri
Konunun başında bahsedildiği gibi algoritma çeşitleri 3 veya 4 türe ayrılabilecek kadar basit değildir. Ben algoritma çeşiti olarak burada en sık kullanılanlara biraz değinmeye çalıştım. Fakat hepsini teker teker bir yazı olarak yazılsa anca yeterli gelirdi. Bundan dolayı burada kısa keserek Wikipedia sitesinde yer alan algoritma başlığı altında diğer algoritma türlerini incelemenizi tavsiye ediyorum.

Bu algoritmaların tercih edilmesindeki sebepleri anlamaya çalışıyorsanız kısaca şunu diyebilirim. Yazının hemen başında dediğim gibi algoritma oluşturmanın temel amacı basit ve problemi en kısa yoldan çözmek olduğunu söylemiştim. Yukarıda verdiğim tüm bu algoritma çeşitleri bu işi en iyi şekilde yapabilen algoritmalar olduğu için bu algoritma çeşitleri kullanılmaktadır.

Hiç yorum yok:

Yorum Gönder