Lab / CSE 301 / Asymptotic analysis
L1–2Her vizede~45 dk · 11 bölüm

Asymptotic analysis ve loop analizi

Bir algoritmanın running time'ını saniyeyle ölçmeyiz. Input büyüdükçe operation sayısının nasıl büyüdüğüne bakarız. Bu derste O, Ω, Θ definition'larını, bunlarla proof yazmayı ve bir kod parçasının complexity'sini saymayı öğreneceksin.

Running time nedir?

Saniye bilgisayara ve dile göre değişir. Biz onun yerine basic operation sayısını sayarız: comparison, assignment, addition. Her biri constant time sürer. $n$ input size, $T(n)$ de $n$ boyutlu bir input'ta yapılan operation sayısıdır.

Worst-case analysis

Karşında bir adversary olduğunu düşün. Sen algoritmayı ve bir $T(n)$ bound'unu söylüyorsun, adversary en kötü input'u seçiyor. Algoritma her input'ta $T(n)$ içinde bitiyorsa bound doğrudur. Bu yüzden worst-case bound her input için geçerli bir garantidir.

Hocanın vurgusu

Her soru worst case sorusu değildir. "Bu özel input'ta running time ne?" diye de sorulabilir: bir bloğu ters çevrilmiş array, bütün element'leri eşit array, zaten sorted array. Önce input'un ne olduğunu oku, sonra say.

CS161 notlarındaki örnek: MergeSort en fazla $11n\log n + 11n$ operation yapar, InsertionSort yaklaşık $n^2/2$. Constant'lar (11, ½) dile ve makineye göre değişir. Onları atar, yalnızca growth rate'e bakarız. Buna asymptotic analysis denir.

Adversary oyunu: en kötü input hangisi?

Adversary'nin yerine sen geç. Küçük bir array'in bütün permütasyonlarını InsertionSort'a ver ve her birinde kaç comparison ($A[j] > key$ testi) yapıldığını say. Worst-case bound, bu sayıların en büyüğüdür.

Önce tahmin et: $n = 5$ için en kötü input kaç comparison yapar, en iyi input kaç? En kötüsü hangi input?

Growth rate

Oynat'a bas. $n$ büyüdükçe function'ların arası açılıyor. Çubuklar logarithmic scale'de çizildiği için gerçek fark göründüğünden çok daha büyük.

Ezber sıra

$1 \prec \log n \prec \sqrt n \prec n \prec n\log n \prec n^2 \prec n^3 \prec 2^n \prec n!$

Kısaca: constant < log < square root < polynomial < exponential.

log n nereden çıkar? $n$'i 1'e inene kadar kaç kez ikiye bölebilirsin? $n=32$ için 5, $n=1024$ için 10. Her adımda yarıya inen bir şey varsa orada $\log n$ vardır. Bu derste log'un base'i hep 2.

$n = 1024$ iken $n\log n$ kaçtır?

Makine süresi

Operation sayısını saniyeye çevirince fark somutlaşır. Makinenin saniyede $10^8$ basic operation yaptığını varsay ve $n$'i kaydır.

Önce tahmin et: $n = 10^7$ iken $n^2$ operation yapan algoritma bir dakikada biter mi, yoksa günler mi sürer?

Çubuklar süreyi logarithmic scale'de, en yavaş algoritmaya göre gösterir.

O, Ω, Θ definition'ları

Big-O: upper bound $$T(n) = O(f(n)) \iff \exists\, c>0,\ \exists\, n_0 :\ \forall n \ge n_0,\quad 0 \le T(n) \le c\cdot f(n)$$

Öyle bir constant $c$ ve başlangıç noktası $n_0$ seçebilirim ki $n_0$'dan sonra $T$ hep $c\cdot f$'nin altında kalır.

Big-Ω: lower bound $$T(n) = \Omega(f(n)) \iff \exists\, c>0,\ \exists\, n_0 :\ \forall n \ge n_0,\quad 0 \le c\cdot f(n) \le T(n)$$
Big-Θ: tight bound $$T(n) = \Theta(f(n)) \iff T = O(f) \text{ ve } T = \Omega(f) \iff \exists\, c_1,c_2,n_0:\ c_1 f(n) \le T(n) \le c_2 f(n)$$
Sıra önemli

