Algoritma Nedir: Bir Problemi Adım Adım Çözmek
Algoritma, bir problemi çözmek için izlenen net adımlar dizisidir. Özellikleri, günlük örnekleri, ifade yolları ve verimlilik ölçüsü bu yazıda.
Algoritma nedir?
Algoritma, belirli bir problemi çözmek ya da bir işi yapmak için izlenen, açıkça tanımlanmış ve sonlu adımlar dizisidir. Girdi alır, adımları sırayla uygular ve bir çıktı üretir. Bir yemek tarifi de bir algoritmadır: malzemeler girdi, tarif adımları işlem, ortaya çıkan yemek çıktıdır.
Bilgisayar biliminde algoritma, bir programın nasıl çalışacağının mantıksal planıdır. Aynı algoritma farklı programlama dillerinde yazılabilir; algoritma fikirdir, kod ise o fikrin belirli bir dildeki ifadesidir.
İyi bir algoritmanın özellikleri
Bir adımlar dizisine algoritma diyebilmek için belirli ölçütleri taşıması beklenir:
- Girdi: algoritma girdi alabilir, hiç girdi almayabilir de
- Çıktı: en az bir sonuç üretir
- Kesinlik: her adım belirsizliğe yer bırakmayacak biçimde tanımlıdır
- Sonluluk: sınırlı sayıda adım sonunda biter, sonsuz döngüye girmez
- Etkinlik: adımlar gerçekten uygulanabilir basit işlemlerden oluşur
Bu ölçütler pratikte şunu söyler: 'biraz karıştırın, tadına bakın' ifadesi insan için yeterli olabilir ama algoritma için yeterli değildir; çünkü 'biraz' ve 'tadına bakın' makinenin uygulayabileceği kesin bir adım değildir.
Küçük bir örnek: bir listede en büyük sayıyı bulmak
Elimizde sırasız bir sayı listesi olsun ve en büyüğünü bulmak isteyelim. Algoritma şöyle çalışır: listenin ilk elemanını 'şimdilik en büyük' olarak not et. Sonra listedeki her sonraki elemana bak; not ettiğin sayıdan büyükse notu o elemanla değiştir. Liste bitince elinde kalan sayı en büyüktür.
Bu küçük örnek algoritmanın bütün parçalarını gösterir: girdi liste, çıktı bulunan sayı, adımlar açık, işlem listenin sonunda biter. Liste ne kadar uzarsa uzasın aynı mantık geçerlidir; yalnızca bakılacak eleman sayısı artar. Algoritmaların verimliliğini tartışırken bakılan şey de budur: girdi büyüdükçe işin ne kadar büyüdüğü.
Algoritma nasıl ifade edilir?
Algoritma programlama diline geçmeden önce genellikle sade bir biçimde anlatılır. En yaygın yollar şunlardır: günlük dille yazılmış adımlar, akış şeması ve sözde kod (pseudocode). Akış şeması adımları ve karar noktalarını şekillerle gösterir, sözde kod ise programlama diline benzeyen ama belirli bir dile bağlı olmayan sade bir yazımdır.
Bu aşama atlanırsa en sık görülen hata ortaya çıkar: problem tam anlaşılmadan kod yazılır, kod çalışır gibi görünür ama sınır durumlarda hatalı sonuç verir. Boş liste, tek elemanlı liste ve aynı değerlerin tekrarı gibi uç durumları algoritma tasarlanırken düşünmek bu hataları baştan azaltır.
Algoritmanın verimliliği nasıl ölçülür?
Aynı problemi çözen birden fazla algoritma olabilir; hangisinin daha iyi olduğunu zaman karmaşıklığı ve bellek karmaşıklığı gösterir. Zaman karmaşıklığı, girdi büyüdükçe adım sayısının nasıl arttığını, bellek karmaşıklığı ise algoritmanın ne kadar ek hafıza gerektirdiğini anlatır. Bunu ifade etmek için büyük O gösterimi kullanılır.
Örneğin bir kitapta bir sözcüğü sayfa sayfa tarayarak aramak ile sıralı bir dizinde ortadan bölerek aramak aynı sonucu verir, ancak girdi büyüdüğünde aralarındaki fark çok açılır. Bu yüzden algoritma seçimi küçük veride fark yaratmasa bile büyük veride kararı belirler.
Algoritma türleri ve kullanım alanları
Algoritmalar çözdükleri işe göre gruplanır. Sıralama algoritmaları verileri düzene koyar, arama algoritmaları bir veriyi bulur, çizge algoritmaları en kısa yol ve ağ bağlantısı gibi sorular çözer, dinamik programlama ise büyük problemleri küçük alt problemlere bölerek çözer. Şifreleme, sıkıştırma ve zamanlama da kendi algoritma aileleriyle çalışır.
Makine öğrenmesi algoritmaları ayrı bir gruptur: kuralı programcı elle yazmaz, algoritma kuralı veriden öğrenir. Navigasyon uygulamasının rota bulması, e-ticaret sitesinin ürün önermesi ve bankanın şüpheli işlemi yakalaması bu tür algoritmaların günlük örnekleridir. Algoritma ile veri yapısı da sık karıştırılır: veri yapısı veriyi nasıl sakladığımızı, algoritma o veriyle ne yaptığımızı anlatır; birlikte düşünülürler.
Algoritma konusunu Mindset programlarında nerede çalışırsınız?
Veri Yapıları ve Algoritmalar programında karmaşıklık analizi, sıralama ve arama algoritmaları, çizge algoritmaları ile dinamik programlama ayrı modüllerdir. Teknik Mülakat ve Algoritma Hazırlığı programı problem çözüm kalıplarını ve mülakat simülasyonunu işler. Denetimli Öğrenme Algoritmaları programı ise makine öğrenmesi tarafındaki algoritmalara odaklanır.
Programlama dilinden bağımsız düşünmeyi öğrenmek istiyorsanız karmaşıklık analizi ve problem çözüm kalıpları gibi başlıklar, algoritmayı yazmadan önce nasıl tasarlayacağınızı çalışmak için uygun bir zemin sunar.
İlgili Mindset programı
Veri Yapıları ve Algoritmalar
Sık sorulan sorular
Algoritma ile program arasındaki fark nedir?
Algoritma çözüm yöntemidir, program ise o yöntemin belirli bir programlama dilinde yazılmış ve bilgisayarda çalıştırılabilir halidir. Aynı algoritma farklı dillerde yazılabilir. Algoritma kâğıt üzerinde veya sözde kodla anlatılabilir; program ise derlenir ya da yorumlanır ve gerçek girdilerle çalıştırılır.
Algoritma yazmak için programlama bilmek gerekir mi?
Algoritma tasarlamak için programlama dili şart değildir; adımları net anlatabilmek yeterlidir. Ancak algoritmayı çalıştırıp doğrulamak için kod yazmak gerekir, bu yüzden bu beceriler birlikte gelişir. Başlangıçta sade problemlerle başlayıp adımları günlük dille yazmak, sonra kodlamaya geçmek iyi bir yoldur.
Yapay zeka ve makine öğrenmesi algoritma mıdır?
Evet, ama farklı bir şekilde. Klasik algoritmada kuralları programcı yazar. Makine öğrenmesinde algoritma örnek verilerden kuralı kendisi çıkarır ve ortaya çıkan modeli yeni veriler üzerinde kullanır.
Bir algoritmanın doğru çalıştığını nasıl anlarız?
Önce küçük ve elle sonucu bilinen örneklerle denenir, ardından boş girdi, tek eleman ve tekrar eden değerler gibi uç durumlar sınanır. Mümkünse algoritmanın neden doğru olduğu mantıksal olarak da açıklanır. Yalnızca birkaç örnekte doğru sonuç vermesi, algoritmanın her girdide doğru olduğunu kanıtlamaz.
İlgili rehberler
İlgili eğitimler
Kategori: Yazılım Geliştirme, Veri Analitiği ve İş Zekası