SORU
14 Mayıs 2015, PERŞEMBE


Büyük-O kod parçasının karmaşıklığı

Karmaşıklık hakkında algoritma tasarımında bir sorum var. Bu soru, bir parça kodu verilir ve bu kod karmaşıklığını hesaplamak gerekir. Pseudo-kod:

for(i=1;i<=n;i  ){
    j=i
    do{
        k=j;
        j = j / 2;
    }while(k is even);
}

Bazı sayılar için bu algoritma çalıştım. ve farklı sonuçlar aldık. örneğin n = 6 Bu algoritma çıktısı aşağıdaki gibidir

i = 1 -> executes 1 time
i = 2 -> executes 2 times
i = 3 -> executes 1 time
i = 4 -> executes 3 times
i = 5 -> executes 1 time
i = 6 -> executes 2 times

Düzenli bir tema yok, bu nasıl hesaplamak gerekir?

CEVAP
14 Mayıs 2015, PERŞEMBE


Üst diğer cevaplar verdiği bağlı aslında çok yüksek. Bu algoritma daha sıkı bir üst sınır daha bir O(n*log n) (n) çalışma zamanı vardır.

Kanıt: iç döngü yapacak nasıl sayayım.

Dış döngü n kez çalışır. İç döngü en az bir kere bunların her biri için çalışır.

  • Hatta i, iç döngü en az iki kere çalışır. Bu n/2 katı olur.
  • i 4, iç döngü ile bölünebilen için çalışan en az üç kez. Bu n/4 kat olur.
  • i 8, iç döngü ile bölünebilen için çalışan en az dört kez. Bu n/8 katı olur.
  • ...

İç döngü çalışır kez toplam miktar:

n   n/2   n/4   n/8   n/16   ... <= 2n

İç döngü tekrar miktarı n ve Θ. 14*, yani* (n) arasında.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elly

    Elly

    3 EKİM 2005
  • MarinaHD2001

    MarinaHD2001

    7 ŞUBAT 2009
  • wowchick16

    wowchick16

    17 Mart 2007