Bölüm 1.5: Hesaplama ve Hesaplamalı Düşünme

Bilgisayar ve Programlamaya Giriş
HesaplamaBilgisayar tarihiTuring makinesiBilgi ve algoritmaHesaplamalı düşünme
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Öğrenme Çıktıları

Hesaplama

Verinin kurallara göre işlenmesini açıklamak.

Hesaplama modelleri

Turing makinesinin çalışmasını adım adım izlemek.

Bilgi ve algoritma

Bildirimsel ve buyurgan bilgiyi ayırt etmek; Öklid algoritmasını izlemek.

Hesaplamalı düşünme

Ayrıştırma, örüntü, soyutlama ve algoritma tasarımını uygulamak.

Giriş

Hesaplama

Girdiişlenecek veriör. 70, 85, 60, 75İşlemkurallı adımlarör. topla, 4’e bölÇıktıüretilen sonuçör. ortalama 72,5Kaynaklar: zaman · bellek · enerji · iletişim
Hesaplama yalnızca aritmetik değildir. Arama, sıralama, karar verme, dönüştürme ve iletişim de hesaplamadır.

Giriş

Hesaplamanın Yapı Taşları

Matematik

Nicelikler ve ilişkiler üzerinde işlem.

Mantık

Koşulların doğru veya yanlış değerlendirilmesi.

Veri

Problemin temsil edilen girdileri ve ara sonuçları.

Algoritma

İşlemlerin sonlu ve düzenli sırası.

Donanım

Adımları fiziksel olarak yürüten sistem.

Programlama dili

Algoritmayı bilgisayara ifade etme aracı.

Bilgisayar Bilimi

Bilgisayar Bilimi

Bilgisayar bilimi yalnızca araç kullanmayı değil, bilginin nasıl temsil edildiğini ve problemlerin nasıl çözülebileceğini inceler.

Soyutlama

Gereksiz ayrıntıları gizleyerek önemli yapıya odaklanmak.

Algoritmalar

Çözüm adımlarını tasarlamak ve analiz etmek.

Sistemler

Donanım ve yazılımın birlikte çalışmasını anlamak.

İnsan ve toplum

Teknolojinin etkilerini, güvenliğini ve etiğini değerlendirmek.

Bilgisayar Bilimi

Teknoloji ve Sorumluluk

Erişilebilirlik

Farklı kullanıcıların teknolojiye eşit biçimde erişebilmesi.

Mahremiyet

Kişisel verilerin amaçla sınırlı ve güvenli kullanılması.

Adalet

Veri ve algoritmaların ayrımcı sonuç üretmemesi.

Sürdürülebilirlik

Enerji, donanım ömrü ve elektronik atığın dikkate alınması.

Tarih

Hesaplama Tarihinde Dönüm Noktaları

1800'lerBabbage: AnalitikMakine tasarımı;Lovelace: algoritmanotları1930'larTuring: soyuthesaplama modeli;elektronik dijitalilk deneyler1940'larColossus ve ENIAC:elektronikhesaplamamakineleri1950'lerDepolanan programyaygınlaşır;Fortran (1957)GünümüzMobil, bulut,yapay zekâ vedağıtık sistemler
Donanım hızlanıp küçüldükçe aynı temel fikirler (algoritma, depolanan program) daha geniş alanlarda uygulanabilir oldu.

Tarih

Sabit ve Depolanan Program

Sabit programlıMakinekablo / dişli düzeni= programtek görevDepolanan programlıkomut: oku xkomut: toplakomut: yazveri: 42veri: 17BellekCPUkomutu getir
YaklaşımProgram nasıl belirlenir?Esneklik
Sabit programlıMakinenin fiziksel düzeni veya özel mekanizmasıBelirli görev
Depolanan programlıKomutlar bellekte veri gibi saklanırProgram değiştirilerek farklı görevler
Genel amaçlıÇok farklı programları çalıştırabilen mimariGeniş uygulama alanı

Hesaplama Modelleri

Evrensel Turing Makinesi

