Konu Anlatımı / Ders Notu

1. Ünite – Temel Kavramlar Konu Anlatımı

Algoritma kavramı, algoritmanın temel özellikleri, sözlü ifade, sözde kod, akış diyagramları, kontrol yapıları ve Big O notasyonunu kapsamlı biçimde öğrenin.

Programlama öğrenmenin temeli yalnızca bir programlama dilinin komutlarını ezberlemek değildir. Asıl önemli olan, karşılaşılan problemi doğru anlamak, çözümü küçük ve anlaşılır parçalara ayırmak ve bu parçaların hangi sırayla uygulanacağını belirlemektir. Bilgisayar kendisine verilen problemi insan gibi yorumlayıp kendi başına çözüm yöntemi geliştirmez. Yapılacak işlemlerin açık biçimde tanımlanması gerekir. İşte bu noktada algoritma kavramı devreye girer. Bu ünitede algoritmanın ne olduğu, iyi bir algoritmanın hangi özelliklere sahip olması gerektiği, algoritmaların nasıl hazırlanıp gösterildiği, temel kontrol yapıları ve algoritmaların performansının nasıl değerlendirildiği ele alınacaktır.

1.1. Giriş Bir bilgisayar programı belirli bir problemi çözmek veya belirli bir işi yerine getirmek amacıyla oluşturulur. Ancak programın başarılı olabilmesi için yapılacak işlemlerin daha kodlama başlamadan önce planlanması gerekir. Örneğin kullanıcıdan iki sınav notu alarak ortalama hesaplayan bir program hazırlanacağını düşünelim. Kod yazmadan önce şu soruların cevaplandırılması gerekir:

  • Hangi veriler kullanıcıdan alınacak?
  • Notların ağırlıkları eşit mi olacak?
  • Ortalama hangi formülle hesaplanacak?
  • Sonuç yalnızca ekrana mı yazdırılacak?
  • Öğrencinin geçip kalma durumu da kontrol edilecek mi?

Bu soruların cevapları aslında programın algoritmasını oluşturmaya başlamamızı sağlar. Problem ne kadar büyürse algoritma hazırlamanın önemi de o kadar artar. Çünkü büyük bir problemi doğrudan kodlamaya çalışmak, hataların bulunmasını ve programın geliştirilmesini zorlaştırabilir. Algoritmik düşünme sayesinde problem önce daha küçük parçalara ayrılır. Ardından her parçanın görevi ve bu parçaların birbiriyle ilişkisi belirlenir.

1.2. Algoritma Kavramı Algoritma, belirli bir problemi çözmek veya belirli bir sonuca ulaşmak için uygulanması gereken sonlu, açık ve sıralı işlem adımlarıdır. Bir algoritma yalnızca matematiksel hesaplamalardan oluşmak zorunda değildir. Günlük yaşamda gerçekleştirdiğimiz pek çok işlem de algoritmik bir yapıya sahiptir. Örneğin bir kişinin evden çıkmadan önce yaptığı işlemler şöyle düşünülebilir:

  1. Uyan.
  2. Hazırlan.
  3. Kıyafetlerini giy.
  4. Gerekli eşyalarını al.
  5. Evden çık.

Burada belirli bir amaca ulaşmak için birbiri ardına gerçekleştirilen adımlar bulunmaktadır. Bilgisayar programlarında da benzer bir mantık kullanılır ancak işlemler çok daha açık ve kesin biçimde tanımlanır. Algoritma Neleri Belirler? Bir algoritma hazırlanırken temel olarak şu unsurlar belirlenir:

  • hangi verilerin kullanılacağı,
  • hangi işlemlerin yapılacağı,
  • işlemlerin hangi sırayla gerçekleşeceği,
  • hangi durumlarda karar verileceği,
  • hangi işlemlerin tekrar edileceği,
  • hangi sonucun üretileceği.

