Çözüldü Big O Notasyonu hesaplama nasıl yapılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Musa B.

Kilopat
Katılım
1 Ekim 2017
Mesajlar
1.633
Makaleler
4
Çözümler
13
Daha fazla  
Cinsiyet
Erkek
Merhaba, yarın veri yapıları sınavımız var ve hocamızın 2 hafta önce vermiş olduğu kodun Big-O notasyonunu hala bulamadık. Açıkçası ben log(logn) olduğunu düşünmüştüm lakin yanlış olduğunu söyledi hocamız. İlgili kod:

[CODE lang="cpp" title="Veri Yapıları"]for(int i =1; i<n;i=i*2)
{
for(int j=1; j<i; j = j*2)
{
cout << "hello";
}
} [/CODE]
 
Çözüm
@M.Sc Jelly Bean biz kodun notasyonunu O(log(n^2)) olarak veya O(n^2) olarak düşünüyoruz; sebebi ise n´ye verdiğimiz değerlerde iç kısımdaki for döngüsünün çalışmasına baktık ve (2 üzeri n) + 1 değerine geldiğinde çalışma miktarı bir artıyor.

Doğrudur. Sayıları grafik şeklinde çizdirdiğimde elde ettiğim eğri O( n^2 )'nin ta kendisi.

bigO.png
@The Anorak Hocam anlatma şansınız var mı nasıl bir deneme yaptığınızı? Çünkü kafayı yemek üzereyiz, bize öğrettikleri şeyle ilgisi yok ve işin kötü kısmı yarınki sınavda bunu sorabilir soru olarak.
 
JavaScript:
function bigO(n) {
  let count = 0;
  for (let i = 1; i < n; i *= 2)
    for (let j = 1; j < i; j *= 2)
      count++;
  return count;
}

for (let i = 2; i < 100_000; i++) {
  console.count(bigO(i));
}

Bu şekilde count sayısının yakınsama eğrisinin değerlerini oluşturdum ve grafiğinin sqrt( n ) ile olmasa bile ona yakın bir eğri çizdiğini fark ettim.
 
@The Anorak karmaşıklık sıralamasında sqrt( n ) log( n )´den daha mı az karmaşık? Bize verilen sıralamada 1-log( n )- n- n log( n )-n kare-n küp- iki üzeri n ve son olarak n faktöriyel var.
@The Anorak biz kodun notasyonunu O(log(n^2)) olarak veya O(n^2) olarak düşünüyoruz; sebebi ise n´ye verdiğimiz değerlerde iç kısımdaki for döngüsünün çalışmasına baktık ve (2 üzeri n) + 1 değerine geldiğinde çalışma miktarı bir artıyor.
 
Son düzenleme:
@M.Sc Jelly Bean biz kodun notasyonunu O(log(n^2)) olarak veya O(n^2) olarak düşünüyoruz; sebebi ise n´ye verdiğimiz değerlerde iç kısımdaki for döngüsünün çalışmasına baktık ve (2 üzeri n) + 1 değerine geldiğinde çalışma miktarı bir artıyor.

Doğrudur. Sayıları grafik şeklinde çizdirdiğimde elde ettiğim eğri O( n^2 )'nin ta kendisi.

bigO.png
 
Çözüm
Diğer eğrileri ekleyince 2^n'nin büyük bir denominator ile bölümü veya logaritması gibi göründü.
log(2^n) veya sqrt(2^n) de olabilir.

graph.png


01
12
34
68
1016
1532
2164
28128
36256
45512
551024
662048
784096
918192

Doğrudan 2^n değil ancak 2^n ile bir bağlantısı mevcut.
 
n^2değilde (logn)^2 gibi gözüküyor.
Döngü bir bir artsaydı n^2 olurdu. Ama her loopta iki katına çıkıyor. Bu logn dir. İçiçe oldugu içinde (logn) ^2 oluyor.
 

Geri
Yukarı