Turing makinesi, algoritmik hesaplamayı açıklamak için kullanılan soyut bir modeldir.

bant□□1011□□□……durum: q0okuma/yazma başlığı
  • Başlık bir simgeyi okur, yeni simge yazabilir ve sağa veya sola hareket eder.
  • Geçiş kuralı mevcut durum ve simgeye göre sonraki adımı belirler.
  • Evrensel Turing makinesi, bantta verilen başka bir makinenin kurallarını okuyup onu taklit eder: depolanan program fikrinin kuramsal temeli.

Hesaplama Modelleri · Adım adım

Turing Makinesi Adım Adım: 111 + 1

bant□□111□……durum: q0okuma/yazma başlığıGeçiş kuralları(durum, okunan) → yaz, git, yeni durum1) q0, 1 → 0, sola, q02) q0, 0 → 1, dur, DUR3) q0, □ → 1, dur, DURBantta: 111 (ikili) = 7

Başlangıç: bantta 111 (ikili 7) var, başlık en sağdaki basamakta, durum q0. Amaç: sayıya 1 eklemek.

bant□□110□……durum: q0okuma/yazma başlığıGeçiş kuralları(durum, okunan) → yaz, git, yeni durum1) q0, 1 → 0, sola, q02) q0, 0 → 1, dur, DUR3) q0, □ → 1, dur, DURBantta: 110 (ikili) = 6

Okunan 1, durum q0 → kural 1: 0 yaz, başlık sola kayar (elde 1 devam ediyor).

bant□□100□……durum: q0okuma/yazma başlığıGeçiş kuralları(durum, okunan) → yaz, git, yeni durum1) q0, 1 → 0, sola, q02) q0, 0 → 1, dur, DUR3) q0, □ → 1, dur, DURBantta: 100 (ikili) = 4

Okunan 1, durum q0 → kural 1: 0 yaz, başlık sola kayar (elde 1 devam ediyor).

bant□□000□……durum: q0okuma/yazma başlığıGeçiş kuralları(durum, okunan) → yaz, git, yeni durum1) q0, 1 → 0, sola, q02) q0, 0 → 1, dur, DUR3) q0, □ → 1, dur, DURBantta: 000 (ikili) = 0

Okunan 1, durum q0 → kural 1: 0 yaz, başlık sola kayar (elde 1 devam ediyor).

bant□1000□……DURokuma/yazma başlığıGeçiş kuralları(durum, okunan) → yaz, git, yeni durum1) q0, 1 → 0, sola, q02) q0, 0 → 1, dur, DUR3) q0, □ → 1, dur, DURBantta: 1000 (ikili) = 8

Okunan □, durum q0 → kural 3: 1 yaz, makine durur. Bant: 1000 = 8. Her adımı yalnızca (durum, okunan simge) belirledi.

Hesaplama Modelleri

Bilgisayarların Sınırları

Zaman

Büyük girdiler bazı algoritmaları pratik olmaktan çıkarabilir.

Bellek

Veri ve ara sonuçlar sonlu depolama kullanır.

Enerji

Her işlem ve veri aktarımı enerji tüketir.

Hesaplanabilirlik

Bazı problemler için her durumda sonuç veren algoritma yoktur (ör. durma problemi).

Veri kalitesi

Eksik veya hatalı girdi doğru sonucu engeller.

Model sınırı

Program gerçek dünyanın yalnızca seçilmiş özelliklerini temsil eder.

Bilgi ve Algoritma

Bilgi Türleri

Bildirimsel bilgi

Neyin doğru olduğunu veya bir kavramın ne olduğunu açıklar.

Bir üçgenin iç açıları toplamı 180°'dir.
Buyurgan (emirsel) bilgi

Bir sonuca nasıl ulaşılacağını adımlarla açıklar.