Dolayısıyla algoritma yalnızca “ne yapılacağını” değil, çoğu zaman hangi sırayla ve hangi koşullar altında yapılacağını da açıklar. Girdi – İşlem – Çıktı Mantığı Programların temel çalışma mantığını anlamanın en kolay yollarından biri girdi – işlem – çıktı modelidir. Girdi Programın çalışabilmesi için aldığı veridir. Örneğin:

  • öğrencinin sınav notu,
  • kullanıcının yaşı,
  • bir ürünün fiyatı,
  • bir dikdörtgenin kenarları

girdi olabilir. İşlem Girdiler üzerinde yapılan hesaplama veya değerlendirmedir. Örneğin: ortalama = (vize + final) / 2

bir işlemdir. Çıktı İşlem sonucunda elde edilen ve kullanıcıya veya başka bir sisteme aktarılan sonuçtur. Örneğin: Ortalama = 75

bir çıktıdır.

İyi Bir Algoritmanın Temel Özellikleri Bir işlem dizisinin algoritma olarak yazılması tek başına yeterli değildir. Algoritmanın doğru ve kullanılabilir olması için bazı temel özellikleri taşıması gerekir. Kesinlik Algoritmanın her adımı açık ve tek anlamlı olmalıdır. Örneğin: Sayının değerini biraz artır.

ifadesi belirsizdir. “Biraz” sözcüğünün ne kadar olduğu bilinmemektedir. Bunun yerine: Sayı = Sayı + 1

yazılması işlemi kesin hale getirir. Algoritmada kullanılan bir ifade farklı kişiler tarafından farklı şekillerde yorumlanmamalıdır. Etkinlik Algoritmadaki her işlem problemin çözümüne katkı sağlamalıdır. Örneğin iki sayının toplamını hesaplayan bir algoritmada kullanıcının doğum tarihini istemek sonucun hesaplanması açısından gerekli değilse gereksiz bir işlemdir. İyi tasarlanmış bir algoritma mümkün olduğunca gereksiz adımlardan kaçınır. Sonlu Olma Algoritmanın belirli bir noktada tamamlanması gerekir. Örneğin: Sayıyı sürekli 1 artır.

şeklinde bir işlem hiçbir bitiş şartı içermiyorsa sonsuza kadar devam edebilir. Özellikle döngü kullanılan algoritmalarda işlemin hangi koşulda sona ereceği açıkça belirlenmelidir. Doğruluk Algoritma verilen girdilere karşılık beklenen doğru sonucu üretmelidir. Bir algoritmanın çok hızlı çalışması, yanlış sonuç veriyorsa herhangi bir anlam taşımaz.

Algoritma ile Programlama Arasındaki Fark Algoritma bir programlama dili değildir. Örneğin: İki sayı al. Sayıları topla. Sonucu yazdır.

bir algoritmadır. Bu çözüm daha sonra Python, C#, Java veya başka bir programlama dili ile kodlanabilir. Programlama dili değişse bile problemin çözüm mantığı büyük ölçüde aynı kalabilir. Bu nedenle program yazmayı öğrenirken yalnızca programlama dilinin komutlarını öğrenmek yerine algoritma oluşturma becerisini geliştirmek önemlidir.

1.3. Algoritma Hazırlama Algoritma oluşturmaya başlamadan önce problem doğru biçimde anlaşılmalıdır. Bir problemi algoritmaya dönüştürürken şu sıra kullanılabilir:

  1. Problemi tanımla.
  2. Girdileri belirle.
  3. Beklenen çıktıyı belirle.
  4. Yapılması gereken işlemleri belirle.
  5. Karar verilmesi gereken durumları belirle.
  6. Tekrar eden işlemleri belirle.
  7. Adımları doğru sıraya yerleştir.
  8. Algoritmayı kontrol et.

Hazırlanan algoritmalar farklı yöntemlerle gösterilebilir. Temel gösterim biçimleri:

  • sözlü ifade,
  • kaba kod / sözde kod,
  • akış diyagramıdır.

