Algoritma Nedir, Ne İşe Yarar?

Algoritma, Matematik, Bilgisayar Bilimi gibi ilgili alanlarda, aktivitenin onu gerçekleştiren kişi için ardışık adımlarla yürütülmesine izin veren, yeniden yazılmış, iyi tanımlanmış, sıralı ve sonlu talimatlar veya kurallar kümesidir.

Algoritma Nedir?

Programlamada Algoritma Nedir?

Bir başlangıç durumu ve bir girdi verildiğinde, birbirini izleyen adımların ardından, son duruma ulaşılır ve çözüm elde edilir.

Tarihi

Algoritma kelimesi, aslen USSR’de bulunan eski Khowarism kentinden olan 9. yüzyıl Arap matematikçisi olan Muḥammad ibn Mūsā al-Khwārizmī‘den gelmektedir. Ünlü matematikçi dört çok basamaklı aritmetik işlem için kuralları formüle etmeyi başardı.

Daha sonra bu formül genel olarak matematiksel görevin çözümüne götüren işlem dizilerini belirlemek için kullanılmaya başlandı.

Zaman geçtikçe, algoritmaları arama ve resmileştirme süreci sadece matematikçiler için görev olmaktan çıkarak farklı algoritma türleri elde edilmeye başlandı.

Böylece, nesnelerin sonraki adımını seçmenin gerekli olduğu şekiller ve pozisyonları içeren dama ve satranç gibi oyunlar için algoritmalar ortaya çıktı.

Bunlar elektrik akımının veya belirli makinenin eylemleridir veya örneğin, metinlerin kullanıldığı sözlükteki kelime için arama algoritmasıdır.

Ancak her durumda, algoritmaların gerçek dünyadaki nesnelerle değil, bunların temsilleri ve soyutlamalarıyla çalıştığı dikkate alınmalıdır. Bu nedenle değişkenler, semboller, kodlamalar onları belirtmek için kullanılır.

Algoritma Özellikleri

Algoritmalar günlük yaşamda birçok kez problemleri çözmek için de kullanılır. Örneğin, cihazı kullanmaya yönelik algoritmaları veya çalışanın işvereninden aldığı talimatları gösteren kullanım kılavuzlarıdır.

Matematikte algoritma kullanıma örnek olarak, iki sayının bölümünü hesaplamak için bölme algoritması, iki pozitif tamsayının en büyük ortak bölenini elde etmek için Öklid algoritması veya doğrusal denklem sistemini çözmek için Gauss yöntemidir.

Genelde, algoritmanın resmi tanımı konusunda kesin fikir birliği yoktur. Pek çok yazar bunlardan soyut problemi çözmek için talimat listelerinde, yani problemin verilerini çözüme dönüştüren sınırlı adım sayısı olarak adlandırır.

Ancak, bazı algoritma türleri belirli bir problemi bitirmesi veya çözmesi gerekmediği unutulmamalıdır. Örneğin, Eratosthenes eleğinin asal sayıları hesaplamayı asla bitirmeyen değiştirilmiş versiyonu hala algoritmadır.

Tarih boyunca, birçok yazar algoritmaların yanı sıra Turing makineleri gibi matematiksel modelleri kullanarak tanımlamaya çalıştı.

Bununla birlikte, bu modeller sayılar, semboller veya grafikler gibi belirli veri türüne tabidir. Ancak genel olarak algoritmalar büyük miktarda veri yapısı üzerinde çalışır.

Genelde, algoritma, paralel algoritmaları dikkate almadığımız sürece, tüm tanımlardaki ortak kısım üçe ayrılabilir.

1. Sequential Time/Sıralı Zaman

Bir algoritma ayrıklaştırılmış zamanda adım adım çalışır, böylece her geçerli giriş için dizi hesaplama durumu tanımlar.

2. Abstract State/Soyut Durum

Her hesaplama durumu, bir birinci dereceden yapı kullanılarak tanımlanabilir ve her algoritma, uygulamasından bağımsızdır. Böylece algoritmada birinci dereceden yapılar, izomorfizm altında değişmezdir.

