Algoritmalar Ve Programlama Dersi 1. Ünite Sorularla Öğrenelim
Algoritma Kavramı ve Programlama Temelleri
- Özet
- Sorularla Öğrenelim
Algoritma nedir?
Algoritma, bir işin nasıl yapılacağını tarif eden adımlar kümesidir. Günlük hayatımızın büyük kısmında, farkında olmadan da olsa algoritmalar ile karşı karşıya geliriz. Bir yemeğin yapılmasındaki adımları içeren yemek tarifi, yerini bilmediğimiz bir restoranı bulmamıza yardımcı olan yol tarifi, bir elektronik cihazın kullanım kılavuzu, algoritmaların günlük hayatımızdaki kullanımına örnek olarak gösterilebilir.
Banka hesabımızdan nakit para temin etmemizi sağlayan ATM’den para çekme algoritmasını nasıl oluşturabiliriz?
Günlük yaşantımızda karşılaştığımız algoritma örneklerini detaylı ve açık bir şekilde tarif etmek mümkündür. Banka hesabımızdan nakit para temin etmemizi sağlayan ATM’den para çekme algoritmasını adım adım inceleyelim:
- Hesabın bulunduğu bankaya ait bir ATM’ye gidilir.
- ATM önündeki bekleme kuyruğunu girilir.
- İşlem sırası gelene kadar kuyrukta beklenir.
- İşlem sırası geldiğinde, bankamatik kartı ATM’nin kart haznesine takılır.
- Bankamatik kartına ait şifre girilir ve “Giriş” tuşuna basılır.
- Para çekme menüsüne erişilir.
- Çekilecek nakit tutarı belirlenir ve “Devam” tuşuna basılır.
- ATM, bankamatik kartını kart haznesinden çıkartır.
- Bankamatik kartı ATM’den geri alınır.
- ATM, nakit parayı para haznesine doldurur.
- Nakit para ATM’den alınır.
- Para çekme işlemi tamamlanarak, işlem kuyruğundan çıkılır.
ATM’den para çekme algoritmasının yukarıda gösterilen adımlarında, bir kişinin para çekmek için yapması gerekenler listelenmiştir. Bu örnek doğrultusunda, bir algoritmayı oluşturan temel bileşenlerin, yapılacak işe yönelik açıklama ve işin yapılmasında izlenecek adımlar olduğu söylenebilir. Açıklama kısmında işin tanımı yapılır ve işle ilgili detaylar bildirilir. Adımlar kısmında ise işin başlangıcından sonuna kadar takip edilecek işlemler belirtilir.
Algoritmanın temel özellikleri nelerdir?
Bir algoritmanın sahip olması gereken temel özellikler aşağıda listelenmiştir:
- Girdi ve Çıktı Bilgisi: Algoritmalarda girdi ve çıktı bilgileri olmalıdır. Girdi bilgisi algoritmaya dışarıdan verilirken, çıktı bilgisi ise algoritma içerisinde üretilir. Bu bilgiler, algoritma için tanımlı veri kümesine ait olmalıdır.
- Açıklık: Algoritmayı oluşturan adımlar doğru ve kesin bir şekilde tanımlanmalıdır.
- Doğruluk: Farklı girdi bilgileri ile çalışabilen algoritmalar, her girdi için doğru bir çıktı üretmelidir.
- Sonluluk: Algoritmaların daima bir sonu olmalıdır. Girilen veri boyutundan bağımsız bir şekilde, algoritma adımları farklı bir aşamaya geçebilmeli veya sonlanmalıdır. Algoritma adımları gerçekleştirilirken, algoritma sonsuz döngüye girmemelidir.
- Verimlilik: Algoritmayı oluşturan adımlar, yapılan iş için kabul edilebilir bir süre içerisinde tamamlanmalıdır.
- Genellik: Bir algoritma, aynı türdeki problemlerin hepsine uygulanabilir olmalıdır.
Algoritmaların tanımlanmasında ve gösteriminde kullanılan başlıca yöntemler nelerdir?
Algoritmaların tanımlanmasında ve gösteriminde kullanılan farklı yöntemler mevcuttur. Bu yöntemlerden başlıcaları konuşma dili ile gösterim, akış şeması ile gösterim ve sözde kod (pseudocode) ile gösterimdir.
Konuşma dili ile algoritmalar nasıl gösterilir?
Bir algoritmanın açıklaması ve algoritmada yer alan adımlar, konuşma dili kuralları çerçevesinde ifade edilebilir. Bu gösterim yönteminde, algoritma açık ve kesin bir dille tanımlanır. Algoritmada yer alan adımlar liste halinde yazılır.
Akış şeması ile algoritma gösterme nasıl yapılır?
Akış şeması, algoritmaların gösteriminde kullanılan faydalı bir yöntemdir. Bir akış şemasında algoritma adımlarını ifade eden kutucuklar, adımlar arası geçişleri gösteren oklar, karar verme mekanizmaları olarak kullanılan şekiller bulunabilir. Akış şeması, bir algoritmanın görsel halini ifade eder. Görsellik, algoritmaların daha kolay anlaşılabilmesine olanak sağlar. Programcılar ve çözümleyiciler tarafından yaygın olarak kullanılan akış şemalarını oluşturmak için birçok farklı çizim yazılımı bulunmaktadır.
Sözde kod ile algoritma nasıl gösterilir?
Sözde kod (pseudocode), bir algoritma veya program oluşturulurken kullanılan, konuşma diline benzer bir yapıya sahip, programlama dillerinin detaylarından uzak bir anlatım şeklidir.
Algoritmaların sözde kod ile gösterimi, oldukça yaygın ve etkili bir yöntemdir. Sözde kodlarda bir programlama diline benzeyen ifadeler kullanılsa da bu ifadelerin bilgisayar tarafından anlaşılması mümkün değildir.
Sözde kodlar, programlama mantığı ile konuşma dili cümlelerinin harmanlanma- sından meydana gelir ve herkes tarafından rahatlıkla anlaşılabilir. Sözde kodu okuyan bir kişi, programlama dillerinin detaylarına takılmadan, algoritmanın çalışma mantığını kavrayabilir.
Özyinelemeli algoritma nedir?
Kendisini doğrudan veya dolaylı olarak çağıran algoritmalara özyinelemeli algoritma adı verilir. Bu algoritmalarda, problemler daha küçük ve basit parçalara indirgenir. Küçük parçalar için oluşturulan çözümlerin birleştirilmesiyle ana problemin çözümü elde edilir.
Geri izlemeli algoritmalar nasıl çalışır?
Geri izlemeli algoritmalar, genellikle optimizasyon problemlerinde kullanılan, problem çözümünde tüm olasılıkları deneyen algoritmalardır. Bu algoritmalarda çözüm kademeli şekilde oluşturulur. Algoritma çözüm aşamasında ilerlerken, olası çözüm yollarının hepsini deneyerek bir sonraki adıma geçmeye çalışır. Algoritmanın denediği çözüm yolundan sonuç alınamazsa, algoritma bir önceki adımda bulunan diğer olası çözüm yollarına geri döner.
Böl ve yönet algoritması nedir?
Böl ve yönet algoritmaları, problemlerin mümkün olan en küçük alt parçalara ayrıldığı, her bir alt parçanın diğerlerinden bağımsız şekilde çözüldüğü algoritmalardır. Problemin genel çözümü elde edilirken alt parçalara ait çözümler belirli bir sırayla bir araya getirilir.
Böl ve yönet algoritmalarındaki genel olarak hangi aşamalardan meydana gelir?
Böl ve yönet algoritmaları, genellikle üç ana aşamadan meydana gelmektedir:
- Bölme (Divide): Problemin daha küçük parçalara ayrıldığı aşamadır. Problem daha alt parçalara bölünemeyecek hale gelene kadar, özyinelemeli bir yaklaşımla bölme işlemi gerçekleştirilir.
- Yönetme (Conquer): Problemin alt parçalarının, birbirlerinden bağımsız olarak çözüldüğü aşamadır.
- Birleştirme (Merge): Problemin alt parçalarına ait çözümlerin, özyinelemeli bir yaklaşımla birleştirildiği aşamadır.
Dinamik programlama nedir?
Dinamik programlama, karmaşık problemleri küçük parçalar halinde çözen, elde edilensonuçları bilgisayar hafızasında bir veri yapısında saklayan, genel çözümü elde ederken de veri yapılarında saklanan sonuçları kullanan bir programlama yöntemidir.
Bir problemin dinamik programlama ile çözülebilmesi için problemin alt parçalara ayrılabilmesi ve genel çözümün bu alt parçalardan oluşturulabilmesi gerekmektedir. Dinamik programlama yaygın olarak optimizasyon problemlerinde kullanılır.
Açgözlü algoritma nedir?
Bir problem için mümkün olan en doğru çözümü hede eyen algoritmalara açgözlü algoritmalar adı verilir. Açgözlü algoritmalarda yerel olarak optimum sonuç elde edilirken, bulunan sonuç her zaman için en iyi çözüme karşılık gelmeyebilir.
Açgözlü algoritmalar ile problem çözümündeki temel yaklaşım, problemin küçük bir alt kümesi için çözüm oluşturmak ve bu çözümü problemin geneline yaymaktır. Algoritma içerisinde yapılan bir seçim, o an için doğru olsa bile sonraki seçimlerde olumsuz etki yapabilir.
Kaba kuvvet algoritması nedir?
Bir problemin çözümü aşamasında, kabul edilebilir bir çözüm elde edene kadar tüm olasılıkları deneyen algoritmalara kaba kuvvet algoritmaları denir.
Kaba kuvvet algoritmaların dezavantajları nelerdir?
Kaba kuvvet algoritmaları, genellikle problemin tanımından yola çıkarak en basit çözüm yolunu uygular ve rahatlıkla kodlanır. Fakat bu algoritmalarda çok fazla işlem yapılır ve çözüm yolu optimumdan uzaktır. Problemdeki veri hacmi büyüdükçe, kaba kuvvet algoritması ile çözüm şansı da azalır.
Veri yapıları ne amaçla kullanılır?
Üst düzey programlamada veri içerisinde arama yapmak, veriye hızlı bir şekilde ulaşmak, bilgisayarın işlemcisini verimli kullanmak, aynı anda birçok isteğe cevap verebilmek gibi gereksinimler söz konusudur. Bilgisayar programlarının karmaşıklığı ve programda işlenen veri büyüklüğü arttıkça, verilerin daha sistematik ve verimli yönetilmesi gerekir.
Bilgisayar programlarında verilerin sistematik ve etkili bir şekilde organize edilmesi için veri yapıları kullanılır. Bir veri yapısı, içerdiği elemanların mantıksal düzeni ve elemanlar üzerinde yapılabilecek işlemler ile tanımlanır.
Kuyruk veri yapısıyla veriler nasıl organize edilir?
Veri yapılarına örnek olarak, oldukça sık kullanılan bir veri yapısı çeşidi de kuyruktur. Her kuyruğun bir başı ve sonu olur. Veriler kuyruğun baş tarafından girerken, son tarafından çıkar. Bu özellikten dolayı kuyruk veri yapısını bir marketteki ödeme sırasına benzetebiliriz.