Sözlü İfade Algoritmanın günlük dil kullanılarak anlatılmasıdır. Örneğin: BAŞLA Kullanıcıdan iki sayı al. Sayıları topla. Toplamı kullanıcıya göster. BİTİR

Basit problemlerde kolay anlaşılır bir yöntemdir. Ancak algoritma büyüdükçe yalnızca doğal dille yazılmış uzun bir metni takip etmek zorlaşabilir. Kaba Kod – Sözde Kod Kaba kod, algoritmanın programlama diline benzeyen ifadeler kullanılarak yazılmasıdır. Ancak kaba kod gerçek bir programlama dili değildir ve bilgisayar tarafından doğrudan çalıştırılmaz. Örneğin: BAŞLA OKU A OKU B TOPLAM = A + B YAZ TOPLAM BİTİR

Aynı işlem şu şekilde de gösterilebilir: BAŞLA A değerini kullanıcıdan al B değerini kullanıcıdan al C = A + B C değerini ekrana yaz BİTİR

İki gösterim de aynı algoritmayı ifade eder. Kaba kodun amacı programlama dilinin ayrıntılarıyla uğraşmadan çözüm mantığını gösterebilmektir.

Akış Diyagramı Akış diyagramı, algoritmanın grafiksel semboller kullanılarak gösterilmesidir. Özellikle algoritma büyüdüğünde işlemlerin hangi sırayla ilerlediğini ve hangi noktalarda farklı yollara ayrıldığını görmeyi kolaylaştırır. Akış diyagramlarında farklı işlemler farklı sembollerle temsil edilir. Başlangıç ve Bitiş Algoritmanın nerede başladığını ve nerede sona erdiğini belirtir. Her algoritmanın bir başlangıç noktası ve ulaşacağı bir bitiş noktası bulunmalıdır. Girdi ve Çıktı Programın veri aldığı ve sonuç ürettiği aşamaları gösterir. Örneğin: Sayıyı oku

bir girdi işlemidir. Sonucu yaz

ise çıktı işlemidir. İşlem Hesaplama ve değer atama gibi işlemlerin gerçekleştirildiği aşamadır. Örneğin: Toplam = A + B

bir işlem adımıdır. Karar Bir koşulun değerlendirilmesini sağlar. Örneğin: Not >= 50 ?

kontrolünün sonucuna göre program iki farklı yoldan devam edebilir. Alt Program Ana algoritmanın başka bir işlem grubunu veya alt programı çağırdığı noktaları göstermek için kullanılır. Akış Çizgileri Akış diyagramının hangi yönde ilerlediğini belirtir. Basit bir örnek: BAŞLA ↓ Sayıyı oku ↓ Karesini hesapla ↓ Sonucu yaz ↓ BİTİR

Temel Kontrol Yapıları Bir algoritmanın çalışma akışı üç temel yapı kullanılarak oluşturulabilir: Sıralı Yapı İşlemler art arda gerçekleştirilir. Örneğin: A değerini al B değerini al C = A + B C değerini yaz

Burada program herhangi bir seçim yapmadan adımları sırayla uygular. Seçimli Yapı Bir koşulun sonucuna göre farklı işlemler yapılmasını sağlar. Örneğin: EĞER not >= 50 İSE "Geçti" yaz DEĞİLSE "Kaldı" yaz

Programın hangi yolu izleyeceği koşulun sonucuna bağlıdır. Tekrarlı Yapı Bir işlem veya işlem grubunun birden fazla kez gerçekleştirilmesini sağlar. Örneğin: Okunmamış sayfa olduğu sürece Sonraki sayfayı oku

Programlamada bu işlemler döngü yapılarıyla gerçekleştirilir.

Algoritma Oluşturma Örneği Şimdi temel kavramları tek bir örnekte birleştirelim. Problem: Kullanıcının vize ve final notlarını alarak ortalamasını hesaplayan ve 50 veya üzerindeyse “Geçti”, değilse “Kaldı” yazdıran algoritma. Girdiler

  • Vize notu
  • Final notu