"Bir $c$ ve bir $n_0$ vardır, öyle ki her $n \ge n_0$ için…" Doğrusu bu. "Her $c$ için bir $n_0$ vardır" küçük $o$'nun definition'ıdır (Bölüm 6). $c$ ve $n_0$'ı sen seçersin, ikisi de $n$'e bağlı olamaz.

Grafikte gör

Örnek seç, $c$'yi kaydır. Yeşil bölge $T(n) \le c\cdot f(n)$'in hep sağlandığı yer. Bölgenin başladığı nokta $n_0$. Kırmızı noktalar inequality'nin bozulduğu $n$'ler. $n_0$'ın solundaki gri alan önemsiz bölge: definition oraya hiç bakmaz.

c = 3

$f(n) = O(g(n))$ ise aşağıdakilerden hangisi her zaman doğrudur?

Proof kalıbı: O olduğunu göster

Tarif
  1. Hedef inequality'yi yaz: $T(n) \le c\cdot f(n)$.
  2. Her term'i $f(n)$'e doğru büyüt. $n \ge 1$ iken $n \le n^2 \le n^3$ gibi inequality'leri kullan.
  3. $c$ ve $n_0$'ı sayı olarak yaz, "for all $n \ge n_0$" ile bitir.
Slayt örneği · $2n^2 = O(n^3)$

$c = 2,\ n_0 = 1$: $n \ge 1$ iken $n^2 \le n^3$, yani $2n^2 \le 2n^3$. Başka seçim de olur: $c=1,\ n_0=2$ için $2n^2 \le n^3 \iff 2 \le n$. Tek bir doğru $(c, n_0)$ yok, bir tane bulman yeter.

Slayt örneği · $2n^2 + n = O(n^2)$

İki tarafı $n^2$'ye böl: $2 + \tfrac1n \le c$. $n \ge 1$ iken $\tfrac1n \le 1$, yani $c = 3,\ n_0 = 1$.

S5.5 midterm review · constant term'i yutmak

$2n^2 + 10 = O(n^2)$: $c = 3,\ n_0 = 4$ ($10 \le n^2 \iff n \ge 4$).
$n^3 + n^2 + n + 2026 = O(n^3)$: $c = 4,\ n_0 = 2026$. $n \ge 2026$ iken her term $\le n^3$ (çünkü $2026 \le n \le n^3$), toplam $\le 4n^3$.

Ders: Constant term büyükse $n_0$'ı da o kadar büyük seç.

Genel kural (CS161 notları, Claim 2)

Degree'si $k$ olan her polynomial $O(n^k)$'dir. $a^* = \max_i |a_i|$ ve $n_0 = 1$ seç: her term $\le a^* n^k$, toplam $\le (k+1)a^* n^k$, yani $c = (k+1)a^*$.

Pratik vize S3(b) · çıkmış soru

"Let $f(n) \ge 0$, $g(n) \ge 0$ be two functions, and $a > 0$ be a constant. State whether the statements below are true or not. For each statement that you think is true, show that it is true with a formal argument based on the definitions of asymptotic notations. For false statements, give a counter-example.
(b) If $f(n) = O(n^a)$, then $f(2n) = O(n^a)$."

İpucu 1

Varsayımı definition ile yaz: her $m \ge n_0$ için $f(m) \le c\,m^a$. Bu inequality'yi $m = 2n$ için kullanabilir misin? $n \ge n_0$ ise $2n$ de $n_0$'dan büyük mü?

İpucu 2

$(2n)^a = 2^a n^a$. $a$ sabit olduğu için $2^a$ da bir constant.

Çözümü göster

True.

$f(n) = O(n^a)$ olduğu için bir $c > 0$ ve bir $n_0$ vardır, öyle ki her $m \ge n_0$ için $0 \le f(m) \le c\,m^a$.

$n \ge n_0$ olsun. O zaman $2n \ge n \ge n_0$, yani inequality'yi $m = 2n$ için yazabiliriz:

$$f(2n) \le c\,(2n)^a = (2^a c)\, n^a .$$

$c' = 2^a c$ ve aynı $n_0$ ile her $n \ge n_0$ için $0 \le f(2n) \le c'\, n^a$. Definition sağlanıyor, yani $f(2n) = O(n^a)$. ∎