Bir sayının karekökünü yaklaşık hesapla.
60°50°70°Bildirimsel: ne doğru?60° + 70° + 50° = 180°olgu bildirir; yöntem vermezBuyurgan: nasıl bulunur?g = 1g = (g + x/g) / 2g² ≈ x ? durdeğilse tekrarlax = 25: 1 → 13 → 7,46 → 5,41 → 5,02 → 5,00
Algoritmalar buyurgan bilgiyi açık, uygulanabilir ve sonlu adımlara dönüştürür.

Bilgi ve Algoritma · Adım adım

Buyurgan Bilgi: Karekökü Yaklaşık Bulma (x = 25)

01234567891011121314√25 = 5Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

Karekökü aranan sayı x = 25.

01234567891011121314√25 = 5tahmin ≈ 1Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

Kaba bir başlangıç tahmini: tahmin = 1.

01234567891011121314√25 = 5tahmin ≈ 1Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

Hata |1² − 25| = 24 → > 0,01: devam.

01234567891011121314√25 = 5tahmin ≈ 13Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

1. tur: tahmin = (1 + 25 / 1) / 2 = 13. Tahmin ile x/tahmin’in ortalaması alınır.

01234567891011121314√25 = 5tahmin ≈ 13Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

Hata |13² − 25| = 144 → > 0,01: devam.

01234567891011121314√25 = 5tahmin ≈ 7,462Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

2. tur: tahmin = (13 + 25 / 13) / 2 ≈ 7,462. Tahmin ile x/tahmin’in ortalaması alınır.

01234567891011121314√25 = 5tahmin ≈ 7,462Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

Hata |7,462² − 25| ≈ 30,67 → > 0,01: devam.

01234567891011121314√25 = 5tahmin ≈ 5,406Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

3. tur: tahmin = (7,462 + 25 / 7,462) / 2 ≈ 5,406. Tahmin ile x/tahmin’in ortalaması alınır.

01234567891011121314√25 = 5tahmin ≈ 5,406Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

Hata |5,406² − 25| ≈ 4,225 → > 0,01: devam.

01234567891011121314√25 = 5tahmin ≈ 5,015Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

4. tur: tahmin = (5,406 + 25 / 5,406) / 2 ≈ 5,015. Tahmin ile x/tahmin’in ortalaması alınır.

01234567891011121314√25 = 5tahmin ≈ 5,015Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

Hata |5,015² − 25| ≈ 0,1527 → > 0,01: devam.

01234567891011121314√25 = 5tahmin ≈ 5Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

5. tur: tahmin = (5,015 + 25 / 5,015) / 2 ≈ 5,00002. Tahmin ile x/tahmin’in ortalaması alınır.

01234567891011121314√25 = 5tahmin ≈ 5Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

Hata |5,00002² − 25| ≈ 0,00023 → ≤ 0,01: yeterince yakın, dur.

01234567891011121314√25 = 5tahmin ≈ 5Soluk noktalar: önceki tahminler. Her tur tahmini √x’e yaklaştırır.

Sonuç yazılır: ≈ 5,0000. 5 turda gerçek değere (5) çok yaklaştı: “nasıl bulunur” bilgisi = buyurgan bilgi.

x = 25
tahmin = 1
while |tahmin * tahmin - x| > 0.01
    tahmin = (tahmin + x / tahmin) / 2
yaz(tahmin)

Bilgi ve Algoritma

Öklid Algoritması

Algoritma, bir problemi sonlu ve açık adımlarla çözen yöntemdir. Bilinen en eski örneklerden biri Öklid’in (MÖ 300 dolayları) algoritmasıdır: iki pozitif tam sayının en büyük ortak bölenini tekrar eden kalan işlemleriyle bulur.

GCD(a, b)
while b ≠ 0
    r = a mod b
    a = b
    b = r
return a
18×1818×1812×1266481848 = 2×18 + 12 ; 18 = 1×12 + 6 ; 12 = 2×6Her şeyi kalansız döşeyen kare: 6×6
GCD(48, 18): 48 mod 18 = 12 · 18 mod 12 = 6 · 12 mod 6 = 0 · sonuç 6

Bilgi ve Algoritma · Adım adım

Öklid Adım Adım: GCD(48, 18)

a = 48b = 184818