İşlem Ortalama = (Vize + Final) / 2

Karar Ortalama >= 50 ?

Çıktı “Geçti” veya “Kaldı”

1.4. Algoritma Analizi Bir algoritmanın doğru sonuç üretmesi temel şarttır. Ancak özellikle büyük miktarda veri işlendiğinde yalnızca doğruluk yeterli olmayabilir. Aynı problemi çözen iki farklı algoritmadan biri diğerine göre:

  • daha az işlem yapabilir,
  • daha hızlı çalışabilir,
  • daha az bellek kullanabilir.

Bu nedenle algoritmaların ne kadar verimli çalıştığı da değerlendirilir. Algoritma analizinde özellikle iki kavram önemlidir:

  • zaman karmaşıklığı,
  • alan karmaşıklığı.

Zaman Karmaşıklığı Zaman karmaşıklığı, veri miktarı büyüdüğünde algoritmanın gerçekleştirmek zorunda olduğu işlem sayısının nasıl değiştiğini ifade eder. Burada doğrudan saniye ölçülmez. Çünkü aynı program farklı bilgisayarlarda farklı sürelerde çalışabilir. Asıl incelenen şudur: Girdi miktarı arttıkça yapılması gereken iş ne kadar artıyor? Örneğin bir listedeki bütün elemanların tek tek kontrol edildiğini düşünelim. 10 eleman → yaklaşık 10 kontrol 100 eleman → yaklaşık 100 kontrol 1000 eleman → yaklaşık 1000 kontrol Veri miktarı arttıkça işlem miktarı da benzer oranda artmaktadır. Alan Karmaşıklığı Alan karmaşıklığı, algoritmanın çalışırken ihtiyaç duyduğu bellek miktarının veri büyüklüğüne göre nasıl değiştiğini ifade eder. Bazı algoritmalar hız kazanmak için daha fazla bellek kullanabilir. Bu nedenle algoritma değerlendirilirken yalnızca ne kadar hızlı çalıştığı değil, ne kadar bellek kullandığı da önemli olabilir. Büyük O Notasyonu Algoritmaların girdi büyüklüğü arttığında nasıl davrandığını ifade etmek için kullanılan temel gösterimlerden biri Büyük O – Big O notasyonudur. Big O bir programın kesin çalışma süresini söylemez. Bunun yerine veri büyüklüğü arttığında işlem miktarının hangi hızla arttığını ifade eder. O(1) – Sabit Zaman İşlem miktarı girdi büyüklüğünden büyük ölçüde bağımsızdır. Örneğin bir dizinin belirli bir elemanına doğrudan erişmek: dizi[5]

Dizi 10 elemanlı da olsa 1 milyon elemanlı da olsa belirtilen konuma doğrudan erişilebilir. O(n) – Doğrusal Zaman Yapılacak işlem miktarı veri büyüklüğüyle birlikte yaklaşık aynı oranda artar. Örneğin listedeki bütün elemanların bir kez kontrol edilmesi. 100 eleman varsa yaklaşık 100 kontrol yapılır. O(n²) – Karesel Zaman Bir veri grubundaki her elemanın başka elemanlarla tekrar tekrar karşılaştırıldığı yapılarda görülebilir. Örneğin her öğrencinin diğer bütün öğrencilerle karşılaştırılması gerekiyorsa öğrenci sayısı arttıkça işlem miktarı çok daha hızlı büyür.