Neden çalıştı? Argümanı iki katına çıkarmak bir polynomial'ı yalnızca constant factor kadar büyütür. Exponential function'da bu bozulur (Bölüm 5'teki S3(a)).

Pratik vize S3(d) · çıkmış soru

(Sorunun bu bölümle ilgili kısmı; yönerge S3(b) ile aynı.) "(d) If $f(n) \ge 1$, then $f(n) + a = O(f(n))$."

İpucu 1

Hedef: $f(n) + a \le c\,f(n)$. Constant $a$'yı $f(n)$ cinsinden yukarıdan sınırlaman lazım. $f(n) \ge 1$ şartı tam bunun için verilmiş.

İpucu 2

$f(n) \ge 1$ ve $a > 0$ ise $a = a \cdot 1 \le a\,f(n)$.

Çözümü göster

True. $c = a + 1$ ve $n_0 = 1$ seç.

Her $n \ge 1$ için $f(n) \ge 1$ ve $a > 0$ olduğundan $a \le a\,f(n)$. O zaman

$$0 \le f(n) + a \le f(n) + a\,f(n) = (a+1)\,f(n).$$

Definition $c = a+1,\ n_0 = 1$ ile sağlanıyor, yani $f(n) + a = O(f(n))$. ∎

$f(n) \ge 1$ şartı olmasa ne olur? Bölüm 5'teki 2019-20 quiz S2(b) tam olarak bunu soruyor ve orada cevap False.

$5n^2 + 3n + 7 = O(n^2)$ için hangi $(c, n_0)$ çifti çalışmaz?

Disprove kalıbı: O değil

Tarif: proof by contradiction
  1. "Diyelim ki $T = O(f)$. O zaman bir $c$ ve $n_0$ vardır, öyle ki $\forall n \ge n_0$: $T(n) \le c\,f(n)$."
  2. Sadeleştir: bir tarafta sınırsız büyüyen bir ifade, öbür tarafta constant $c$ kalsın.
  3. "$n = \max(n_0, \ldots)$ seçince sol taraf $c$'yi geçer. Contradiction."
CS161 notları, Claim 3 · $n^k \ne O(n^{k-1})$

Diyelim ki her $n \ge n_0$ için $n^k \le c\, n^{k-1}$. İki tarafı böl: $n \le c$. Ama $n = \max(n_0, c+1)$ için $n > c$. Contradiction. ∎

İfade (slayt)SonuçNeden
$10^9 n^2 = O(n^2)$Doğru$c = 10^9$. Constant ne kadar büyük olursa olsun sorun değil.
$100 n^{1.9999} = O(n^2)$Doğru$c = 100,\ n_0 = 1$.
$10^{-9} n^{2.0001} = O(n^2)$Yanlış$10^{-9} n^{0.0001} \le c$ gerekir ama sol taraf sınırsız büyür.
$10^{-8} n^2 = \Theta(n)$YanlışΩ(n) doğru ama O(n) yanlış: $10^{-8} n \le c_2$ contradiction verir.
HW1 4.2 · dene

$16^n$'in $O(2^n)$ olmadığını göster.

İpucu 1

$16^n = (2^4)^n$. $16^n \le c\, 2^n$ inequality'sinin iki tarafını $2^n$'e böl.

İpucu 2

Geriye $8^n \le c$ kalır. $8^n$ sınırsız büyür, $n > \log_8 c$ seçince contradiction çıkar.

2019-20 quiz S2(b) · çıkmış soru

(Sorunun bu bölümle ilgili kısmı; ifadenin doğru mu yanlış mı olduğuna karar ver.) "Considering functions $f(n) \ge 0$, $g(n) \ge 0$ and constant $b > 0$.
b. $f(n) + b = O(f(n))$"

İpucu 1

Bölüm 4'teki pratik vize S3(d) ile karşılaştır. Orada $f(n) \ge 1$ şartı vardı. Burada sadece $f(n) \ge 0$ var. $f$ sıfıra yaklaşırsa ne olur?

İpucu 2

$f(n) = \frac1n$ dene. $\frac1n + b \le c \cdot \frac1n$ inequality'sinin iki tarafını $n$ ile çarp.

Çözümü göster

False. Counterexample: $f(n) = \frac1n$ (her $n \ge 1$ için $f(n) \ge 0$).

Diyelim ki $\frac1n + b = O(\frac1n)$. O zaman bir $c$ ve $n_0$ vardır, öyle ki her $n \ge n_0$ için $\frac1n + b \le \frac{c}{n}$. İki tarafı $n$ ile çarp:

$$1 + b\,n \le c .$$

$b > 0$ olduğu için sol taraf sınırsız büyür. $n = \max(n_0,\ \lceil c/b \rceil + 1)$ seçince $b\,n > c$, yani $1 + b\,n > c$. Contradiction. ∎

Daha kısa bir counterexample: $f(n) = 0$. O zaman $b \le c \cdot 0 = 0$ gerekir, ama $b > 0$.

Ders: $f$ bir pozitif constant'ın altına inebiliyorsa constant $b$ onu domine eder. $f(n) \ge 1$ gibi bir şart varsa ifade doğru olur (S3(d)).

Pratik vize S3(a) · çıkmış soru

"Let $f(n) \ge 0$, $g(n) \ge 0$ be two functions, and $a > 0$ be a constant. State whether the statements below are true or not. For each statement that you think is true, show that it is true with a formal argument based on the definitions of asymptotic notations. For false statements, give a counter-example.
(a) $f(2n) = \Theta(f(n))$."

İpucu 1

Polynomial'larda doğru: $(2n)^2 = 4n^2 = \Theta(n^2)$. Daha hızlı büyüyen bir function dene.

İpucu 2

$f(n) = 2^n$ ise $f(2n) = 2^{2n} = 4^n$. $4^n / 2^n$ neye gider?

Çözümü göster

False. Counterexample: $f(n) = 2^n$. O zaman $f(2n) = 2^{2n} = 4^n$.

$4^n = \Theta(2^n)$ olsaydı $4^n = O(2^n)$ de olurdu: bir $c$ ve $n_0$ için her $n \ge n_0$'da $4^n \le c\,2^n$. İki tarafı $2^n$'e böl: $2^n \le c$. $n = \max(n_0,\ \lceil \log c \rceil + 1)$ seçince $2^n > c$. Contradiction. Yani $f(2n) \ne \Theta(f(n))$. ∎

Θ'nın bozulan tarafı O tarafı. Ω tarafı ($4^n \ge 2^n$) sağlanıyor ama Θ için ikisi birden gerekir.

Pratik vize S3(c) · çıkmış soru

(Sorunun bu bölümle ilgili kısmı; yönerge S3(a) ile aynı.) "(c) If $f(n) = O(g(n))$, $\log(f(n)) \ge 0$ and $\log(g(n)) \ge 0$, then $\log(f(n)) = O(\log(g(n)))$"

İpucu 1

$\log g(n)$ sıfır olabilir. O zaman $c \cdot \log g(n)$ kaç olur?

İpucu 2

Constant function'lar da function'dır: $f(n) = 2$, $g(n) = 1$ dene.

Çözümü göster

False. Counterexample: $f(n) = 2$, $g(n) = 1$.

  • Şartlar sağlanıyor: $f(n) = 2 \le 2 \cdot g(n)$, yani $c = 2,\ n_0 = 1$ ile $f = O(g)$. Ayrıca $\log f(n) = 1 \ge 0$ ve $\log g(n) = 0 \ge 0$.
  • Sonuç sağlanmıyor: $\log f = O(\log g)$ için her $n \ge n_0$'da $1 \le c \cdot 0 = 0$ gerekir. Bu hiçbir $c$ için doğru değil.

İfadeyi bozan, $\log g(n)$'nin 0'da kalması. $g(n) \ge 2$ (yani $\log g(n) \ge 1$) şartı olsaydı ifade doğru olurdu: $c \ge 1$ alırsak $\log f \le \log c + \log g \le (\log c + 1)\log g$.

Θ proof'u, o ve ω

Slayt örneği · $\tfrac12 n^2 - 2n = \Theta(n^2)$

$c_1 n^2 \le \tfrac12 n^2 - 2n \le c_2 n^2$. $n^2$'ye böl: $c_1 \le \tfrac12 - \tfrac2n \le c_2$.

  • Sağ taraf: her $n\ge1$ için $\tfrac12 - \tfrac2n \le \tfrac12$, yani $c_2 = \tfrac12$.
  • Sol taraf: $n = 5$'te $\tfrac12 - \tfrac25 = \tfrac1{10}$ ve $n$ büyüdükçe artıyor, yani $c_1 = \tfrac1{10},\ n_0 = 5$.

Θ için iki inequality'yi ayrı kur, iki constant ve tek bir $n_0$ ver (iki $n_0$'ın büyüğü).