GCD(48, 18) çağrılır: a = 48, b = 18. Çubuklar sayıların uzunluğudur.

a = 48b = 184818

b ≠ 0 → 18 ≠ 0 → doğru: 1. tur başlar.

a = 48b = 181818r=1248 = 2 × 18 + 12 → kalan r = 1218

r = a mod b = 48 mod 18 = 12: a’dan b uzunluğunda 2 parça çıkar, 12 kalır.

a = 18b = 181818

a = b → a = 18. Artık küçük sayı bölünen olur.

a = 18b = 121812

b = r → b = 12. Ortak bölen, kalanı da böler; problem küçüldü.

a = 18b = 121812

b ≠ 0 → 12 ≠ 0 → doğru: 2. tur başlar.

a = 18b = 1212r=618 = 1 × 12 + 6 → kalan r = 612

r = a mod b = 18 mod 12 = 6: a’dan b uzunluğunda 1 parça çıkar, 6 kalır.

a = 12b = 121212

a = b → a = 12. Artık küçük sayı bölünen olur.

a = 12b = 6126

b = r → b = 6. Ortak bölen, kalanı da böler; problem küçüldü.

a = 12b = 6126

b ≠ 0 → 6 ≠ 0 → doğru: 3. tur başlar.

a = 12b = 66612 = 2 × 6 + 0 → kalan r = 06

r = a mod b = 12 mod 6 = 0: a’dan b uzunluğunda 2 parça çıkar, 0 kalır.

a = 6b = 666

a = b → a = 6. Artık küçük sayı bölünen olur.

a = 6b = 06(0: bölünecek bir şey kalmadı)

b = r → b = 0. Ortak bölen, kalanı da böler; problem küçüldü.

a = 6b = 06(0: bölünecek bir şey kalmadı)

b ≠ 0 → 0 ≠ 0 → yanlış: döngü biter.

a = 6b = 06(0: bölünecek bir şey kalmadı)

return a → 6. GCD(48, 18) = 6: 48 ve 18, 6 uzunluğundaki parçalarla tam ölçülür. 3 turda bitti.

GCD(a, b)
while b ≠ 0
    r = a mod b
    a = b
    b = r
return a

Hesaplamalı Düşünme

Hesaplamalı Düşünme

Hesaplamalı düşünme, problemleri bilgisayarın veya insanın sistemli biçimde çözebileceği yapılara dönüştürme yaklaşımıdır.

Problem→ çözüm1 · Ayrıştırmabüyük problemi altproblemlere böl2 · Örüntü tanımabenzerlik vetekrarları bul3 · Soyutlamaönemli ayrıntıyaodaklan, gerisini gizle4 · Algoritma tasarımıçözümü açık, sıralıadımlarla yaz

Hesaplamalı Düşünme

Ayrıştırma

Çevrim içi kayıt sistemi

Büyük problem: bir çevrim içi kayıt sistemi. Tek parça olarak ele almak zor.

Çevrim içi kayıt sistemiKullanıcı girişiForm doğrulamaKayıtBildirim

Ana alt görevlere bölünür; her birinin girdisi ve çıktısı ayrı tanımlanır.

Çevrim içi kayıt sistemiKullanıcı girişie-postaparolaForm doğrulamaboş alanbiçimKayıtveri tabanıBildirimonay e-postası

Gerekirse daha da bölünür. Her yaprak küçük, tek başına yazılıp test edilebilir bir iştir.

  • Her alt problem ayrı geliştirilebilir ve test edilebilir.
  • Alt problemlerin girdi ve çıktıları açıkça tanımlanır.
  • Bağımlılıklar erken fark edilir.

Hesaplamalı Düşünme

Örüntü ve Soyutlama

Öğrenciadkimlik noe-postaöğrenci noPersoneladkimlik noe-postabirimZiyaretçiadkimlik noe-postaziyaret tarihi

Üç farklı kayıt türü: öğrenci, personel ve ziyaretçi.

Öğrenciadkimlik noe-postaöğrenci noPersoneladkimlik noe-postabirimZiyaretçiadkimlik noe-postaziyaret tarihi

