Merhaba arkadaşlar,
Mobilhanem.com üzerinden anlattığımız/yayınladığımız derslerimize yeni bir yazı serisi, Algoritma Eğitimlerine başlıyoruz. Bu dersimizde ise Algoritma Nedir sorusuna cevap vermeye çalışacağız.
Algoritma Nedir?
Algoritmayı kısaca bir problemin çözümünde izlenecek yol olarak tanımlayabiliriz. Genelde bilgisayar biliminde ve matematikte tanımlanan, belli bir başlangıcı ve sonu olan çözüm yöntemidir.
Algoritmanın en önemli özelliklerinden birisi sonlu olmasıdır. Yani bir algoritma hangi şartta ve hangi girdide olursa olsun mutlaka sonlanacaktır. Sonsuza kadar çalışan bir koda algoritma denilemez.
Algoritma Neden Gereklidir?
Algoritma bir uygulamanın, oyunun veya bir web sayfasının çalışması için gereklidir. Ama burada asıl mevzu verimli algoritma nedir ve faydası nelerdir.
Öncelikle herhangi bir algoritmada verim iki niceliğe bağlıdır. Birincisi algoritmanın zaman karmaşıklığı (Time Complexity) ikincisi ise hafıza karmaşıklığı (Memory Complexity). Şimdi bu iki kavramdan kısaca bahsedelim.
Zaman Karmaşıklığı:
En basit tanımıyla bir algoritmanın N boyutundaki girdiyi kaç saniyede çözdüğünü N cinsinden gösteren bir karmaşıklık birimi. Pek basit bir tanım olmadı sanırım ama biraz daha açıklayınca anlayacağınızdan eminim.
İçinde on binlerce sayının bulunduğu bir veri düşünelim amacımız bu sayıları küçükten büyüğe doğru sıralamak olsun. Bu sıralama işlemini ne kadar kısa sürede tamamlarsak algoritmamız o kadar başarılıdır ve zaman karmaşıklığı o kadar düşüktür. Yazılım dillerinde zamanı etkileyen en temel faktör yapılan işlem sayısıdır. Normal bir bilgisayar 1 saniyede 200 000 000 (200 milyon) işlem yapabilir. İşlem derken kastettiğim basit matematik işlemleri, değişkenlere veri atama işlemleri gibi örnekler verilebilir. Yani uzun lafın kısası verimli algoritma yazarken amacımız olabildiğince az işlem yapmak olacaktır.
Hafıza Karmaşıklığı:
Bu, zaman karmaşıklığından daha kolay bir kavramdır. Temel olarak algoritmanın çalıştığı bilgisayardan ödünç aldığımız hafıza miktarıdır. Aldığımız hafıza miktarı ne kadar az ise bu algoritma o kadar az maaliyetlidir. Bu da bu algoritmayı daha verimli kılar.
Unutmayın ki bir sonraki dersimizde bu karmaşıklıkların üzerine biraz daha ayrıntılı duracağım.
Yukarıda da bahsettiğim gibi bize asıl lazım olan algoritma değil verimli algoritmadır. Çünkü gelişen web ve mobil yazılım teknolojisinde artık yazılım yazmayı bilen kişi sayısı çok fazladır. Piyasada sizi bunlardan ayıracak, farkınızı ortaya koyacak faktör verimli algoritma yazabilme yeteneğidir.
Algoritma Konusunda Kendimi Nasıl Geliştirebilirim?
Geldik işin en zevkli kısmına. Kendimizi geliştirme kısmı. Öncelikle şunu belirteyim ki bu konuda Türkçe kaynak yok denecek kadar az. Özellikle kendimizi test etmek için Tükçe soru ve online sınav ben bulamadım. Ama bunu dert etmeyin bir kaç soru çözdükten sonra zaten terimler hep birbirine benzer olduğu için dil sıkıntısı fazla yaşamayacaksınız.
Size tavsiye edeceğim ilk web sitesi codeforces.com. En köklü algoritma tabanlı soru çözme sitelerinden olan Codeforces içinde bulunan binlerce soru sayesinde kendinizi büyük bir okyanusun içinde buluyorsunuz. Her attığınız kulaç size daha fazla özgüven ve çalışma şevki kazandırıyor. Her hafta düzenlenen online sınavlar ise size Dünya çapında sıralamanızı görme olanağı sağlıyor.
Bir diğer algoritma sorularının bulunduğu site ise hackerrank.com. Aynı mantıkla çalışan sitenin Codeforces’dan eksiği, bulundurduğu soru sayısının daha az olmasıdır.
Son olarak biraz da ders progamından bahsetmek istiyorum. Bir sonraki derste verimli algoritmanın ne olduğunu biraz daha derinlemesine inceleyerek büyük O notasyonundan bahsedeceğim. Daha sonra en temel algoritmalardan olan sıralama ve arama algoritmalarından başlayarak kolaydan zora doğru anlatacağım. Takipte kalarak bu piyasada sizin de bir adım öne geçmenizi canı gönülden isterim.
Buraya kadar okuduğunuz için teşekkürler. Mutlaka sorularınız vardır aşağıdan veya Soru Cevap sitemizde sormaktan lütfen çekinmeyin. Bir sonraki derste görüşmek üzere sağlıcakla kalın.
Tüm Algoritma Derslerimiz için tıklayınız.
57