2019-20 quiz S2(a) · çıkmış soru

(Sorunun bu bölümle ilgili kısmı; ifadenin doğru mu yanlış mı olduğuna karar ver.) "Considering functions $f(n) \ge 0$, $g(n) \ge 0$ and constant $b > 0$.
a. $\max\{f(n), g(n)\} = \Theta(f(n) + g(n))$"

İpucu 1

İki sayıdan büyüğü, ikisinin toplamını geçebilir mi? $f$ ve $g$'nin negatif olmadığını unutma.

İpucu 2

Toplam, büyüğün en fazla iki katıdır: $f + g \le 2\max\{f, g\}$.

Çözümü göster

True. $h(n) = \max\{f(n), g(n)\}$ diyelim. $c_1 (f+g) \le h \le c_2 (f+g)$ olacak şekilde constant'lar arıyoruz.

  • Upper bound: $f, g \ge 0$ olduğu için büyüğe öbürünü eklemek onu küçültmez: $h(n) \le f(n) + g(n)$. Yani $c_2 = 1$.
  • Lower bound: $f \le h$ ve $g \le h$, topla: $f + g \le 2h$, yani $\tfrac12 (f+g) \le h$. Yani $c_1 = \tfrac12$.

$c_1 = \tfrac12,\ c_2 = 1,\ n_0 = 1$ ile her $n \ge 1$ için $\tfrac12 (f(n)+g(n)) \le \max\{f(n),g(n)\} \le f(n)+g(n)$. Θ definition'ı sağlanıyor. ∎

