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
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