Zeitliche Komplexität einer dreifach verschachtelten Schleife


13

Bitte beachten Sie die folgende dreifach verschachtelte Schleife:

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

Die Anweisung hier wird genau Mal ausgeführt. Könnte jemand erklären, wie diese Formel erhalten wurde? Vielen Dank.n(n+1)(n+2)6


1
Die Frage Zeitkomplexitätsformel von verschachtelten Schleifen könnte ebenfalls von Interesse sein.
Juho

Antworten:


14

Sie können zählen, wie oft die innerste for-Schleife ausgeführt wird, indem Sie die Anzahl der Triplets (i,j,k) für die sie ausgeführt wird.

Durch die Schleifenbedingungen wissen wir, dass: 1ijkn . Wir können es auf das folgende einfache kombinatorische Problem reduzieren.

  • Stellen Sie sich n+2 rote Kästchen vor, die in einem Array von links nach rechts angeordnet sind.
  • Wähle 3 beliebige Kisten aus der n+2 Kisten und male sie blau an.
  • Bilden Sie ein Triplett (i,j,k) wie folgt:
    • = 1 + Anzahl roter Kästchen links vom ersten blauen Kästchen.i
    • = 1 + Anzahl der roten Kästchen links vom zweiten blauen Kästchen.j
    • = 1 + Anzahl der roten Kästchen links vom dritten blauen Kästchen.k

Wir müssen also nur die Anzahl der Auswahlmöglichkeiten für 3 Kästchen aus Kästchen zählen, also .n+2(n+23)


2
Gute Antwort! Die genauen Werte von i, j, k sind nicht wichtig. Wir müssen nur wissen, dass jede blaue Box in n möglichen Positionen platziert werden kann und dass ihre Positionen begrenzt sind: 2. kommt immer nach dem 1. und vor dem 3..
Dávid Natingga

@rizwanhudda Clear mit Ausnahme des Teils in n + 2 . Kannst du es bitte erklären? n + 3 sieht aus wie die richtige Zahl. +2n+2n+3
Saadtaame

1
@saadtaame Ja. Sie können sich vorstellen, rote Kästchen zu haben, aber Sie können 3 rote Kästchen zum Malen von Blau unter " n + 2 roten Kästchen" auswählen , da Sie das erste Kästchen nicht als blau färben können (Da i 1 )n+3n+2i1
rizwanhudda

3

Für mich ist es einfacher zu bemerken, dass die innere Schleife Mal ausgeführt wird und die Gesamtzahl der Ausführungen in der inneren Schleife istni

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

Dies kann wie folgt umgeschrieben werden und ausgeführt wird n - mal, so dass die Gesamtzahl der Ausführungen istj=0ninijn

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

Eine Herausforderung für Sie: Stellen Sie sich vor, Sie haben eine x-verschachtelte Schleife. Entsprechend der vorherigen Antwort würde es ausführen (n + x-1) und x-mal wählen. Wie würden Sie Ihre Formel berechnen?
Dávid Natingga

Zum Glück hat der OP nicht nach x-nested gefragt! Wie erweitert sich die andere Antwort auf eine x-verschachtelte Schleife? Meine Antwort sollte nur mehr Summen von 0 nach n, 0 nach n-i_1, 0 nach n-i_2, ..., 0 nach n-i_x bringen. Aber ich würde nicht wissen, wie ich das berechnen soll.
Andy Mcevoy

1
Die Antwort wird für ein allgemeines x nicht explizit erweitert, aber der dargestellte Argumentationsprozess lässt sich leicht auf x-verschachtelte Schleifen übertragen. Sie fügen nur weitere blaue Kästchen hinzu. Ich weiß auch nicht, wie ich diese mehr Summen berechnen würde.
Dávid Natingga
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.