Üçlü iç içe bir döngünün zaman karmaşıklığı


13

Lütfen aşağıdaki üç iç içe döngüyü göz önünde bulundurun:

for (int i = 1; i <= n; ++i)
    for (int j = i; j <= n; ++j)
        for (int k = j; k <= n; ++k)
            // statement

Buradaki ifade tam olarak kez. Birisi bu formülün nasıl elde edildiğini açıklayabilir mi? Teşekkür ederim.n(n+1)(n+2)6


1
Juho

Yanıtlar:


14

Döngüsünün en içteki yürütme sayısını, yürütüldüğü üçüzlülerin sayısını sayarak sayabilirsiniz .(i,j,k)

1ijkn

  • n+2
  • n+2
  • (i,j,k)
    • i
    • j
    • k

n+2(n+23)


2
Güzel cevap! İ, j, k'nin kesin değerleri önemli değildir. Sadece herhangi bir mavi kutunun n olası pozisyona yerleştirilebileceğini ve pozisyonlarının sınırlı olduğunu bilmeliyiz: 2. her zaman 1'den sonra ve 3'ten önce gelir.
Dávid Natingga

@rizwanhudda kısmı hariç . Açıklayabilir misiniz lütfen? doğru sayıya benziyor. +2n+2n+3
saadtaame

1
@saadtaame Evet. Sen sahip düşünün edebilirsiniz kırmızı kutuları, ancak "arasından mavi boyama için 3 kırmızı kutuları seçme özgürlüğü olan sen (bu yana mavi olarak ilk kutuyu renklendirmek olamaz gibi kırmızı kutuları" )n+3n+2i1
rizwanhudda

3

benim için, iç döngünün kez yürütüldüğünü ve iç döngüdeki toplam yürütme sayısınınni

(ni)+(ni1)+(ni2)++1

bu olarak yeniden yazılabilir ve kez yürütülür , dolayısıyla toplam yürütme sayısıj=0ninijn

i=0nj=0ninij=n(n+1)(n+2)6

Sizin için bir meydan okuma: X-yuvalanmış bir döngünüz olduğunu hayal edin. Önceki cevaba göre x kez seçer (n + x-1). Formülünüzü nasıl hesaplarsınız?
Dávid Natingga

Neyse ki OP x-yuvalanmış için sormadı! Verilen diğer yanıt x-iç içe döngüye nasıl genişler? Cevabım 0'dan n'ye, 0'dan n-i_1'e, 0'dan n-i_2'ye, ..., 0'dan n-i_x'e kadar daha fazla toplam almalı. Ama bunu nasıl hesaplayacağımı bilemezdim.
andy mcevoy

1
Yanıt genel bir x için açık bir şekilde genişlemez, ancak sunulan muhakeme sürecinin x-iç içe döngülere uygulanması kolaydır. Sadece daha fazla mavi kutu eklersiniz. Bu meblağları nasıl hesaplayacağımı da bilmiyorum.
Dávid Natingga
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.