Algoritma genel anlamda matematiksel işlem olan mantık konusuna ait bir terim olarak tanımlanır. Tam olarak amacı ise yapılan bir işin doğru olarak yapılabilmesi için izlenmesi gereken adım sırasıdır. Aslında insanlar yaptıkları tüm işleri bir algoritma sırası ile mantıklı hale getirir. Eğer yapılan bir işte algoritmik sıra yok veya izlenmiyorsa yapılan işin sonu büyük bir ihtimalle iyi bitmeyecektir. Bundan dolayı eğer bir mühendislik veya matematik dalına ait bir meslek seçmişseniz dolaylı yada dolaysız ilk göreceğiniz konulardan biri de algoritma ve algoritma çeşitleridir.Algoritma nedir? sorusunun tam olarak cevaplanması için belkide bir örneği başvurulması en doğrusudur. Bundan dolayı aşağıdaki örneği incelemek sizin açınızdan önemli olacağını düşünmekteyim.
Bir mühendislik çalışmasında yapılacak ilk işlem işin algoritmasını (işlem sırasını) çıkarmak olacaktır. Bu yüzden matematik mühendisliği gibi meslek gurupları ortaya çıkmıştır. Mühendislikte nasıl uygulandığını anlamak için şu örneği inceleyin.
İşte böyle bir uygulamada ilk önce işlem sırası oluşturulursa makine için gerekli malzemeler, nasıl çalışacağı, nasıl bir yol izlemesi gerekir gibi pek çok sorunu tespit edilir ve doğru işlemleri sırasıyla uygulanabilir. Aksi taktirde makine yapılırken sürekli yeni şeyler eklemek yada çıkarmak durumunda kalınabilir. Hatta bu süreç tüm işin baştan masa üstünde tartışılmasını gerektirebilir. Bu makinenin algoritmasını grafiksel olarak basitçe hazırlayalım.
Yukarıda basit bir algoritma örneği verdikten sonra tekrardan yolumuza devam edelim.Algoritma sistemleri mühendislik alanında en çok yazılımcılar tarafından kullanılır. Eğer bir yazılım uygulamasına algoritma oluşturmadan başlarsanız yaptığınız işlemlerin bir çoğu boşa gidebilir ve saatlerinizi boş boşuna harcamış olursunuz. Artık bu kısımdan sonra algoritma temelleri vealgoritma örnekleri ile devam edeceğiz.
Programlamada Algoritma Temelleri
Eğer bir program geliştirmeye karar verdiyseniz başarılı bir başlangıç ve mutlu bir son için sırayla şu adımları izlemeniz en doğrusu olacaktır.
Değişkenleri Belirleme
Programın akışı için dışarıdan girdi olarak alınacak verilerin tamamını belirlemek gerekir. Bu sayede programın temelleri oluşturulmuş olur. Değişkenler programın çalışmasını etkileyen en temel bileşenlerdir. Bundan dolayı başarılı bir şekilde değişkenleri belirlemek oldukça önemlidir.
Algoritma Oluşturma
Tüm değişkenleri belirledikten sonra yapılması gereken adım tabi ki de onları doğru şekilde sıralamak olmalıdır. Yukarıda zaten algoritmayı uzunca bir şekilde anlattım. Yapılacak olan işlemleri doğru bir şekilde sıralamak algoritma oluşturmak için yeterli olacaktır. Algoritma oluşturulurken basit ve problemi en kısa yoldan çözüme ulaştırması için çalışılmalıdır.
Akış Diyagramı
Yukarıda verdiğim makine örneğinde zaten bir akış diyagramı oluşturmuştum. Akış diyagramı, yapılacak olan işin algoritması çıkarıldıktan sonra şema gurupları ile gösterilmesidir. Oluşturulan akış diyagramı ile karmaşık algoritmalar görselleştirildiği gibi mühendislikle pek ilişkisi olmayan insanlar içinde anlaşılır hale getirilir.
Akış Diyagramı Sembolleri
Akış diagramı oluşturulurken kullanılan sembollerin standart geometrik şekilleri vardır. Bu şekiller yardımı ile işlemler anlaşılabilir. Aşağıda paylaştığım görselde akış diyagramı oluştururken kullanılan sembolleri görebilirsiniz.
Algoritma Örnekleri
Yazı boyunca belli başlı örnek algoritma işlemleri gösterdim. Bu bölümde ise aşağıda paylaştığım örneğin algoritmasını (işlem sırasını) çıkaracağım ve sonrasında akış diyagramını çizerek yapılması planlanan bir programın nasıl hazırlanacağını göstereceğim. Örnek olarak ise daha önceki yazılarımdan birinde anlattığım C# faktöriyel hesaplama programının algoritmasını hazırlayarak yapacağım.
Akış diyagramından önce bir algoritma hazırlamak gerektiğinden yukarıda bahsetmiştim. Bu algoritma sırası hazırlanırken işlemler genellikle A0,A1,A2… gibi yada 1.İşlem, 2.İşlem,3.İşlem… gibi isimlerle sınıflandırılırlar. Ben A0,A1… yapısını genellikle kullanmayı tercih ettiğimden bu yazıda bu şekilde kullanacağım.
Örneğin Algoritma Sırası
Örnek Akış Diyagramı
Akış diyagramının aşağıda çizilmiş resmini görebilirsiniz. Bu çizimi Photoshop, eDraw hatta AutoCad gibi çizim programlarıyla yapabilirsiniz. Eğer çok yetenekli biriyseniz Paint programını bile deneyebilirsiniz
Yada en basitinden bir kağıt ve kalem kullanarak hazırlamayı deneyebilirsiniz.
Algoritma Çeşitleri
Yazının başında belirttiğim gibi son bölümde algoritma çeşitleri hakkında olacak. Gerçek anlamda algoritma çeşitleri aslında her program uygulaması için farklı bir algoritma çeşidi keşfedilebilir. Fakat ihtiyaçlar doğrultusunda geliştirilmiş bazı algoritma çeşitleri vardır ki bunları tekrar tekrar yazmak tam anlamıyla Amerikayı tekrar keşfetme çıkmakla eşdeğerdir.
Algoritma işleri ile en çok uğraşan şirket büyük bir ihtimalle Google diye tahmin ediyorum. Çünkü eğer arama işi benim işim diyorsan algoritma işi de benimdir diyebilmen lazım belkide Google’u bu kadar başarılı kılan faktör de budur. Şuan Google arama motorunda arama faktörünü etkileyen 200 den fazla algoritma olduğu söyleniyor.
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ı
Alfabatik yada 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.