3. Bounded State/Sınırlı Durum

Bir durumdan diğerine geçiş tamamen sabit ve sonlu tanımla belirlenir. Kısacası, her durum ile sonraki arasında, mevcut durumun yalnızca sabit ve sınırlı sayıda terimi hesaba katılabilir.

Kısacası, algoritma, adım adım çalışan, her adımın belirli bilgisayara atıfta bulunmadan açık şekilde tanımlanabildiği ve ayrıca adımda okunabilen/yazılabilen veri miktarı için sabit limiti olan çözüm yöntemidir.

Bu geniş tanım, hem pratik algoritmaları hem de yalnızca teoride işe yarayanları kapsayabilir. Örneğin, Newton yöntemi ve Gauss-Jordan eleme çalışması, en azından prensipte sonsuz şekilde çalışır. Ancak bilgisayarda sonsuz işlem programlamak mümkün değildir.

Özellikle, hesaplanabilir her fonksiyonun Turing makinesinde programlanabileceğini doğrulamak için kullanılabilecek dördüncü özellikte Aritmetize düşünülebilir. İlk adımda yalnızca işlenemeyen hesaplanabilir işlemler mevcuttur.

Algoritma Araçları

Algoritma, doğal dil, pseudocode (sahte kod), akış şemaları ve programlama dilleri dahil olmak üzere birçok şekilde yapılabilir.

Dil açıklamaları belirsiz ve uzun olma eğilimindedir. Ancak pseudocode ve akış şemaları kullanmak, birçok dil belirsizliğini ortadan kaldırır.

Bu ifadeler, algoritmaları temsil etmenin daha yapısal yollarıdır. Ancak, belirli programlama dilinden bağımsız kalırlar.

Algoritma açıklaması genellikle üst düzey ifade, şekilsel ve uygulama olarak yapılır.

Üst düzey açıklamada, problem kurulur, matematiksel bir model seçilir ve algoritma sözlü olarak resimlerle ve ayrıntılarla açıklanır. Bir elemanın maksimumdan büyük olması durumunda, değeri maksimuma atanır.

Maksimum elemanı bulmak için, birinci elemanın değeri maksimum olduğu varsayılır. Daha sonra her değer, o ana kadar bulunan maksimum sayının değeriyle karşılaştırılır.

Şekilsel ifade de pseudocode, çözümü bulan adımların sırasını tanımlamak için kullanılır.

Uygulama yönteminde ise, belirli programlama dilinde ifade edilen algoritma veya komutları gerçekleştirebilen bazı nesneler gösterilir. Algoritmanın doğru olduğunu, karmaşıklık analizini veya her ikisini de gösteren teori de dahil etmek mümkündür.

Algoritma Diyagramları

Flowchart/Akış Şeması

Akış çizelgeleri, algoritmaların grafik açıklamalarıdır. Bunlar talimatların sırasını belirtmek için oklarla bağlantılı sembolleri kullanırlar ve ISO tarafından yönetilirler.

Küçük algoritmaları ifade etmede kullanılırlar. Çünkü çok yer kaplarlar ve oluşturmaları biraz zordur.

Okuma kolaylıkları nedeniyle, algoritmalara giriş, dilin açıklaması ve bilgi işlem dışındaki kişilere süreçlerin açıklamasında kullanılırlar.

Structured Rectangular Diagrams/Yapısal Dikdörtgen Diyagramlar

Akış diyagramlarının zorluklarından biri, çözümün soruna yönelik akışını grafiksel olarak gösterme olasılığını sağlamasıdır.

Düzensiz programcının akış oklarını yanlış yerleştirmesi ve sonunda fikrin kendisinden daha karmaşık duruma yol açabilir. Diğer durumda, sorunun çözümünü tanılamada grafik araçları kullanmaya izin verir.

Tüm algoritmayı dikdörtgen çerçevesinde temsil etmeye dayanır ve önceki teknikten farklı olarak, temelde programlama mantığının temel yapılarının her birine karşılık gelen üç sembolün kullanımıyla devam eder.