Örüntü tanıma: ad, kimlik no ve e-posta alanları üçünde de tekrar ediyor.

Öğrenciadkimlik noe-postaöğrenci noPersoneladkimlik noe-postabirimZiyaretçiadkimlik noe-postaziyaret tarihiKişiadkimlik noe-posta+ her türün kendine özgü alanı

Soyutlama: ortak alanlar tek bir Kişi modelinde toplanır; farklı ayrıntılar yalnızca gereken türde kalır.

İyi soyutlama, önemli farkları kaybetmeden tekrar eden yapıyı ortaklaştırır.

Hesaplamalı Düşünme

Algoritma Tasarımı ve Test

Örnek oluşturgirdi–çıktıAdımları yazsözde kodElle izleadım adımSınırları deneen küçük, boş…Düzelttemel nedenhata bulunduysa yeniden yaz ve tekrar izle
  • Normal, en küçük, en büyük ve geçersiz girdiler düşünülür.
  • Her adımın beklenen durumu ürettiği izlenir.
  • Hata bulunduğunda yalnızca belirti değil, temel neden düzeltilir.

Özet

Bölüm Özeti

  • Hesaplama, verinin kurallara göre işlenmesidir; aritmetikle sınırlı değildir.
  • Depolanan program fikri, komutların bellekte veri gibi saklanmasıyla genel amaçlı bilgisayarı mümkün kıldı.
  • Turing makinesi algoritmik hesaplamanın soyut modelidir; her adımı durum ve okunan simge belirler.
  • Buyurgan bilgi bir sonuca nasıl ulaşılacağını anlatır; Öklid algoritması bunun tarihsel örneğidir.
  • Hesaplamalı düşünme; ayrıştırma, örüntü tanıma, soyutlama ve algoritma tasarımını birleştirir.
  • Zaman, bellek, enerji ve hesaplanabilirlik bilgisayarların sınırlarını oluşturur.

Özet

Kontrol Soruları

  1. Hesaplama neden yalnızca aritmetik değildir?
  2. Bildirimsel ve buyurgan bilgiye birer örnek verin.
  3. Sabit programlı ve depolanan programlı makine nasıl ayrılır?
  4. Turing makinesinde bir sonraki adımı ne belirler?
  5. Öklid algoritması neden her zaman durur?
  6. Bir problemi hesaplamalı düşünmenin dört bileşeniyle nasıl ele alırsınız?

Özet

Alıştırmalar

  1. GCD(84, 36)’yı Öklid algoritmasıyla izleyin; her turda a, b, r değerlerini tabloya yazın.
  2. Hesap makinesi, çamaşır makinesi kumandası ve akıllı telefonu sabit ya da depolanan programlı olarak sınıflandırın; gerekçesini yazın.
  3. Bir metro haritası gerçek şehrin hangi ayrıntılarını gizler, hangilerini korur? Bu bir soyutlama olarak neden işe yarar?
  4. Sayıya 1 ekleyen Turing makinesini bantta 1011 ile (başlık en sağda) çalıştırın; bant hangi değerle durur?
  5. Karekök yönteminde x = 10 ve tahmin = 1 ile üç tur yapın; tahmin hangi değere yaklaşıyor?
  6. Bir kütüphane ödünç alma sistemini ayrıştırın: en az dört alt görev ve her birinin girdi/çıktısı; hangi alanlar üye ve personel kayıtlarında ortaktır?

Özet

Kaynaklar

  • Wing, Computational Thinking, Communications of the ACM, 2006.
  • Cormen ve diğerleri, Introduction to Algorithms.
  • Downey, Think Java.
  • Sipser, Introduction to the Theory of Computation.

Son

Hesaplama ve Hesaplamalı Düşünme
Sonraki sunum: Yazılım ve İşletim Sistemleri · Çalışma soruları · Simülatör: Turing Makinesi · Terim sözlüğü
1 / 1Sercan KÜLCÜ, Tüm hakları saklıdır.