Algoritma

Algoritma
Yazıyı beğendiyseniz lütfen Paylaşın

Ebu Abdullah Muhammed İbn Musa el Harezmi isimli 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 (adımlar) kümesidir. Algoritmalar bilgisayarlar tarafından işletilebilirler. Algoritma kelimesi, İranlı matematikçinin adından gelir. Batılılar, el Harezmi (Al-Khwārizmī, Latincede Algoritmi) sözcüğünü telafuz edemedikleri için terim bu şekilde kalmıştır.

Tanımı

Algoritmaları daha kolay anlatabilmek için akış şemaları kullanılır.

Belli bir durumdan başlayarak sonlu sayıda adımda belli bir sonucu elde etmenin yöntemini tarif eden iyi tanımlanmış (well-defined) kurallar kümesine algoritma denir. Dolayısıyla algoritma, bir sonucun bulunmasını kolaylaştıran ama deneme-yanılma ve sezgisel çözümlemeye karşıt olan bir yöntemdir. Algoritmalar özel durumlara çözüm sunmazlar. Genel çözümlerin işlem basamaklarını içerirler. Bir algoritmanın çalışmasındaki mutlak zorunluluk; her türl belirsizlikten arınmış olmasıdır. Bir algoritmanın yürütülmesi, her biri bir komutla belirlenen bir etiketler dizisi oluşturur ve bu dizi, önceki komutun yürütülmesinin sona ermesiyle birlikte yürütülmeye başlar. Algoritmanın temel yapısı olan, zaman içindeki bu sıralılık, süreçli programlamada temel bir varsayımdır.
Genel olarak algoritmanın aşağıdaki özellikleri ele alınmaktadır:

  • Genellik
  • Kesin sıralılık
  • Sırayı belirleyen kumanda yapısı
  • Sonluluk ve neticelik

Algoritmanın en basit örneği bir yemek tarifidir; ayran yapmak için:

  • Yoğurdu bir kaba koy.
  • Karıştır.
  • Aynı miktarda su ilave et.
  • Biraz tuz ekle.
  • Tekrar karıştır.

Sonucu bir matematik problemin çözümü olan başka bir basit örnek de Öklid’in ortak bölenlerin en büyüğünü bulan algoritmasıdır.

Kod:
 giriş: iki sayı m,n
 1. eğer n = 0 ise, sonuç m dir
 2. m'nin yerine n koy, n nin yerine m%n koy, tekrar 1'den başla.

Bu örnekte m % n bölmenin kalanıdır, yani 5%2 = 1’deki gibi. Algoritmayı 33 ve 15’e uygulayalım:

Kod:
33,15
15,3
3,0
sonuç 3


Bir de bilgisayar algoritmasına örnek verelim. Kullanıcının girdiği dört sayının ortalamasını görüntüleyen algoritmayı yazalım:

Kod:
A0 --> Başla
A1 --> Sayaç=0 (Sayaç'ın ilk sayısı 0 olarak başlar.)
A2 --> Sayı=? : TßT+Sayı (Sayıyı giriniz. T'ye sayıyı ekle ve T'yi göster.)
A3 --> Sayaç= Sayaç+1 (Sayaç'a bir ekle ve sayaci göster.)
A4 --> Sayaç < 4 ise A2'ye git. (Eğer sayaç 4'ten küçükse Adım 2'ye git.)
A5 --> O=T/4 (Ortalama için T değerini 4'e böl.)
A6 --> O'yu göster. (Ortalamayı göster.)
A7 --> Dur



Tarihi
 
Algoritma sözcüğü Ebu Abdullah Muhammed İbn Musa el Harezmi adındaki İran’lı alimden kaynaklanır. Bu alim 9. yüzyılda cebir alanindaki algoritmik çalışmalarını kitaba dökerek matematiğe çok büyük bir katkı sağlamıştır. “Hisab el-cebir ve el-mukabala (حساب الجبر و المقابلة)” kitabı dünyanın ilk cebir kitabı ve aynı zamanda ilk algoritma koleksiyonunu oluşturur. Latince çevirisi Avrupa’da çok ilgi görür – alimin ismini telaffuz edemeyen Avrupalılar “algorizm” sözcüğünü “Arap sayıları kullanarak aritmetik problemler çözme kuralları” manasında kullanırlar. Bu sözcük daha sonra “algoritma”ya dönüşür ve genel kapsamda kullanılır.


Önemli algoritma türleri

  • Arama algoritmaları
  • Bellek yönetimi algoritmaları
  • Bilgisayar grafiği algoritmaları
  • Birleşimsel algoritmalar
  • Çizge algoritmaları
  • Evrimsel algoritmalar
  • Genetik algoritmalar
  • Kripto algoritmaları veya kriptografik algoritmalar
  • Kök bulma algoritmaları
  • Optimizasyon algoritmaları
  • Sıralama algoritmaları
  • Veri sıkıştırma algoritmaları

Algoritmaların Tarihsel Sıralaması

Aşağıdaki tarihsel sıralama genel olarak algoritmaların ilk kökenlerinden başlayarak gelişimlerini ana hatlarıyla gösterir.

1940 Öncesi

  • Yaklaşık MÖ 1600 – Babilliler bilinen ilk çarpanlara ayırma ve kök bulma algoritmasını geliştirdiler.
  • Yaklaşık  300 – Öklid algoritması
  • Yaklaşık  200 – Eratosthenes Elemesi
  • 263 – Gaussal eleme, Liu Hui 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 Napier logaritmayi kullanan hesaplamaları yapmak için bir metod geliştirdi.
  • 1671 – Newton-Raphson metodu, Isaac Newton tarafindan geliştirildi.
  • 1690 – Newton-Raphson methodu bağımsız olarak Joseph Raphson tarafından da bulundu.
  • 1805 – Cooley-Tukey algoritmasi Carl Friedrich Gauss tarafından biliniyordu.
  • 1926 – Boruvka algoritması
  • 1934 – Delaunay üçgen bölümlemesi Boris Delaunay tarafından geliştirildi.

1940’lar

  • 1945 – Birleştirmeli sıralama John von Neumann 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ı Edsger Dijkstra 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, Nils Nilsson ve Bertram Raphael tarafından geliştirildi.

1970’ler

  • 1970 – Knuth-Bendix completion algoritması Donald Knuth ve P. B. Bendix tarafından geliştirildi.
  • 1972 – Graham taraması Ronald Graham tarafından geliştirildi.
  • 1973 – RSA şifreleme algoritması Clifford Cocks tarafından geliştirildi.
  • 1973 – Jarvis march 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’ın ro 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 Eugene Salamin ve Richard Brent tarafından geliştirildi.
  • 1976 – Knuth-Morris-Pratt algoritması Donald Knuth ve Vaughan Pratt ve bağımsız olarak J. H. Morris tarafından geliştirildi.
  • 1977 – Boyer-Moore string (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ı Ron Rivest, Adi Shamir ve Len Adleman tarafından yeniden bulundu.
  • 1977 – LZ77 algoritması Abraham Lempel ve Jacob Ziv tarafından geliştirildi
  • 1978 – LZ78 algoritması LZ77 algoritmasından Abraham Lempel ve Jacob Ziv tarafından geliştirildi.
  • 1978 – Bruun’un algoritması ikinin katları için G. Bruun tarafından önerildi.
  • 1979 – Khachiyan’ın ellipsoit metodu Leonid Khachiyan tarafından geliştirildi.

1980’ler

  • 1981 – İkinci dereceden eleme metodu Carl Pomerance tarafından geliştirildi.
  • 1983 – Simule edilmiş tavlama metodu (Simulated annealing) 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ı Narendra Karmarkar tarafından geliştirildi.
  • 1985 – Simule edilmiş tavlama metodu (Simulated annealing) bağımsız olarak V. Cerny tarafından geliştirildi.
  • 1986 – Blum Blum Shub 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, Hendrik Lenstra, ve Leonard Adleman tarafından geliştirildi.
  • 1991 – beklemesiz senkronizasyon 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 Hans Dobbertin, Antoon Bosselaers, ve Bart Preneel tarafından geliştirildi.
  • 1998 – rsync algoritması Andrew Tridgell tarafından geliştirildi.
  • 1999 – Yarrow algoritması Bruce Schneier, John Kelsey, ve Niels Ferguson tarafından tasarlandı.

2000’ler

  • 2001 – LZMA sıkıştırma algoritması.
  • 2002 – AKS öncelik testi primality test Manindra Agrawal, Neeraj Kayal ve Nitin Saxena tarafından geliştirildi.
admin

admin

Talebemektebi bir sevdanın hikayesi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Translate »