Pseudocode/Sahte Kod

Sahte kod, programlama diline benzeyen ancak bazı dil kurallarına sahip yöntemdir. Akış şemalarına göre birçok avantajı olduğu için özellikle karmaşık talimatları temsil eder. Ancak, olası standarda tabi değildir.

Pseudocode, hesaplama algoritmalarına yönelik bu tekniğin eylemlerini temsil etmek için kelime dağarcığını oluşturan grup anahtar kelimeye ve sembole sahiptir.

Bu tekniği kullanarak akış şeması çizmek için aşağıdaki kurallara uyulmalıdır:

1. İlk Adım

Kelime algoritması yazılır ve boşluktan sonra algoritmanın adını yazılır. Böylece ifade edilen duruma gönderme yapılır.

Kodu X olarak adlandırırsak, amacının çok açık olması mümkün olmayabilir. Ancak Değişken adını verirsek, amacının değişken olduğunu daha kolay hayırlayabiliriz.

2. İkinci Adım

Algoritma yapısının tüm gövdesi, sahte kodun nerede başladığını ve nerede bittiğini gösterecek şekilde Başlangıç ve Bitiş sözcükleri arasına alınmalıdır.

3. Üçüncü Adım

Başla kelimesini yerleştirdikten sonra, yapılacak işin durumu ifade etmemiz gerekir.

4. Dördüncü Adım

Son adımda ise, yapılacak iş bildirildikten sonra eylemler yazılır.

Formal/Biçimsel

Otomata teorisi & yinelemeli fonksiyonlar teorisi, algoritma kavramını resmileştiren matematiksel modeller sağlar. En yaygın modeller Turing makinesi, kayıt makinesi & μ – özyinelemeli fonksiyonlardır.

Bu modeller bir makine dili kadar kesindir. Konuşma dili ifadeleri veya belirsizliği yoktur. Ancak bilgisayardan ya da uygulamadan bağımsızdırlar.

Implementation/Uygulama

Birçok algoritma, programda uygulanmak üzere tasarlanmıştır. Bununla birlikte, algoritmalar, sinir ağı, elektrik devresi veya mekanik & elektrikli cihaz gibi başka ortamlarda da uygulanabilir.

Hatta bazı algoritmalar kalem & kağıt kullanılarak uygulanmak üzere özel olarak tasarlanmıştır.

Geleneksel çarpma algoritması, Euclid’in algoritması, Eratosthenes’in eleği & karekökü çözmenin birçok yolu sadece birkaç örnektir.

Fonksiyonel Algoritma Türleri

Hamilton döngüsü problemini çözen algoritmanın şemasıdır. Pproblemin (giriş) verilerini çözümün (çıktı) verilerine dönüştüren işlev olarak düşünülebilir.

Ayrıca, verilerin kendisi bit dizileri ayrıca genel olarak herhangi simgenin dizileri olarak temsil edilebilir. Her bit dizisi doğal sayıyı temsil ettiğinden, algoritmalar hesaplanabilen doğal sayıların işlevleridir.

Her akış şeması, her doğal sayının problemin veya çözümün kodlaması olduğu işlevi hesaplar. Örneğin sonsuz döngüye girdiklerinde asla sona ermeyebilirler.

Böyle bir durumda, hiçbir zaman çıktı değeri döndürmez. Dahası fonksiyonun o girdi değeri için tanımsız olduğunu söyleyebiliriz.

Bu nedenle, algoritmalar kısmi işlevler olarak kabul edilir. Yani tüm tanım alanlarında tanımlanması gerekmez.

Fonksiyon algoritmik yöntemlerle hesaplanabildiğinde, kapladığı bellek miktarı veya aldığı süre ne olursa olsun, fonksiyonun hesaplanabilir olduğu söylenir. Veri dizileri arasındaki tüm işlevler hesaplanamaz.

Analiz

