Fonksiyonların büyümesi ve algoritma karmaşıklığı
Big-O, Big-Omega ve Big-Theta tanımları, tanık (witness) bulma, 'O değildir' ispatı, büyüme sıralaması ve döngü sayma. Vizenin son konusu.
Bu hafta vizenin son konusu. Soru tipleri belli ve mekanik: “Show that f is O(g), give witnesses”, “show that f is not O(g)”, “arrange in order of growth” ve “how many times is this line executed?”. Hepsinin bir şablonu var. Altın kurallar:
- Big-O bir üst sınırdır. Saniye ölçmez, girdi büyüdükçe adım sayısının nasıl büyüdüğünü söyler.
- Tanıkları (witnesses) ikisini birden yaz: ve . Biri eksikse puan eksik.
- Sabit çarpanlar ve küçük terimler önemsiz. ile aynı sınıfta.
- “O değildir” ispatı her zaman çelişkiyle yapılır. Tanımı varsay, böl, sınırsız bir şeyin sabitten küçük olduğu sonucuna var.
- Döngü sayarken önce dış döngünün tek bir turunu düşün, sonra turları topla.
Big-O tanımı
ve fonksiyonlar olsun. f(x) is O(g(x)) demek şu demek:
ve sabitlerine tanık (witness) denir. Sezgi: bir noktadan sonra () ‘nin grafiği, ‘nin katının üstüne hiç çıkmaz. Başlangıçta ne yaptığı önemsiz.
Tanık çifti tek değildir. Bir çift çalışıyorsa daha büyük veya daha büyük da çalışır. Sınavda tek doğru çift istenmez, çalışan bir çift istenir.
| Gösterim | Okunuşu | Anlamı | Tanım |
|---|---|---|---|
| Big-O | en fazla kadar hızlı büyür | , | |
| Big-Omega | en az kadar hızlı büyür | , | |
| Big-Theta | ile aynı hızda büyür |
= hem hem . Bu yüzden sorusunda iki ayrı eşitsizlik yazarsın.
Tanık bulma şablonu
Polinomlar için üç satırlık bir tarif var. Örnek: is .
When x > 1 we have x < x^2 and 1 < x^2.
Hence 4x^2 + 7x + 3 <= 4x^2 + 7x^2 + 3x^2 = 14x^2 for x > 1.
So f(x) is O(x^2) with witnesses C = 14 and k = 1.
Hile: iken küçük kuvvetleri en büyük kuvvete büyütmek serbest, çünkü ifadeyi büyütüyorsun ve eşitsizliğin yönü korunuyor. Sonra katsayıları topla: .
TUZAK · “for x > 1” cümlesi. Eşitsizliğin hangi ‘ler için geçerli olduğunu yazmazsan ‘yı söylememiş olursun. aralığında olduğu için büyütme hilesi orada çalışmaz; tam olarak bu yüzden.
Theta: alt sınır bedava
is :
- Üst sınır: için , yani .
- Alt sınır: pozitif terimleri atınca ifade küçülür: , yani .
Sonuç: için . Üç sabiti (, , ) birlikte yaz.
Negatif katsayı varsa ( gibi) alt sınır bedava değildir. O zaman gibi bir eşitsizlik kullanıp ‘yı büyütürsün. Vizede genelde pozitif katsayılı polinom gelir.
“O değildir” ispatı (çelişki)
Bir fonksiyonun olmadığını göstermek için örnek yetmez; tanımın hiçbir ile sağlanamayacağını göstermen gerekir. Şablon çelişkidir. Örnek: is not .
Proof. Suppose, for contradiction, that n^3 is O(7n^2).
Then there are constants C and k with n^3 <= C * 7n^2 for all n > k.
Dividing both sides by n^2 > 0 gives n <= 7C for all n > k.
But this fails for any integer n > max(k, 7C).
This is a contradiction, so n^3 is not O(7n^2). ∎
Türkçesi: bölme işleminden sonra “sınırsız büyüyen , sabit ‘den hep küçük” gibi saçma bir sonuç çıkıyor. Hangi ‘yi seçersen seç, ve sonrası bunu bozar. Mesela için : .
İPUCU · aynı şablon üstellerde. is not : varsay, iki tarafı ‘e böl, çıkar. sınırsız. Çelişki.
Büyüme sıralaması
Küçükten büyüğe, ezberlenecek zincir:
Kurallar:
- Toplamda en hızlı büyüyen terim kazanır: is .
- Çarpımda sınırlar çarpılır: is .
- Logaritmanın tabanı önemsiz: , sadece sabit çarpan.
- Üsse sabit eklemek önemsiz, üssü çarpmak önemli: is ; ama değil.
- Tabanı 1’den büyük her üstel, her polinomu sonunda geçer: bile ‘ü geçer.
Algoritmaların karmaşıklığı
Zaman karmaşıklığı (time complexity): algoritmanın yaptığı temel işlem (karşılaştırma, toplama) sayısının girdi boyutu ‘e göre ifadesi. Genelde en kötü durum (worst-case) sorulur: girdi ne kadar kötü olursa olsun en fazla kaç işlem.
| Algoritma | En kötü durum | Neden |
|---|---|---|
| Linear search | karşılaştırma, | Aranan yoksa her elemana bakarsın |
| Binary search | yaklaşık tur, | Her turda aralık yarıya iner |
| Bubble sort | karşılaştırma, | |
| İç içe iki tam döngü | işlem | Her dış tur için iç tur |
Örnekler: 50 elemanlı listede olmayan bir sayıyı linear search 50 karşılaştırmayla arar. 1024 elemanlı sıralı listede binary search (aralık 1 elemana inene kadar) , yani 10 tur. 10 elemanlı ters sıralı listede bubble sort karşılaştırma yapar.
Döngü sayma: adım adım
for i := 1 to n
for j := i to n
x := x + 1
Önce tek bir dış turu düşün: sabitken , ‘den ‘e gider, yani tur.
i = 1 -> n tur
i = 2 -> n - 1 tur
...
i = n -> 1 tur
Toplam: n + (n-1) + ... + 1 = n(n+1)/2
için . Big-O tahmini: (), yani . Yarım bile olsa sınıf .
Döngü değişkeni çarpılarak büyüyorsa () tur sayısı logaritmiktir. Bölünerek küçülüyorsa () yine logaritmik.
Sık yapılan hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| Sadece ‘yi yazmak | ve ikisi birden: “witnesses C = 14, k = 1” |
| “for x > 1” yazmamak | Eşitsizliğin geçerli olduğu aralık ‘yı belirler, yaz |
| “Birkaç için denedim, değil” | “O değildir” için tüm ‘yı çürüten çelişki ispatı lazım |
| için sadece üst sınır | = + : iki eşitsizlik, ve |
| is | sınırsız, değil |
| ile farklı sınıf | Sabit çarpan kadar farklılar, aynı sınıf |
| is çünkü “yarısı” | Sabit çarpan sınıfı değiştirmez, |
| İç döngü ise tur | tur |
| Binary search | Her tur yarıya böler, |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
Show that is . Give witnesses and .
Cevabı göster
iken ve . Her terimi 'ye büyüt: . Yani , . Başka doğru çiftler de var (örneğin , büyük), ama bu şablon en hızlısı.
Arrange the functions in increasing order of growth: , , , , , .
Cevabı göster
Logaritma her kuvvetten yavaştır, ise 'den yavaştır. , ile arasında. Her polinom her üstelden () yavaştır, ise 'yi de geçer. Sıra: .
Give a big-O estimate for .
Cevabı göster
Çarpımda büyük terimler çarpılır: için , için , çarpım . Toplamda en hızlı büyüyen kazanır: , 'nin yanında küçük kalır. Sonuç .
(a) Is ? (b) Is ?
Cevabı göster
(a) , yani , ile . Üsse sabit eklemek sabit çarpan demektir.
(b) . olsaydı iki tarafı 'e bölünce olurdu; sınırsız büyüdüğü için bu bir yerde bozulur. O değildir.
How many times is x := x + 1 executed? Give the count for , the general formula, and a Big-Theta estimate.
for i := 1 to n
for j := 1 to 2n
x := x + 1Cevabı göster
Dış döngü tur, her turda iç döngü tur. Toplam . için . Sabit çarpan 2 önemsiz: .
Show that is . Give , and .
Cevabı göster
Üst sınır: için . Alt sınır: pozitif terimleri atınca ifade küçülür, . Böylece için , yani .
Prove that is not .
Cevabı göster
Çelişki şablonu. Varsay: olan her için olacak şekilde var. İki tarafı 'a böl: . Ama seçersen bu bozulur (örneğin için : ). Çelişki, yani , değildir.
Bubble sort is run on a list of 12 numbers in decreasing order. How many comparisons does it make?
Cevabı göster
Bubble sort'un karşılaştırma sayısı girdiden bağımsızdır (erken çıkışsız sürüm): 1. geçişte 11, 2. geçişte 10, ..., son geçişte 1. Toplam .
The binary search below runs on a sorted list . How many times does the while loop execute, whatever is?
i := 1; j := 64
while i < j
m := floor((i + j) / 2)
if x > a_m then i := m + 1
else j := mCevabı göster
Her turda aralık tam yarıya iner: 64 → 32 → 16 → 8 → 4 → 2 → 1. Altı yarılama, yani 6 tur. Genel olarak için tur, .
How many times does the loop body execute for ? Give a big-O estimate.
i := 1
while i <= n
i := 2 * iCevabı göster
değerleri: 1, 2, 4, 8, 16, 32, 64 (hepsi ). Sonraki 128 > 100, döngü biter. 7 tur. Genel formül , yani .
Is ? Justify.
Cevabı göster
Taban değiştirme: . Aralarında sabit çarpan var, bu yüzden Big-O dünyasında logaritmanın tabanı önemsizdir: .
How many times is s := s + 1 executed when ? Give a big-O estimate.
for i := 1 to n
for j := 1 to i
for k := 1 to j
s := s + 1Cevabı göster
Sabit ve için en içteki döngü kez döner. Sabit için toplam . Bunları için topla: . Genel formül , yani .
Doğrulama: Tanık eşitsizlikleri x > k için yoğun sayısal taramayla, döngü sayıları ve arama/sıralama karşılaştırmaları kodu çalıştırıp sayarak, büyüme sıralaması logaritmik karşılaştırmayla node'da doğrulandı (verify/MAT2033/06.mjs).