Not: Dosyada satır içinde "→FALSE" yazıyor. Bu işaret yanlış: $\max \le f+g \le 2\max$ olduğu için ifade doğru (True). ($b$ bu şıkta kullanılmıyor, (b) şıkkı için verilmiş.)

o ve ω: tight olmayan bound'lar
  • $f = o(g)$: her $c>0$ için bir $n_0$ vardır ki $f < c\,g$. Sezgi: $\lim f/g = 0$. Örnek: $2n = o(n^2)$ ama $2n^2 \ne o(n^2)$.
  • $f = \omega(g)$: $\lim f/g = \infty$.
  • Benzetme: $O \approx\ \le$, $o \approx\ <$, $\Theta \approx\ =$, $\Omega \approx\ \ge$, $\omega \approx\ >$.
2019-20 vizesi S1 · çıkmış soru

"Find 2 functions $f(n)$ and $g(n)$ that satisfy each of relationship. If no such $f$ and $g$ exist, explain why?
a. $f(n) \in O(g(n))$ and $f(n) \notin \Theta(g(n))$
b. $f(n) \in \Theta(g(n))$ and $f(n) \in O(g(n))$
c. $f(n) \in \Theta(g(n))$ and $f(n) \notin O(g(n))$
d. $f(n) \in \Omega(g(n))$ and $f(n) \notin O(g(n))$"

İpucu 1

Θ, O ile Ω'nın birlikte sağlanması demek. (a)'da O var ama Θ yok. O zaman eksik olan hangisi?

İpucu 2

(c)'de Θ'nın definition'ını aç: $c_1 g \le f \le c_2 g$. Sağdaki inequality tek başına neyin definition'ı?

Çözümü göster
  1. $f = n,\ g = n^2$. O: $n \ge 1$ iken $n \le 1 \cdot n^2$ ($c = 1,\ n_0 = 1$). Θ değil, çünkü Ω tarafı bozuk: $c\,n^2 \le n$ demek $n \le 1/c$ demek, $n > 1/c$ seçince contradiction.
  2. $f = n,\ g = n$. $c_1 = c_2 = 1,\ n_0 = 1$ ile $f = \Theta(g)$. Θ zaten O'yu içerdiği için $f = O(g)$ de doğru.
  3. Böyle $f, g$ yok. $f \in \Theta(g)$ ise bir $c_1, c_2, n_0$ için her $n \ge n_0$'da $c_1 g(n) \le f(n) \le c_2 g(n)$. Sağdaki inequality, $c = c_2$ ile O'nun definition'ının ta kendisi. Yani $\Theta(g) \subseteq O(g)$ ve $f \notin O(g)$ olamaz.
  4. $f = n^2,\ g = n$. Ω: $n \ge 1$ iken $n^2 \ge 1 \cdot n$. O değil: $n^2 \le c\,n$ demek $n \le c$ demek, $n = \max(n_0, c+1)$ seçince contradiction.
