Programlamaya Giriş: Algoritma Nedir?
Algoritma Kavramı | Algoritma Çeşitleri | Algoritmanın Kullanım Alanları |
---|---|---|
Bir problemin çözümü için belirlenen yol ve adımların bütünüdür. | Veri yapısına bağlı algoritmalar, Geometrik algoritmalar, Sayısal algoritmalar | Bilgisayar bilimleri |
Belirli bir başlangıcı ve sonu vardır. | Arama ve sıralama algoritmaları, Matematiksel algoritmalar | Matematik |
Bir sorunu çözüme ulaştırmak ya da belirlenen bir amaca ulaşmak için tasarlanır. | Tekrarlı deneme algoritmaları, Optimizasyon algoritmaları | Fizik |
Çözüm için uygulanacak işlemler açıkça belirtilir. | Deterministik ve olasılıksal algoritmalar | Biyo Bilimler |
Algoritma, her türlü bilgi işlemi için temel araçtır. | Türkçe Bulmaca Algoritmaları, Oyun Algoritmaları | Oyun Geliştirme |
Algoritma, sorunları çözmek için mantıklı adımlardan oluşan yolun takip edilmesidir. | Böl ve Hükmet Algoritmaları, Heuristikler, Genetik Algoritmalar | Yapay Zeka |
Belirli bir düzenin oluşabilmesi için sakıncası yoktur. | Öğretici Algoritmalar, Takip Edici Algoritmalar | Eğitim Teknolojileri |
Algoritmanın uygulanacağı aşamalar belirli bir amaca uygun şekilde tasarlanır. | Kabul Edilebilirlik Algoritmaları, Yürütme Algoritmaları | Sanal Gerçeklik |
Aynı sorunun çözümü için farklı algoritmalar çizilebilir. | İşlem Sırası Algoritmaları, Nesne Yönelimli Algoritmalar | Yazılım Mühendisliği |
Hem problemi analiz etmek hem de çözmek için kullanılan bir araçtır. | Date Science Algoritmaları, Makine Öğrenmesi Algoritmaları | Data Science |
Algoritma, matematik ve kodlama alanlarında kullanılsa da hayatın içerisinde de sıklıkla karşılaşılan bir kavramdır. Günlük hayatta farkında olmadan sürekli algoritmalar oluşturulur ve sorunların çözümü için kullanılır. Çünkü sorunları çözmek veya hedeflere ulaşabilmek için uygun yollar planlanarak adım adım aşamalar takip edilir.
İnsanlar hayatları boyunca pek çok sorunla karşılaşabilmektedir. Karşılaşılan sorunların boyutları, nedenleri ve etkileri birbirinden farklı olabilmektedir. Farklı nedenlere bağlı olarak ortaya çıkan sorunların çözülebilmesi ve bir sonuca ulaşılabilmesi için o sorunun çözümüne uygun aşamalardan oluşan planlamalar yapılması gerekir.
Bir sorunu çözebilmek veya hedeflenen sonuca oluşabilmek için tasarlanan ve takip edilen bu yola algoritma denir. Belirlenen bu yolun bir başlangıcı ve sonu olmalıdır. Başlangıç ve son arasında oluşan yapı, bir işlemler topluluğunu oluşturur. En mantıklı çözüme ulaşmak için yollar belirlenerek belirli sıralamalar takip edilir. Böylece algoritma oluşturulur.
Matematik, coğrafya ve gökbilim gibi alanlarda çalışmalar gerçekleştirmiş olan Fars kökenli bilim insanı El-Harezmi, “Hisab-el Cebir ve El Mukabala” isimli eserinde ilk algoritmayı oluşturmuştur. El-Harezmi’den sonra matematik ve bilgisayar bilimlerinde de kullanılmaya devam edilmiştir.
Algoritmalar en sık bilgisayar bilimlerinde kullanılır, ancak aynı zamanda matematik ve fizik gibi diğer alanlarda da kullanılır. Bilgisayar biliminde, mantıksal adımlar ve/veya tekrarlayan hesaplamalar gerektiren çeşitli görevleri gerçekleştirmek için kullanılır. Örnek: Sayıları sıralama
Algoritma Ne Demek?
Algoritma kelime anlamı olarak çözüme ulaşmak için tasarlanan yol anlamına gelir. Tasarlanan bu yol, belirli bir problemi çözüme ulaştırmak ya da belirlenen bir amaca ulaşabilmek için kullanılır. Bir problem ele alındığında onu çözmek için uygulanacak aşamalar, belirlenen amaca ulaşabilecek şekilde tasarlanır.
Bu aşamaların her biri çözüme katkı sunacak bir biçimde adım adım uygulanır. Sonunda istenen sonuca ulaşmayı sağlar. Algoritma aşamalarının bir başlangıcı ve sonu mutlaka bulunur. Bu aşamalarda yapılacak işlemler açık bir biçimde belirtilir. Bu özelliklerinden dolayı sonlu işlemler kümesi olarak tanımlanmaktadır.
Algoritma üç bölümden oluşmaktadır. Giriş kısmı, problemin çözümü için uygulanacak basamakların başlangıcını ifade eder. Sonraki kısım, çözüm için uygulanacak işlemlerin döngüye sokularak sonucun elde edildiği kısımdır. En son kısım ise döngüler aracılığıyla elde edilen sonuçların değerlendirildiği kısımdır. Algoritmanın kısımlardan oluşan bu yapısı akış diyagramları ile anlaşılır bir bütünlük içerisinde ifade edilebilir.
Algoritma hayatımızda belirli bir düzen oluşturabilmek için gereklidir. Sorunlarla karşılaşıldığında tasarlanmış çözüm yollarının uygulanması hayatı kolaylaştırmaktadır. Bu nedenle insanların çoğu, farkında olarak ya da olmayarak, iş hayatlarında, eğitim hayatlarında ve günlük hayatlarında algoritmadan faydalanmaktadır. Gelişmelerle birlikte pek çok farklı alanın iç içe geçmesi, çalışılan işlerin aynı anda farklı etkinlikler gerektirmesi bir karmaşa yaratabilir.
Bir düzen oluşturarak ve belirli öncelik sıralamaları yaparak çalışmak, bu karmaşa içerisinden çıkabilmek için gereklidir. İşleri kolaylaştırmak ve karmaşayı önlemek için algoritma geliştirmek en çok başvurulan yöntemdir. En basit örnekle, bir yemeğin yapılışı bile belirli basamakları takip ederek gerçekleştirilir. Bu süreç içinde insanlar farkında olmasa da bir algoritma yürütmektedir.
Bir algoritma oluşturmak, herkesin bildiği gibi zor bir problemdir. Bunu zorlaştıran birkaç şey var: Birincisi, algoritmaların tüm modern bilim ve kültürün tam kalbinde yattığı gerçeği var. Bu yüzden algoritma oluşturmak sadece bir anlambilim alıştırması değil; gerçek pratik sonuçları vardır. İkincisi, "algoritma" için bir tanım üzerinde anlaşabilsek bile, o zaman bu kategoriye neyin dahil edilip neyin hariç tutulacağını bulmak gibi ek bir görevle karşı karşıya kalırız. Hesaplama ve bilgi gibi şeyler hakkında üzerinde düşünülmesi gereken bir görev.
Burada ikinci sorunu görmezden geleceğiz ve ilk soruya odaklanacağız: Algoritma nedir? Yukarıda önerilen bu sorunun cevaplarının hepsinin ortak bir yanı var. Hepsi, bir prosedür veya sürecin etkili, sistematik, mekanik, öznellikten bağımsız olmasının ne anlama geldiğini tanımlama girişimleri olarak tanımlanabilir. Kısacası, algoritmik faaliyetleri (veya "algoritmaları") diğer faaliyet biçimlerinden (veya "algoritma olmayanlardan") ayıran nitelikleri yakalamaya çalışırlar.
"Etkili" terimi literatürde birkaç farklı şekilde kullanılmaktadır. En genel anlamıyla, etkili olmak, bir algoritmanın istenen bir amaca (ulaşamamanın aksine) ulaşmasını sağlayan herhangi bir temel yönüne (yönlerine) atıfta bulunur. Örneğin, Knuth'un öncelik sırasını icadı, bir algoritmanın (bir anlamda) en etkili olduğu gözleminden kaynaklanmaktadır. Tabi eğer mevcut kaynaklardan yararlanıyorsa.
Daha spesifik bir anlamda, etkili olmak, optimalliğe ulaşmadaki etkinliği ifade eder, yani aynı görev için alternatif algoritmalarla karşılaştırıldığında, diğer algoritmalardan daha hızlı daha iyi sonuçlar üretecektir. Bu tür bir etkinlik, çeşitli şekillerde verimlilik ve optimallik ile ilgilidir. Örneğin, önemli olabilecek bir kaynak zamandır. Verimli bir algoritmanın, bir problemi çözmek için rakip algoritmalara göre mümkün olduğunca az zaman kaybetmesini beklerdik.
Bu nedenlerle ve etkililik, algoritmaların temel bir özelliği olduğundan, algoritmaların tüm tanımları veya karakterizasyonları tipik olarak etkililiğe bir miktar referans verir. Algoritmaların bu anlamda etkili olmasını istemeseydik, iyi algoritmalarla kötüleri nasıl ayırt edeceğimiz (veya böyle bir ayrım olsa bile) net olmayacaktı. John von Neumann'ın 1945'teki klasik örneğini almak gerekirse: Bir kum yığınının Everest Dağı'ndan daha uzun olup olmadığını nasıl anlarsınız? O yığındaki her bir tanenin yüksekliğini bir cetvelle ölçebilirsiniz… Ölçebilirsiniz ama bir kum tanesini ölçebilecek kadar hassas bir cihazınız olursa... Bu gibi durumlarda, ölçümü yapmak için ek verilere ihtiyacınız vardır. Algoritmanızın bir kum yığınının yüksekliğini Everest Dağı ile karşılaştırmasını istiyorsanız, algoritmanızın bir anlamda etkili olması gerekir.
Böylece bir algoritmanın ne olduğuyla ilgili sorumuzu etkili olmasını isteyerek çözebiliriz. Tabii ki bu çok bilgilendirici değil ama en azından bize devam etmek için somut ve ölçülebilir bir şey verir. Hatta belki de etkililiğin bir "algoritma" olmak için gerekli olduğu konusunda hemfikir olabiliriz.
Yine de, belirli bir açıdan daha etkili olmasa bile (veya daha az etkili olsa bile) bir algoritmayı diğerine tercih edebileceğimiz bazı durumlar da vardır. Örneğin, bir slayt sunum programı tasarlamayı düşünün. İki algoritma kullanılabilir: otomatikleştirilmiş ve yarı otomatik. Örneğin, ilki, her slaytta zamanlama verilerine dayalı olarak tüm slaytların otomatik olarak sırayla görüntülenmesini sağlayabilir; ikincisi de zamanlanmış ekranlara sahip olacak, ancak istendiğinde kullanıcı müdahale edip değiştirebilecektir. Bu iki yöntemden hangisini kullanırdınız? Belki her ikisi de! Önemli olan kullanıcının ne istediği...
Algoritma Kodlama Nedir?
Karmaşık görünen problemler algoritmalar yardımıyla daha açık ve basit bir şekilde görülebilir. Bilgisayar kullanımında belirli işlemlerin kolay gerçekleştirilebilmesi için programlardan faydalanılır. Bu programların oluşturulabilmesi için kodlama yapılması gerekir. Programın içeriğine göre kodlama basamakları belirlenir. Bu basamakların her biri belirli bir amaca göre oluşturulur. Çözüme ulaşmak için kullanılan bu basamaklar algoritmadır.
Algoritma kodlama yapılırken başlangıçta çözümü aranan problem net bir şekilde belirlenir. Daha sonra belirlenen problem analiz edilerek ulaşılmak istenen sonuçlar tespit edilir. Son olarak da problemin basamakları düşünülerek ortaya koyulan çözüm yollarından en uygun olanı seçilerek algoritma kodlanır.
Kodlamanın temelinde bu sistem yer alır. Bu aşamalar uygulanmadan kod yazılmaya başlanırsa durum karmaşık ve zorlayıcı bir hal alabilir. Bunu önlemek ve daha düzenli bir şekilde çalışabilmek için oldukça yardımcı bir yöntemdir. Oluşturulacak programın öncelikle algoritmaları yazılırsa, programcının izleyeceği yol belirginleşir ve bu yol üzerinde işlemler adım adım uygulanarak sonuca daha kolay ulaşılabilir.
Programlama dilleri mantığında bir küme içindeki verilerin sıralanması algoritma ile olur. Yine bir küme içerisinde herhangi bir veriyi aratmak farklı bir algoritmadır. Tüm bu algoritmalar yardımıyla kullanıcıların problemleri için çözüm üretildiğinde ise buna program adı verilir. Program oluşturulurken kullanılacak veri yapısı doğrudan uygulamayla ilişkilidir.
Bir problemin çözümüne yönelik farklı çözüm yöntemleri olabilir. En uygun çözüm yöntemini programcının kendisi bilgi birikimine bağlı olarak seçebilir. Çünkü programlamada en önemli şey, kodu adım adım ve iyi düşünerek yazmaktır. Kod yazılırken karmaşık bir matematik problemini çözer gibi çözüme giden yol ve çıkan sonucun doğru olduğundan emin olmak gerekir.
Algoritma kodlama yapılırken üç temel bileşen kullanılır.
Değişkenler: Programda kullanılacak verilerin türlerine göre belirlenen ve dışarıdan girilen verileri tutan yapıdır. Programcı tarafından kullanım amacına göre oluşturulur.
Algoritma: Programlama yapısının oluşturularak, uygulanabilmesi için gereken basamakların mantıksal bir sıralama ile yazılmasıdır. Program kodlanırken bu basamaklar uygulanır.
Akış Diyagramı: Çözüm basamaklarının belirli şemalar yardımıyla birbiri ile ilişkilendirilerek görsel tasvirinin oluşturulmasıdır. Bu konu önemli olduğu için daha detaylı olarak değineceğiz.
Algoritma Akış Diyagramları
Karmaşık işlemleri, bir sistemi ya da kodlama algoritmalarını gösteren diyagramlardır. Planlamalar yapmak, süreçleri belgelemek, incelemek, iyileştirmek için pek çok farklı alanda kullanılırlar. Diyagramlar akışı tanımlamak için bağlantı oklarını kullanır. Adımların şeklini tanımlamak için farklı şekiller kullanılır. Bu şekiller, elle çizilen basit şekillerden bilgisayar programları aracılığıyla oluşturulan detaylı şekillere kadar geniş bir çeşitlilik gösterir. Kullanılan şekillerin her biri diyagram içerisinde farklı durumları belirtir. Akış içerisinde girişi ifade etmek için farklı, karar verme aşaması için farklı bir şekil kullanılır. Örneğin; akış yönünü belirtmek için ok şeklinde bir doğru, işlem aşamasını belirtmek için dikdörtgen, döngü aşamasını belirtmek içinse altıgen şekilleri kullanılır.
Akış diyagramları veri akışının görsel bir temsilini oluşturur. Bir programın kodlaması yapılırken ve başkalarına açıklanırken diyagram kullanmak son derece faydalıdır. Kodlanacak programın mantığını oluştururken mantıksal aşamaları tek tek düşünmeyi sağlar. Kodlama aşamasında ise bir rehber görevi görür. Akış diyagramlarını oluşturan şemalar, kodun düzenlenme şeklini gösterir. Kodun uygulanma sürecini görselleştirir. Daha önce kodlanmış bir programı incelerken uygulama yapısını anlamaya yardımcı olur.
Algoritma akış diyagramları çizilirken, diyagram her zaman başla ve bitir komutlarını ifade eden şekiller ile başlatılır ve sonlandırılır. Kullanılan şekillerin birbiriyle orantılı olması gerekir. Elle çizilirken orantıya dikkat edilmeli gerekirse bilgisayar programları aracılığıyla çizilmelidir.
Draw.io, Gliffy, Microsoft Visio vb. programlar bu konuda kullanışlıdır. Diyagram akışının yönlendirilmesi için kullanılan oklar her zaman şekillerin ortasına hizalanacak biçimde çizilmelidir. Diyagram içerisinde kullanılan değişkenler ve yapılan hesaplamalar çizilen şekillerin içerisinde belirtilmelidir.
Akış diyagramları yöntemlerine göre üç alt türde sınıflandırılmaktadır. Bunlar; doğrusal akış diyagramları, mantıksal akış diyagramları, döngüsel akış diyagramlarıdır. Doğrusal akış diyagramları, en basit diyagram türünü ifade eder. Bu diyagramda akış, giriş-işlem-çıkış şeklinde oluşur. Doğrusal bir yol izleyerek diyagram sonlanır. Mantıksal akış diyagramları, içerisinde basamakları yönlendiren karar mekanizmalarını bulundurur.
verilen kararlara göre akış şeması dallara ayrılır. döngüsel akış diyagramları ise doğru sonuca ulaşabilmek için bazı adımların tekrar edilerek bir döngü içine girdiği diyagram türüdür. aşamada şart karşılanmıyorsa yeniden veri gönderimi yapılarak sorgu devam eder. tüm bu diyagram türleri kullanılarak ifade edilen algoritmalar, problemlerin çözümünde izlenecek yolu tasarlamaya ve doğru sonuçlara ulaşmaya yardımcı olur. böylece, ister hayatın içinde ister matematik ve bilgisayar bilimlerinde olsun, insanın karşılaştığı karmaşık durumlarla başa çıkmasında etkili olur.
Ankara Üniversitesi İletişim Fakültesi Radyo, Televizyon ve Sinema bölümünden mezun oldum. Eğitimime devam ederken, bir televizyon kanalında canlı yayın kameramanı olarak görev yaptım. Çeşitli kısa film projelerinde farklı görevlerde bulundum. Enstitü’den aldığım online içerik editörlüğü eğitiminden sonra yazarlık yapmaya başladım.