Algoritma Nedir?
Günlük hayatımızın büyük kısmında, farkında olsak da olmasak da algoritmalar ile iç içeyizdir. Bir yemeğin yapılmasındaki adımları içeren yemek tarifi, bilinmeyen bir adrese ulaştıran yol tarifi ya da yeni bir cihazın kullanma kılavuzu; hepsi birer algoritmadır.
Teknik tanımıyla algoritma; bir işin nasıl yapılacağını bildiren, açık, düzenli ve sıralı biçimde tanımlanmış adımlar kümesidir. Bir algoritma iki ana bölümden oluşur:
- Açıklama: İşin tanımı ve ilgili ayrıntılar.
- Adımlar: İşin başından sonuna kadar sıralı ve tarif edilmiş işlemler.
Bilgisayar bilimleri açısından algoritma; bir problemin çözümünde uygulanan sistematik yöntemdir. Bilgisayarın yapacağı işleri tarif eden algoritmalar aracılığıyla programlar oluşturulur; bu programlar da bilgisayar sistemlerinde yazılım olarak adlandırılır.
Algoritmaların Temel Özellikleri
Programlamada kullanılan algoritmaların geçerli sayılabilmesi için şu özellikleri taşıması gerekir:
- Girdi ve Çıktı: Her algoritmanın girdi (dışarıdan verilen bilgi) ve çıktı (üretilen sonuç) bilgileri olmalıdır. Bazı algoritmalarda yalnızca çıktı bulunabilir.
- Açıklık: Algoritmayı oluşturan adımlar doğru ve kesin biçimde tanımlanmalıdır; belirsizliğe yer yoktur.
- Doğruluk: Algoritma, her geçerli girdi için doğru bir çıktı üretmelidir.
- Sonluluk: Algoritmanın mutlaka sonu olmalıdır; sonsuz döngüye girmemelidir. Girilen verinin boyutundan bağımsız olarak algoritma bir noktada tamamlanmalıdır.
- Verimlilik: Algoritmayı oluşturan adımlar belirli bir süre içinde tamamlanmalıdır.
- Genellik: Bir algoritma, aynı türdeki problemlerin hepsine uygulanabilir olmalıdır.
Örnek olarak iki pozitif sayının en büyük ortak bölenini bulan Euclid algoritması gösterilebilir:
- Sayılardan büyük olanı A, küçük olanı B olarak isimlendir.
- A sayısını B'ye böl; kalanı K olarak isimlendir.
- K sıfırdan farklıysa: A = B, B = K yap ve 2. adıma geri dön.
- K sıfırsa: ortak bölenlerin en büyüğü B'nin değeridir.
Bu dört adım; açıklık, doğruluk, sonluluk ve genellik özelliklerini eksiksiz karşılamaktadır.
Algoritmaların Gösterim Biçimleri
Algoritmalar iki temel yöntemle ifade edilir:
Akış Şemaları
Akış şeması; algoritmanın görsel temsilidir. Algoritma adımlarını simgeleyen kutucuklar, adımlar arası geçişleri gösteren oklar ve karar verme mekanizmalarına karşılık gelen şekillerden oluşur. Akış şeması sayesinde algoritmanın mantığı daha kolay anlaşılır. Yazılım geliştirme sürecinde programcılar ve sistem analistleri tarafından yaygın olarak kullanılmaktadır.
Sözde Kod (Pseudocode)
Sözde kod; bir algoritma veya program oluşturulurken kullanılan, konuşma diline yakın ve programlama dillerinin teknik ayrıntılarından uzak anlatımlardır. Programlama mantığı ile günlük dil cümlelerinin harmanlanmasından oluşur; programlama bilgisi olmayanlar tarafından dahi anlaşılabilir. Sözde kodu okuyan kişi, belirli bir programlama dilinin söz dizimi kurallarına takılmadan algoritmanın işleyiş mantığını kavrayabilir.
Programlama Nedir?
Programlama; belirli bir algoritmayı bilgisayara iletmek için kullanılan standart gösterimler ve kurallar bütünüdür. Yazılımcıların bu amaca yönelik kullandığı araca programlama dili adı verilir. Bir programlama dilinin içerdiği sözcükler, kurallar ve talimatlar sayesinde bilgisayarlara özel işlemler yaptırılabilmektedir.
Programlamanın temeli algoritmaya dayanır. Önce çözülecek problem belirlenir, ardından problemi çözecek algoritma tasarlanır; son adımda ise algoritma bir programlama dili aracılığıyla bilgisayara aktarılır.
Programlama Dillerinin Seviyeleri
Bilgisayar teknolojisinin gelişimiyle paralel olarak programlama dilleri de evrilmiştir. Tarihsel süreç ve bilgisayarla iletişim kolaylığı esas alındığında programlama dilleri üç seviyede sınıflandırılabilir:
1. Makine Seviyesi Diller (1. Nesil)
Yalnızca 0 ve 1 değerlerinden — ikili (binary) sayı sisteminden — oluşan dillerdir. Bilgisayarın doğrudan anlayabildiği tek dildir; ancak insanlar tarafından okunması ve yazılması son derece güçtür. Her makine mimarisine özgü farklı makine dili bulunur.
2. Çevirici Seviyesi Diller (2. Nesil — Assembly)
Makine diliyle aynı komutlara sahip olmakla birlikte komutlar ve değişkenler için özel semboller kullanılır. İnsanlar tarafından makine diline kıyasla daha anlaşılır olan bu diller; bilgisayar tarafından çalıştırılabilmek için çevirici (assembler) adı verilen bir yazılıma gereksinim duyar. Çeviricinin görevi, sembolik komutları makine koduna dönüştürmektir.
3. Yüksek Seviye Diller (3. Nesil ve Üstü)
İçerdikleri ifadeler, semboller ve kurallar sayesinde insanlar tarafından en rahat anlaşılan ve en yaygın kullanılan programlama dilleridir. Bu dillerde yazılan programların bilgisayar tarafından çalıştırılabilmesi için derleyici (compiler) veya yorumlayıcı (interpreter) kullanılır. Derleyici; kaynak kodun tamamını makine koduna dönüştürürken yorumlayıcı kodu satır satır işler.
Günümüzde yaygın olarak kullanılan yüksek seviye diller arasında C, C++, Python, Java, PHP, JavaScript ve Ruby sayılabilir. Teknolojik gereksinimler değiştikçe yeni diller ortaya çıkmakta; bazı diller ise kullanım dışı kalmaktadır.
Derleyici ve Yorumlayıcı
| Özellik | Derleyici | Yorumlayıcı |
|---|---|---|
| Çalışma biçimi | Tüm kodu önce derler | Kodu satır satır çalıştırır |
| Hız | Derleme sonrası daha hızlı | Daha yavaş |
| Hata tespiti | Derleme aşamasında | Satır satır çalışırken |
| Örnek diller | C, C++, Pascal | Python, JavaScript |
Önemli Noktalar
- Algoritma; bir problemin çözümünde izlenen sistematik, açık ve sıralı adımlar kümesidir; günlük hayattaki yemek tarifleri ve yol tarifleri de birer algoritmadır.
- Geçerli bir algoritmanın sahip olması gereken altı temel özellik vardır: girdi/çıktı, açıklık, doğruluk, sonluluk, verimlilik ve genellik.
- Algoritmalar akış şeması (görsel) ve sözde kod (dile yakın metin) olmak üzere iki temel yöntemle gösterilir.
- Programlama; algoritmayı bir programlama dili aracılığıyla bilgisayara iletme sürecidir; programlamanın temeli algoritmaya dayanır.
- Programlama dilleri üç seviyede incelenir: makine dili (0/1), çevirici dili (Assembly) ve yüksek seviye diller (Python, C, Java vb.).
- Yüksek seviye dillerde yazılan programlar derleyici ya da yorumlayıcı aracılığıyla makine koduna dönüştürülür.
Temel Kavramlar
| Kavram | Tanım |
|---|---|
| Algoritma | Bir problemin çözümünde izlenen, açık, doğru ve sonlu adımlardan oluşan sistematik yöntem |
| Akış Şeması | Algoritmanın kutucuklar ve oklar aracılığıyla görsel olarak gösterilmesi |
| Sözde Kod | Algoritmanın konuşma diline yakın, programlama ayrıntılarından uzak yazılı ifadesi |
| Programlama Dili | Algoritmanın bilgisayara iletilmesinde kullanılan standart sözdizimi ve kurallar bütünü |
| Derleyici | Yüksek seviye dildeki kaynak kodun tamamını makine koduna dönüştüren yazılım |
| Yorumlayıcı | Yüksek seviye dildeki kodu satır satır okuyup çalıştıran yazılım |
| Makine Dili | Yalnızca 0 ve 1 değerlerinden oluşan; bilgisayarın doğrudan anlayabildiği programlama dili seviyesi |
Başvurulabilecek Kaynaklar
- Knuth, D.E. (1997). The Art of Computer Programming, Volume 1: Fundamental Algorithms. Boston: Addison-Wesley.
- Cormen, T.H. vd. (2009). Introduction to Algorithms (3rd ed.). Cambridge: MIT Press.
- Kernighan, B.W. & Ritchie, D.M. (1988). The C Programming Language. New Jersey: Prentice Hall.
- Sebesta, R.W. (2012). Concepts of Programming Languages. Boston: Addison-Wesley.