2019-20 çözüm seti (UNM) D/Y (c)-(d) · çıkmış soru

(Sorunun bu bölümle ilgili kısmı.) "True or False (10 points total). Circle your final answers.
(c) $\log n$ is $o(n^{.01})$
(d) $\log n$ is $\omega(\log\log n)$"

İpucu 1

o ve ω için limite bak: $\lim_{n\to\infty} f(n)/g(n)$ 0 mı, ∞ mu?

İpucu 2

(c)'de $\log n = \ln n / \ln 2$ yaz ve L'Hôpital uygula. (d)'de $m = \log n$ koy.

Çözümü göster

(c) True. Pay ve payda sonsuza gidiyor, L'Hôpital uygulanır:

$$\lim_{n\to\infty} \frac{\log n}{n^{0.01}} = \lim_{n\to\infty} \frac{\frac{1}{n \ln 2}}{0.01\, n^{-0.99}} = \lim_{n\to\infty} \frac{100}{\ln 2 \cdot n^{0.01}} = 0 .$$

Limit 0 ise her $c > 0$ için bir $n_0$ vardır ki $n \ge n_0$'da $\log n < c\,n^{0.01}$. Bu o'nun definition'ı.

Tuzak: küçük $n$'de tablo tersine görünür. $n = 2^k$ koyunca $\log n = k$ ve $n^{0.01} = 2^{k/100}$ olur. $k \le 996$ için $k$ daha büyük, yani $\log n$ ancak $n = 2^{997}$ civarında geride kalıyor. Definition yalnızca $n \ge n_0$'a baktığı için cevap yine True.

(d) True. $m = \log n$ koy. $n \to \infty$ iken $m \to \infty$ ve

$$\frac{\log n}{\log\log n} = \frac{m}{\log m} \to \infty ,$$