Bir algoritmanın verimliliğinin ölçüsü olarak, sistem tarafından tüketilen kaynaklar incelenir. Girdi değerlerinin büyüklüğünün bir fonksiyonu olarak zamanın ve hafıza harcamasının evrimini bir şekilde gösteren değerleri tanımlamak için algoritma analizi geliştirilmiştir.

Algoritmaların analizi & incelenmesi bilgisayar biliminin disiplinidir. Çoğu durumda, çalışmasında programlama dili veya başka uygulama kullanmadan tamamen soyuttur.

Dolayısıyla bu anlamda matematik disiplinlerinin özelliklerini paylaşmaktadır. Bu nedenle, algoritmaların analizi, belirli bir uygulamaya değil, algoritmanın temel ilkelerine odaklanır.

Algoritmayı oluşturmanın bir yolu, onu sahte kodda yazmak veya kodları programcının dilinde olabilen Lexicon gibi çok basit dil kullanmaktır.

Bazı yazılım veya yazılımcılar, algoritmanın tanımını bir noktada sona ermesi gereken prosedürlerle sınırlandırırken, diğerleri, sonsuza kadar çalışabilen bazı fiziksel aygıtların var olduğunu varsayarak, sonsuza kadar durmadan yürütülebilecek prosedürleri değerlendirir.

İkinci durumda, algoritmanın başarılı  şekilde tamamlanması, tatmin edici çıktıyla sona erdirilmesi olarak tanımlanamaz.

Ancak başarı, algoritmanın çalıştırılmasının bir ömrü boyunca verilen çıktı dizilerinin fonksiyonu olarak tanımlanacaktır.

Örneğin, sonsuz ikili dizide birden fazla sıfır olduğunu doğrulayan akış şeması, kullanışlı değer döndürebilmesi için her zaman yürütülmelidir. Doğru uygulanırsa, sistem tarafından döndürülen değer, sonraki ikili rakamı değerlendirene kadar geçerli olacaktır.

Bu algoritmanın çıktısı, dizide birden fazla sıfır varsa, yalnızca pozitif değerlerin geri dönüşü olarak tanımlanır. Başka durumda, pozitif ya da negatif sinyallerin karışımını döndürür.

Algoritma Türleri & Sınıflandırması

  • Greedy/Aç Gözlü

Çözüm bulana kadar en umut verici unsurlar uygulanır. Ancak çoğu durumda çözüm optimal değildir.

  • Parallel/Paralel

Birden çok işlemcide aynı anda çalıştırılabilmeleri için problemin alt problemlere bölünmesine izin verirler.

  • Probabilistic/Olasılık

Bu tür algoritmadaki bazı adımlar sözde rasgele değerlere dayanmaktadır.

  • Deterministic/Belirleyici

Bu yöntemin davranışı doğrusaldır. Her adımında yalnızca ardıl & öncül adım vardır.

  • Non-Deterministic/Belirleyici Olmayan

Algoritmanın davranışı ağaç şeklindedir. Böylece her adımı, hemen ardından gelen sayıda adıma dallanabilir. Fakat tüm dallar aynı anda yürütülür.

  • Divide and Conquer/Böl & Yönet

Problemi ayrı alt gruplara bölerler, her biri için çözüm bulurlar. Daha sonra ise onları birleştirirler, böylece sorunun tamamını çözerler.

  • Metaheuristics/Sezgisel

Problemlerin önceki bilgilerine dayalı olarak problemlere yaklaşık optimal olmayan çözümler bulma yöntemine dayanır.

  • Dynamic Scheduling/Dinamik Planlama

Mekansal maliyeti artırarak, hesaplama maliyetini düşürerek sorunları çözmeye çalışır.

  • Branching and Dimensioning/Dallanma & Boyutlandırma

En iyi çözümleri bularak kontrollü şekilde geçilen örtük ağaç vasıtasıyla soruna çözüm üretilmesine dayanır.

  • Backtracking/Geri İzleme

Problemin çözüm alanı, en ucuz çözümleri depolayan, tamamen incelenen ağaçta inşa etme yöntemine dayanır.

Add a Comment

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir