Konu haritası ve prova düzeni
Sıfırdan başlıyorsan konu sırasını izle. Bu sayfa konuları bitirdikten sonra kâğıtta prova yapman için. Her soru grubunun ilgili dersine dönüp yöntemi öğrenebilir, sonra soruyu yeniden deneyebilirsin.
Sınav kâğıt üzerinde, Lecture 1–7 kapsamında yapılacak. Tarih, saat ve derslikler henüz açıklanmadı.
Çıkmış vize formları ve öğrenci çalışma çözümleri. Çözümler resmî cevap anahtarı değildir. Duyuru metinleri ↗ · Repo çalışma notu ↗
Resmî kapsam Lecture 1–7 olarak kalıyor. HW1–HW4'ün ilgili soruları, prerequisite quiz, S0.5, S1–S4 ve S5.5 çalışılmalı. Dört form, kapsamın yerine geçmez: heap, red-black tree, median of medians, sorting lower bound ve diğer L1–7 başlıkları formlarda az görünse de kapsamdan çıkarılmış değildir.
| Bölüm | Puan | Kâğıtta beklenen çıktı | Lab dersi |
|---|---|---|---|
| A1–A5 | 25 | BST yüksekliği, büyüme kıyası, toplam, koddan recurrence, özel QuickSort girdisi | BST, asymptotics, recurrences, quicksort |
| B1–B3 | 15 | True/False ve tek cümle gerekçe | Asymptotics, insertion-merge, linear-sorting |
| C1 | 15 | Tablo → parametreler → t. seviye → yapraklar → kapalı toplam | Recurrences |
| D1 | 12 | Partition geriye çözme, QuickSelect boşlukları, çağrı/loop izi | Select, quicksort |
| D2 | 18 | Brute force, lineer combine, D&C, recurrence, correctness | D&C design |
| E1 | 15 | Karşı örnek, kod düzeltmesi, strong induction, slicing maliyeti | Insertion-merge, D&C design |
PDF süre belirtmiyor. Aşağıdaki çalışma blokları öneridir, resmî sınav süresi değildir.
Part A · Beş soru, beş beceri
BST’de her anahtarı kökten başlayarak yerleştir. Height için en uzun yoldaki kenarları say. Complexity kıyasında iki fonksiyonun oranına, kod analizinde alt çağrı sayısı ve alt problem boyutuna bak.
Konuya dön · BST, büyüme ve algoritma analizi →Seçeneklere bakmadan sonucu bul; sonra PDF’teki harfi işaretle.
Height hesabında ne sayılır?
İpucu
Çözümü ve gerekçeyi göster
| Soru | Form A | Form B | Form C | Form D |
|---|---|---|---|---|
| A1 | B: h=3; 5→2→4→3 | C: h=4; 4→6→7→8→9 | C: h=4; 7→2→5→3→4 | D: h=5; 2→7→3→6→4→5 |
| A2 | C: O, Ω, Θ | A: yalnız O | B: yalnız Ω | C: O, Ω, Θ |
| A3 | C: Θ(n log n) | B: Θ(n) | D: Θ(n²) | C: Θ(n log n) |
| A4 | D: Θ(n^(log_(3/2) 3)) | A: Θ(n^(log_(4/3) 2)) | B: Θ(n^(log_(3/2) 2)) | C: Θ(n^(log_(4/3) 3)) |
| A5 | B: expected Θ(n log n) | C: Θ(n²) | A: expected Θ(n²) | D: Θ(n²) |
A1: Height kenar sayısıdır; tek düğümün yüksekliği 0. Insert sırasını izleyerek ağacı çiz; red-black balancing uygulanmıyor.
A2: A'da n^(log₂3) = 3^(log₂n). B'de (log₂n)^7 / n^0.7 → 0. C'de log₂(√n) / √(log₂n) = √(log₂n)/2 → ∞. D'de 32^(log₂n) = n^5. O ve Ω aynı anda varsa Θ da vardır.
A3: A: n'i log n kez topla. B: azalan geometric series, toplam n ile 2n arasında. C: n'i n kez topla. D: n H_n, harmonic series H_n = Θ(log n).
A4: Sırasıyla T(n)=3T(2n/3)+Θ(1), 2T(3n/4)+Θ(n), 2T(2n/3)+Θ(n), 3T(3n/4)+Θ(n²). b, kalan parçanın tersidir: 2n/3 için b=3/2. Örtüşen parçalar veya tekrarlanan aynı çağrı da ayrı iş yapar. D'de log_(4/3)3 > 2 olduğundan yapraklar baskın; otomatik olarak n² log n çıkmaz.
A5:
- A: Her değer yalnız iki kez var. Bounded multiplicity, random pivot altında expected Θ(n log n) sonucunu korur; Θ(n) tane eşit değer içeren girdiden farklıdır.
- B: İlk pivot 2, sol tarafta yalnız 1 bırakır; sağ tarafta en küçük/ikinci en küçük pivotlarla sabit sayıda eleman elenir. Lineer partition işleri n, n−O(1), … boyutlarda sürer ve Θ(n²) olur. Küçük bir izde sağ parça [4,3,6,5,8,7] olur.
-
C: n/2 tane sıfır birbirinden ayrıştırılamaz;
<=partition bunları aynı tarafa gönderir. Her sıfır çifti sonunda karşılaştırılır: Ω(n²), üst sınır O(n²). Random pivot bu iki yönlü partition'ın eşitlik sorununu çözmez. - D: Son pivot n/2 ilk adımda iki yarı oluşturur, fakat sol yarı sıralıdır. Son eleman pivotuyla bu n/2 elemanlık sıralı parça tek başına Θ(n²) iş çıkarır.
Part B · Cevap + bir cümle gerekçe
RadixSort digit digit sıralar. Base r’de M farklı değeri göstermek için yaklaşık log_r M digit gerekir. Süre: pass sayısı × (n+r). Asymptotic önermelerde tanımdaki eşitsizliği yaz; False ise tek karşı örnek yeter.
Konuya dön · RadixSort ve çalışma süresi →True/False seçimi tek başına yetmiyor. Her soruya bir cümle gerekçe yaz.
n^(log₂n) sınırına kadar sayıları base n ile RadixSort etmek worst case ne kadar sürer?
İpucu
Çözümü ve gerekçeyi göster
| Soru | Cevap | Kâğıda yazılabilecek gerekçe |
|---|---|---|
| A–B1 | True | 0≤f≤cg olduğunda g≤g+f≤(1+c)g, dolayısıyla g=Θ(g+f). |
| A–B2 | True | T(n)=4T(n/4)+Θ(n); log₄n seviye ve her seviyede Θ(n) iş vardır. |
| A–B3 | True | n²−1 en çok iki base-n digit ister; 2·Θ(n+n)=Θ(n). |
| B–B1 | False | f(n)=1000n=o(n²)=g(n), ama örneğin n=10 için f(n)>g(n); asimptotik üstünlük her girdi boyutunda üstünlük değildir. |
| B–B2 | False | T(n)=T(n−1)+Θ(n)=Θ(n²); dengeli ikiye bölme kaybolmuştur. |
| B–B3 | True | n³−1 en çok üç base-n digit ister; sabit sayıda Θ(n) pass vardır. |
| C–B1 | True | f≤cg eşitsizliğini h≥0 ile çarpmak fh≤cgh verir; h'nin sıfır olması sorun değildir. |
| C–B2 | False | İki yarıyı ikişer kez çözmek T(n)=4T(n/2)+Θ(n)=Θ(n²) verir. |
| C–B3 | False | Base 2'de worst case ⌈log₂n⌉ pass, her pass Θ(n+2); toplam Θ(n log n). |
| D–B1 | True | h(n)→∞ olduğundan yeterince büyük n için h(n)≥n₀ ve f(h(n))≤cg(h(n)). |
| D–B2 | True | T(n)=2T(n/2)+Θ(n²); level işleri n²,n²/2,n²/4,… olduğundan toplam Θ(n²). |
| D–B3 | False | n^(log₂n) aralığı base n'de ⌈log₂n⌉ digit gerektirir; worst case Θ(n log n). |
Part C · Recursion tree’yi kâğıtta çöz
Bir çağrı a alt çağrı üretiyor, her biri b kat küçülüyorsa t. seviyede a^t problem ve n/b^t boyutu vardır. Önce tek problemin işini, sonra o seviyenin toplamını bul. Boyut 1 olduğunda dur.
Konuya dön · Recursion tree →Bir formun C1 tablosundan a,b,d’yi çıkar; Master theorem kullanmadan level toplamını yaz.
T(n)=3T(n/4)+n ve T(1)=1 için kapalı form hangisi?
İpucu
Çözümü ve gerekçeyi göster
T(n)=aT(n/b)+n, T(1)=1. Bütün formlarda d=1: root işinin n olması bunu verir. t. seviyede a^t problem, her biri n/b^t boyutunda; toplam iş n(a/b)^t. h=log_b n, h+1 seviye, son seviyede a^h=n^(log_b a) yaprak ve aynı miktarda iş.
q=a/b < 1 ve yaprak seviyesi dahil:
T(n) = n(1−q^(h+1))/(1−q).
| Form | a,b,d | t. seviyenin işi | Seviye sayısı | Yaprak işi | Kapalı form |
|---|---|---|---|---|---|
| A | 3,4,1 | n(3/4)^t | log₄n+1 | n^(log₄3) | 4n−3n^(log₄3) |
| B | 2,3,1 | n(2/3)^t | log₃n+1 | n^(log₃2) | 3n−2n^(log₃2) |
| C | 2,4,1 | n(1/2)^t | log₄n+1 | √n | 2n−√n |
| D | 4,6,1 | n(2/3)^t | log₆n+1 | n^(log₆4) | 3n−2n^(log₆4) |
Hepsinde Θ(n); en çok işi root yapar. Tabloyu kontrol: A'da n=64 için 64+48+36+27=175; B'de n=81 için 81+54+36+24+16=211; C'de n=256 için 256+128+64+32+16=496; D'de n=216 için 216+144+96+64=520.
Part D1 · Partition ve QuickSelect
Partition pivotu sıralı dizideki son konumuna koyar. QuickSelect iki tarafı birden sıralamaz: hedef indeks soldaysa sola, sağdaysa sağa iner. [start,end) aralığında end dahil değildir; 1-based rank k için hedef indeks k−1 olur.
Konuya dön · QuickSelect →PDF’teki dört boşluğu doldur ve last-pivot örneğini kâğıtta izle.
Form D’de k=3 (rank), partition r=2 döndürüyor. Ne yapılır?
İpucu
Çözümü ve gerekçeyi göster
Partition geriye çözme
Yalnızca “solu küçük, sağı büyük” görünümüne bakarak pivotu kesin belirleyemezsin. Adayı orijinal dizide bul, verilen swap algoritmasıyla son diziyi doğrula.
| Form | Pivot değeri | Orijinal indeks p | Return r |
|---|---|---|---|
| A | 7 | 1 | 4 |
| B | 6 | 2 | 4 |
| C | 10 | 2 | 4 |
| D | 5 | 6 | 2 |
Boşluklar
Aralıklar [start,end); end dahil değil. A/B/C'de k 0-based global index. D'de k 1-based global rank; hedef indeks k−1, recursive call'da k değişmiyor.
| Form | (a) | (b) | (c) | (d) |
|---|---|---|---|---|
| A | r == k | k < r | start, r, k | r+1, end, k |
| B | end-start == 1 | k < r | start, r, k | r+1, end, k |
| C | end-start > 1 | end = r | start = r+1 | A[start] |
| D | r == k-1 | k-1 < r | start, r, k | r+1, end, k |
def quick_select(A, start, end, k): # k: global 0-based index
if end - start == 1:
return A[start]
r = partition(A, start, end, end - 1) # trace için last pivot
if r == k:
return A[r]
if k < r:
return quick_select(A, start, r, k)
return quick_select(A, r + 1, end, k)
Last-pivot izleri ve sayım
Her partition sonrası değişmiş diziyle devam et. Baştaki diziden tekrar başlama.
| Form | Verilen girdi; k | Her çağrı/loop başında (start,end) | Return |
|---|---|---|---|
| A | [7,4,3,6,1,9]; k=4 | (0,6) → (0,5) → (1,5) | 7 |
| B | [1,7,6,5,3,8]; k=4 | (0,6) → (0,5) → (2,5) | 7 |
| C | [4,6,7,5,2,3]; k=2 | (0,6) → (2,6) → (2,4) | 4 |
| D | [8,4,2,6,1,7]; k=3 (rank) | (0,6) → (0,4) → (1,4) | 4 |
A/B'de partition en çok n−1 kez (n=1 için 0). C'nin yukarıdaki >1 loop'u en çok n−1 tur. D'de ilk çağrı ve tek elemanlı base case dahil toplam en çok n çağrı. Her adım en az pivotu çıkarır; yalnız bir alt parçaya girilir. Çağrı sayısının O(n) olması süreyi O(n) yapmaz: worst case partition işleri toplamı Θ(n²).
Pivot her adımda son eleman. Önce sıradaki aralığı tahmin et, sonra bir adım aç.
Part D2 · Merge ile çift sayma
Önce iki yarının kendi içindeki çiftlerini say. Sonra soldan bir x ve sağdan bir y içeren cross çiftleri say. Yarılar sıralıysa uygun y’ler kesintisiz bir prefix veya suffix oluşturur; tek pointer bu sınırı izler.
Konuya dön · Merge ile çift sayma →Önce Θ(n²) çözümü yaz; sonra sorted half’ları kullanarak lineer combine tasarla.
L ve R sıralı; x > 2y koşulunda j kaç uygun R elemanını gösteriyor. Sonraki x için j?
İpucu
Çözümü ve gerekçeyi göster
1. Brute force
Her i için j=i+1,…,n−1 değerlerini dolaş; formdaki koşul doğruysa sayacı artır. n(n−1)/2 çift kontrolü, Θ(n²) süre.
2. Lineer combine
L ve R artan sıralı; L, orijinal dizinin sol yarısından, R sağ yarısından gelir. Her iki yönde de pointer yalnız ileri gider: toplam O(len(L)+len(R)).
def cross_count(L, R, form):
j = 0
count = 0
for x in L:
if form == "A": # x > 2*y
while j < len(R) and x > 2 * R[j]:
j += 1
count += j
elif form == "C": # x > y+5
while j < len(R) and x > R[j] + 5:
j += 1
count += j
elif form == "B": # y > 3*x
while j < len(R) and R[j] <= 3 * x:
j += 1
count += len(R) - j
else: # D: y > x+10
while j < len(R) and R[j] <= x + 10:
j += 1
count += len(R) - j
return count
A/C'de uygun y'ler R'nin prefix'i; B/D'de suffix'i. j'yi her x için sıfırlama. Strict > eşitlikte saymaz; B/D'de bu yüzden atlanacakların koşulu <=. Sabit form için branch kontrolü O(1).
3. Divide and conquer
def count_pairs(A, form):
if len(A) <= 1:
return A[:], 0
m = len(A) // 2
L, left_count = count_pairs(A[:m], form)
R, right_count = count_pairs(A[m:], form)
cross = cross_count(L, R, form)
return merge(L, R), left_count + right_count + cross
merge iki sıralı listeyi lineer zamanda birleştiren standart yordamdır. CountDrops/CountJumps/CountFalls/CountRises sırasıyla A/B/C/D formunu kullanır; istenen sonuç dönen çiftin ikinci bileşenidir.
4. Running time
T(n)=T(⌊n/2⌋)+T(⌈n/2⌉)+Θ(n)=Θ(n log n). Slicing, combine ve merge toplam Θ(n) iş; her seviyede Θ(n), Θ(log n) seviye. Canlı ek bellek O(n), çağrı derinliği O(log n).
5. Correctness
Inductive hypothesis: kısa listelerde yordam sıralı listeyi ve doğru sayıyı döndürür. Her i<j çifti tam bir sınıftadır: ikisi sol yarıda, ikisi sağ yarıda veya biri solda biri sağda. İlk iki sınıf induction ile sayılır. Cross sınıfında orijinal i<j koşulu yarı üyeliğinden gelir; yarıyı sıralamak bu üyeliği değiştirmez. Sıralı R'deki uygun prefix/suffix her x için tam olarak bir kez sayılır. Sınıflar ayrık ve tüm çiftleri kapsar; merge de sıralı listeyi verir. Dizinin tamamını başta sıralamak i<j bilgisini yok eder.
Kontrol örnekleri: A [5,9,2,8,3,1] → 8; B [4,1,13,2,9,20] → 7; C [12,3,15,9,1,7] → 6; D [5,18,2,14,30,11] → 6. PDF'lerdeki cross örnekleri sırasıyla 3,3,4,4 verir.
Önce i<j çiftlerini kâğıtta say. Eşitlikte sayılmayan çiftlere dikkat et. Sonra iki-pointer sonucuyla karşılaştır.
2–16 farklı pozitif tam sayı; her biri en çok 1.000.000.
Part E · Form A · IsSorted: sınır kontrolü eksik
Counterexample algoritmanın yanlışını gösteren tek girdidir. Strong induction’da daha kısa bütün listeler için doğruluğu varsay, sonra bölme ve combine adımlarının bu varsayımdan nasıl doğru sonuç ürettiğini açıkla.
Konuya dön · Correctness şablonu →Önce PDF’teki soruyu kâğıtta dene; sonra düzeltmeni ve gerekçeni karşılaştır.
IsSorted([1,3,2,4]) hatasını hangi kontrol düzeltir?
İpucu
Çözümü ve gerekçeyi göster
IsSorted([1,3,2,4]) True döndürür; uçlar 1<4 ve iki yarı kendi içinde sıralıdır, ama orta sınırda 3>2 vardır. Genel hata: recursive kontrollerden geçen, ilk elemanı son elemanından küçük olan fakat ortadaki komşuları ters duran listeyi kabul edebilir. Herhangi bir alt çağrıdaki bu hata da yukarı taşınabilir.
return (A[n//2 - 1] < A[n//2]
and IsSorted(A[:n//2]) and IsSorted(A[n//2:]))
Inductive step: n≥2 için her iki yarı daha kısadır; hypothesis sayesinde iki recursive sonuç o yarıların sıralılığına denktir. Bütün listenin sıralı olması, iki yarının sıralı olması ve solun son elemanının sağın ilk elemanından küçük olmasına denktir. Düzeltilen satır tam bu üç koşulu kontrol eder.
Part E · Form B · FindMax: n=1 base case eksik
Recursive algoritma her mümkün en küçük parçayı karşılamalıdır. n=2’de durmak n=1’de durmayı sağlamaz. Önce tek elemanlı girdiyle kodu çalıştır; sonra her recursive parçanın daha kısa olduğunu göster.
Konuya dön · Base case ve induction →Önce PDF’teki soruyu kâğıtta dene; sonra düzeltmeni ve gerekçeni karşılaştır.
FindMax’te yalnız n==2 base case olması neden sorun?
İpucu
Çözümü ve gerekçeyi göster
FindMax([4,9,2]) bir elemanlı listeye iner, ardından boş listeyi recursive olarak çağırır; matematiksel olarak sonlanmaz, Python'da RecursionError oluşur. Eski kod yalnız n=2^k, k≥1 uzunluklarında çalışır; diğer uzunluklarda recursion tree'de n=2'ye ulaşmadan n=1 dalı oluşur. n=1 de çalışmaz.
if n == 1:
return A[0]
# mevcut n==2 base case kalabilir; geri kalan kod aynı
Inductive step: n=2 mevcut base case ile doğru. n≥3 için iki yarı boş değildir ve n'den kısadır; hypothesis her birinin maximum'unu verir. İkisinin maximum'u ayrık birleşimlerinin, yani A'nın maximum'udur. n=2 özel durumunu kaldırıp yalnız n=1 base case bırakmak da doğrudur; o sürümde step doğrudan n≥2'yi kapsar.
Part E · Form C · Contains: orta eleman atlanmış
Python’da A[:m], m indeksini içermez; A[m:] ise m’den başlar. Bu iki parça birlikte bütün listeyi kapsar. Aranan öğe solda veya sağda ise OR ile bulunur.
Konuya dön · Bölmenin bütün girdiyi kapsaması →Önce PDF’teki soruyu kâğıtta dene; sonra düzeltmeni ve gerekçeni karşılaştır.
Contains’ta sağ yarı A[n//2+1:] ile başlarsa ne olur?
İpucu
Çözümü ve gerekçeyi göster
Contains([4,7,1],7) False döndürür. Her non-base call A[n//2]'yi atlar. Aranan değer yalnız atlanan konumlarda bulunuyorsa False yanlış olur; başka bir kopyası incelenen konumda bulunursa True yine doğru olabilir.
return Contains(A[:n//2], x) or Contains(A[n//2:], x)
Inductive step: n≥2 için iki yarı daha kısadır ve birlikte A'nın tamamını, hiç eleman atlamadan kapsar. Hypothesis ile her recursive sonuç x'in o yarıda bulunmasına denktir. x birleşimde ancak ve ancak en az bir yarıda bulunduğundan OR doğru sonucu verir.
Part E · Form D · CountBig: orta eleman iki kez sayılıyor
İki yarının sayılarını toplamak için parçalar ayrık olmalıdır. Ortak eleman iki kez sayılabilir. Python slice yeni liste kopyalar; eleman sayısı n olan iki yarıyı oluşturmak toplam Θ(n) iş ister.
Konuya dön · Ayrık parçalar ve slicing maliyeti →Önce PDF’teki soruyu kâğıtta dene; sonra düzeltmeni ve gerekçeni karşılaştır.
CountBig’in başlangıç girdisi çift uzunlukluysa eski kod kesin doğru mu?
İpucu
Çözümü ve gerekçeyi göster
CountBig([6,9,2],5) 3 döndürür; 9 iki yarıda da bulunur. Tek uzunluklu herhangi bir alt çağrıda ortak orta eleman x'ten büyükse fazladan sayılır. Başlangıç uzunluğu çift olsa da alt çağrılar tek olabilir (n=6 → 3+3). Kod yalnız fazla sayabilir; böyle bir ortak uygun eleman yoksa sonuç doğrudur.
return CountBig(A[:n//2], x) + CountBig(A[n//2:], x)
Inductive step: n≥2 için iki yarı boş değildir, daha kısadır ve ayrık birleşimleri A'dır. Hypothesis her yarıda x'ten büyüklerin doğru sayısını verir. Ayrık kümelerde sayılar toplandığından yeni satır bütün listedeki doğru sayıyı döndürür.
Slicing: dört form için ortak maliyet
Düzeltilmiş kodların worst case recurrence'ı T(n)=T(⌊n/2⌋)+T(⌈n/2⌉)+Θ(n), sonuç Θ(n log n). Python list slice'ları kopyadır; iki yarının toplam kopyalama maliyeti Θ(n). A/C'de short-circuit bazı çağrıları atlayabilir; bütün dalları gezen girdiler worst case'i gerçekleştirir (A: sıralı liste; C: x listede yok). İndeks aralıklarıyla kopyasız yazılsaydı bu dört algoritmanın worst case'i Θ(n) olurdu; verilen slicing'li kod için bunu yazma.
Kâğıtta prova ve son kontrol
Önce PDF’teki soruyu kâğıtta dene; sonra düzeltmeni ve gerekçeni karşılaştır.
Düzeltilmiş Contains, Python list slice’larıyla worst case ne kadar sürer?
İpucu
Çözümü ve gerekçeyi göster
Sıfırdan başlarken ilk iş bir formu bitirmek değil, aşağıdaki konu sırasını çalışmaktır. Her derste küçük örneği uygula, kontrol sorusunu cevapla, sonra aynı bölümdeki çıkmış soruyu dene. Takıldığında ipucunu aç; çözümü okuduktan sonra kapatıp benzer bir soruyu kendin çöz.
- Asymptotics → recurrences → substitution: O/Ω/Θ, loop sayma, recursion tree ve induction.
- InsertionSort/MergeSort → QuickSort: trace, correctness, özel input ve partition.
- Select/QuickSelect → lower bound/RadixSort: tek tarafa recursion, index/rank, digit/pass.
- Heap → BST/red-black tree: yapı, operation maliyeti ve height.
- D&C design: algoritma kurma, merge ile çift sayma ve “tam bir kez” ispatı.
Konuları öğrendikten sonra aşağıdaki prova bloklarına geç:
- Tanı · 25 dk: Bir formun Part A/B'sini kapalı kaynak çöz. B'de her cevabın yanına bir cümle gerekçe yaz. Yanlışı ilgili lab dersine bağla.
- Recursion tree · 25 dk: Bir C1'i Master theorem olmadan çöz; sonra farklı a,b ile yeni bir tablo kur. Yaprakları iki kere ekleme, h+1 seviyeyi unutma.
- Partition/QuickSelect · 30 dk: Her swap'ta diziyi yaz. A/B/C indeks, D rank; her satırda start,end,pivot,r ve sonraki aralığı göster.
- Tasarım · 40 dk: A/C prefix ve B/D suffix sayımını kâğıtta yaz. Eşitlik sınırlarını ve tek elemanlı girdiyi dene; recurrence ve “tam bir kez” ispatını ekle.
- Correctness · 30 dk: E1 için karşı örnek → tek satır düzeltme → induction hypothesis → inductive step → slicing maliyeti sırasını dört formda uygula.
- Prova: Henüz çözmediğin formu tek oturumda kâğıtta çöz; süreyi kendin kaydet. Resmî süre duyurulunca ona göre yeniden prova yap. Puanları A/B/C/D/E için 25/15/15/30/15 üzerinden ayrı hesapla; bu dağılım yayımlanan formlara aittir.
- Kapsam turu: L1–7'de formların doğrudan sormadığı başlıkları, HW1–HW4 ve S5.5'i tamamla. Son gün yeni cevap ezberlemek yerine yanlışlarını yeniden çöz.
Lab: vize çalışması · tüm dersler.
Yazdırma, açık/kapalı tüm çalışma çözümlerini içerir. Kapalı kitap prova için yukarıdaki orijinal PDF’lerden birini yazdır.