çünkü (c)'deki sonuca göre log, her polynomial'dan (burada $m^1$'den) yavaş büyür. Limit ∞ olduğu için $\log n = \omega(\log\log n)$.

Kurallar ve tuzaklar

Kurallar
  • Sum: $f = O(h)$ ve $g = O(h)$ ise $f+g = O(h)$. Proof: $f \le c_1 h$ ($n\ge n_1$), $g \le c_2 h$ ($n \ge n_2$) ⇒ $f+g \le (c_1+c_2)h$, $n \ge \max(n_1,n_2)$.
  • Product: $f = O(F)$, $g = O(G)$ ⇒ $fg = O(FG)$. Nested loop'larda çarparsın.
  • Constant factor: $c\cdot f = \Theta(f)$.
  • Symmetry: $f = O(g) \iff g = \Omega(f)$.
Tuzaklar
  • "MergeSort is $O(n^2)$" doğru ama yanıltıcı: O bir upper bound'dur ve burada tight değildir. Tight cevap $\Theta(n\log n)$. (Hocanın class-prep sorusu 11)
  • "En az $O(n^2)$" anlamsız: lower bound söylemek için Ω kullan.
  • $f = O(g)$ olması $2^f = O(2^g)$ demek değildir: $f = 2n,\ g = n$ ⇒ $4^n$ vs $2^n$, ratio $2^n$ ve sınırsız büyür. (CS161 concept check)
  • Küçük $n$'ler önemsiz: definition yalnızca $n \ge n_0$'a bakar.
  • "$\le$" ile verilen bir recurrence yalnızca O verir, Θ vermez.
2023-24 vizesi S3(a) · çıkmış soru

"(a) (5 points) Suppose that $f(n) = O(n)$ and $g(n) = O(n\log n)$. Prove or disprove: $f(n) + g(n) = O(n\log n)$."

İpucu 1

Önce $f$ için de $n \log n$ cinsinden bir upper bound yaz: $n \le n\log n$ hangi $n$'den itibaren doğru?

İpucu 2

$n \ge 2$ iken $\log n \ge 1$. Sonra sum rule'daki gibi constant'ları topla, $n_0$ olarak en büyüğünü al.

Çözümü göster

Prove (ifade doğru).

  1. $f(n) = O(n)$: bir $c_1, n_1$ vardır, her $n \ge n_1$ için $0 \le f(n) \le c_1 n$.
  2. $g(n) = O(n\log n)$: bir $c_2, n_2$ vardır, her $n \ge n_2$ için $0 \le g(n) \le c_2\, n\log n$.
  3. $n \ge 2$ iken $\log n \ge 1$, yani $n \le n\log n$. O zaman $f(n) \le c_1 n \le c_1\, n\log n$.
  4. $n_0 = \max(n_1, n_2, 2)$ al. Her $n \ge n_0$ için $$0 \le f(n) + g(n) \le c_1\, n\log n + c_2\, n\log n = (c_1 + c_2)\, n\log n .$$

$c = c_1 + c_2$ ve $n_0 = \max(n_1, n_2, 2)$ ile definition sağlanıyor: $f(n) + g(n) = O(n\log n)$. ∎

Puan kaybettiren yer genelde 3. adım: $n = 1$'de $n\log n = 0$ olduğu için $n_0$'a 2'yi eklemeyi unutmak.

Function'ları growth rate'e göre sıralamak

Function'ları growth rate'e göre sıralama sorusunda (HW1 tablosu, concept check) önce her function'ı tanıdık bir biçime çevir.

IdentityÖrnek
$\log(n^k) = k\log n$$\log(n^{10}) = 10\log n = \Theta(\log n)$
$2^{\log n} = n$$2^{3\log n} = n^3$
$2^{(\log n)/2} = \sqrt n$Exponent'teki ½ square root demek
$a^{\log b} = b^{\log a}$$3^{\log n} = n^{\log 3} \approx n^{1.58}$
$n^{1/\log n} = 2$Çünkü $n = 2^{\log n}$. Sonuç bir constant: $\Theta(1)$
$\log(n!) = \Theta(n \log n)$$n! \le n^n$ ve $n! \ge (n/2)^{n/2}$
$\log_a n = \dfrac{\log_b n}{\log_b a}$Base değiştirmek yalnızca constant factor getirir, Θ değişmez
Comparison kuralları
  • Log'un her kuvveti her polynomial function'dan yavaş büyür: $(\log n)^{100} \prec n^{0.01}$.
  • Her polynomial her exponential function'dan yavaş büyür: $n^{100} \prec 1.01^n$.
  • Exponential function'larda base önemlidir: $2^n \prec 3^n$; $(7/8)^n \to 0$.
  • Emin değilsen iki function'ın log'unu karşılaştır ya da $\lim f/g$'ye bak.

Doğru sıra hangisi? $\ \log(n^5),\ (\log n)^2,\ 2^{\log n},\ n^{\log 3}$

Loop sayma kalıpları

"Find the Big-Oh time complexity of the following code fragment" sorusu her yıl çıkıyor. Bir örnek seç ve oynat. Counter operation sayısını, grid de hangi $(i, j)$ çiftlerinin çalıştığını gösteriyor.

KalıpIterationΘ
for i = 1..1010$\Theta(1)$ × body
for i = 1..n / i += 2$n$ / $n/2$$\Theta(n)$
i *= 2 ya da i /= 2$\approx \log n$$\Theta(\log n)$
i*i <= n$\sqrt n$$\Theta(\sqrt n)$
for j = a..b$b - a + 1$Başlangıca bak! j = n..n+5 6 iteration yapar, $n$ değil
ardışık loop'lartopla$\Theta(\max)$
nested, bağımsızçarp$n \cdot m$
inner loop'un bound'u outer loop değişkenine bağlı$\Sigma$ kurformülle closed form'a getir
Summation formülleri $$\sum_{i=1}^{n} i = \frac{n(n+1)}{2} = \Theta(n^2) \qquad \sum_{i=1}^{n} i^2 = \frac{n(n+1)(2n+1)}{6} = \Theta(n^3) \qquad \sum_{i=1}^{n} i^k = \Theta(n^{k+1})$$ $$\sum_{i=0}^{k} 2^i = 2^{k+1}-1 \qquad \sum_{i=1}^{n}\frac1i = \Theta(\log n)$$

Sınav şablonu: (1) içten dışa her loop'un iteration sayısı, (2) $\Sigma$ ile toplam, (3) formülle closed form, (4) dominant term ve Θ. "Show your work" puanı adımlara veriliyor.

2023-24 vizesi S3(c) · çıkmış soru

"(c) (10 points) Find the big-Oh time complexity of the following code fragment:"

int sum = 0;
for (int i = 1; i <= 10; i++) {
    for (int j = n; j <= n + i + 2; j++) {
        sum++;
        sum++;
    }
}

for (int i = 0; i < n; i += 2) {
    sum++;
}
İpucu 1

İlk bloktaki inner loop'un başlangıcına bak: $j$, $n$'den başlıyor. $b - a + 1$ ile iteration sayısını yaz. Sonuç $n$'e bağlı mı?

İpucu 2

İkinci loop'ta $i = 0, 2, 4, \dots$ ve $i < n$. Bu aralıkta kaç çift sayı var?

Çözümü göster
  1. Inner loop: $j = n, \dots, n+i+2$, yani $(n+i+2) - n + 1 = i + 3$ iteration. Her iteration'da 2 tane sum++.
  2. İlk blok: $\displaystyle\sum_{i=1}^{10} 2(i+3) = 2\Big(\sum_{i=1}^{10} i + 30\Big) = 2(55 + 30) = 170$. Bu sayı $n$'e bağlı değil: $\Theta(1)$.
  3. İkinci loop: $i = 0, 2, 4, \dots$ ve $i < n$, yani $\lceil n/2 \rceil$ iteration, her birinde 1 sum++.
  4. Toplam: ardışık blokları topla: $170 + \lceil n/2 \rceil$ tane sum++. Dominant term $n/2$.

Cevap: $O(n)$. Bu bound tight, yani running time $\Theta(n)$. Kontrol: $n = 10$ için sum'ın son değeri $170 + 5 = 175$.

Tuzak: inner loop'u "$n$ kez döner" sanmak. Yine $O(n)$'e varırsın ama gerekçe yanlış olur. Puan $i + 3$ sayımına veriliyor. Yukarıdaki stepper'da "Constant outer loop + kayan başlangıç" örneği bu sorunun küçültülmüş hâli.

Recursive function

Function kendini çağırıyorsa loop saymak yetmez. $T(n) = (\text{kendi işi}) + T(\text{subproblem})$ biçiminde bir recurrence kur, sonra çöz. Bu bir sonraki konu.

Bu kodun Θ'sı ne? for i = 1..n: for j = i..n: for k = 1..10: x++

Sınavda nasıl soruluyor

Çıkmışlar
  • 2023-24 S3(a): $f = O(n)$, $g = O(n\log n)$ ⇒ $f+g = O(n\log n)$? Definition ile proof (Bölüm 7).
  • 2023-24 S3(c): 10 kez dönen bir outer loop, içinde j = n'den n + i + 2'ye giden bir loop ve iki sum++; ardından i += 2 ile ilerleyen ikinci bir loop. Iteration sayısı $b-a+1$, constant bound, ardışık loop'lar.
  • 2019-20 S1: O / Θ / o ilişkilerini sağlayan function çiftleri bul.
  • 2019-20 quiz S2: "$\max\{f,g\} = \Theta(f+g)$", "$f(n)+b = O(f(n))$" doğru mu, gerekçesiyle.
  • Pratik vize S3: $f(2n) = \Theta(f(n))$ her $f$ için doğru mu? Counterexample: $f = 2^n$.
  • HW1 S3–4: O/Ω/Θ tablosu ($\log(n!)$ vs $\log(n^n)$, $n^{1/\log n}$, $8^n$ vs $4^n$) ve iki definition proof'u.

Son kontrol

Kâğıt kalemle çöz, sonra cevaba bak.

$n^3 \ne O(n^2)$ proof'unda contradiction hangi adımda çıkar?

for (i = 1; i*i <= n; i++) x++; kaç iteration yapar?

$\log(n!)$ ile $n\log n$ arasındaki ilişki ne?

"$f = O(g)$ ise $g = O(f)$." Doğru mu?