En İyi, En Kötü ve Ortalama Durum Bir algoritma her veri için aynı miktarda işlem yapmak zorunda olmayabilir. Bu nedenle algoritmanın farklı çalışma durumları incelenebilir. En İyi Durum Algoritmanın problemi mümkün olan en az işlemle çözdüğü durumdur. Örneğin bir listede aranan değerin ilk sırada bulunması. İlk karşılaştırmada sonuç elde edilir. En Kötü Durum Algoritmanın mümkün olan en fazla işlemi yaptığı durumdur. Örneğin bir listede aranan eleman yoksa bütün elemanların kontrol edilmesi gerekebilir. Ortalama Durum Algoritmanın genel kullanım koşullarındaki ortalama davranışını ifade eder.

Problem Çözerken Kullanılabilecek Yol Haritası Bir algoritma sorusunda aşağıdaki sıra oldukça kullanışlıdır:

  1. Problemin ne istediğini belirle.
  2. Kullanılacak girdileri belirle.
  3. Üretilecek çıktıyı belirle.
  4. Hesaplamaları belirle.
  5. Koşul gerekip gerekmediğini kontrol et.
  6. Tekrar edilen işlem bulunup bulunmadığını belirle.
  7. Adımları doğru sıraya koy.
  8. Algoritmanın mutlaka sona erdiğini kontrol et.
  9. Örnek girdilerle sonucu test et.

Bu yaklaşım daha karmaşık programlama konularında da kullanılmaya devam edecektir.

  1. Ünite – Bilmen Gereken Temel Kavramlar

Bu ünite tamamlandığında şu kavramları birbirinden ayırabiliyor olmalısın:

  • algoritma,
  • programlama,
  • girdi,
  • işlem,
  • çıktı,
  • kesinlik,
  • etkinlik,
  • sonlu olma,
  • doğruluk,
  • sözlü ifade,
  • kaba kod,
  • akış diyagramı,
  • karar elemanı,
  • işlem elemanı,
  • sıralı yapı,
  • seçimli yapı,
  • tekrarlı yapı,
  • algoritma analizi,
  • zaman karmaşıklığı,
  • alan karmaşıklığı,
  • Büyük O notasyonu,
  • en iyi durum,
  • en kötü durum,
  • ortalama durum.

Ünite Özeti Algoritma, bir problemin çözümü için uygulanacak işlemlerin açık ve belirli bir sıra içinde tanımlanmasıdır. İyi bir algoritma:

  • kesin,
  • etkin,
  • sonlu,
  • doğru

olmalıdır. Algoritmalar sözlü ifade, kaba kod ve akış diyagramları ile gösterilebilir. Algoritmaların çalışma akışında sıralı, seçimli ve tekrarlı yapılar kullanılabilir. Bir algoritmanın yalnızca doğru sonuç üretmesi yeterli değildir. Veri miktarı büyüdüğünde ihtiyaç duyduğu işlem ve bellek miktarı da önemlidir. Bu nedenle algoritmalar zaman ve alan karmaşıklığı açısından incelenebilir. Veri miktarı arttıkça algoritmanın çalışma maliyetinin nasıl değiştiğini ifade etmek için Büyük O notasyonu kullanılabilir.

Bu Üniteyi Pekiştir

Konuyu tamamladıysan çalışma notlarıyla tekrar yapabilir veya seviyene uygun testlerle kendini ölçebilirsin.

Ders Notu

1. Ünite – Temel Kavramlar Ders Notu

Ünitenin düzenli ve kısa özetini incele.

Ders Notunu Aç
Çalışma Notu

1. Ünite – Temel Kavramlar Çalışma Notu

Sınav öncesi kritik bilgilerle hızlı tekrar yap.

Çalışma Notunu Aç
Kolay

Algoritma Kavramı - Kolay Test

20 soru

Temel kavramları kontrol et

Testi Çöz
Orta

Algoritma Kavramı - Orta Test

20 soru

Bilgini uygulamaya geçir

Testi Çöz
Zor

Algoritma Kavramı - Zor Test

20 soru

Detay ve yorum gücünü ölç

Testi Çöz
Karma

Algoritma Kavramı - Karma Test 1

20 soru

Gerçek sınav temposunda kendini dene

Testi Çöz