Wie findet Union quadratischen Algorithmus?

8

In dieser Implementierung des Quick Find-Algorithmus benötigt Constructor N steps, also union() .

Der Kursleiter hat gesagt, dass union zu teuer ist, weil N^2 zur Prozesssequenz von N union Befehle von N benötigt, Wie kann union quadratisch sein, wenn es auf Array zugreift Elemente einzeln nacheinander?

%Vor%     
Algo 16.06.2014, 12:28
quelle

2 Antworten

4

Jeder Aufruf der Methode union erfordert, dass Sie über das Array id iterieren, was O(n) time benötigt. Wenn Sie union method n mal aufrufen, ist die benötigte Zeit n*O(n) = O(n^2) .

Sie können die Zeitkomplexität von union method auf O(1) verbessern, indem Sie die Zeitkomplexität der verbundenen Methode höher machen, wahrscheinlich O(log n) , aber dies ist nur eine einmalige Operation. Ich glaube, dass dein Lehrbuch das im Detail erklärt.

    
fajarkoe 16.06.2014, 12:53
quelle
2

Union Operation für Schnellsuche ist quadratisch O(n^2) für n operations, weil jede Operation O(n) time benötigt, was in for loop in union(int p, int q) %Vor%

Beachten Sie, dass der Algorithmus Schnellsuche aufgerufen wird, da jede Operation zum Suchen ( connected(int p, int q) ) konstante Zeit benötigt. Für diesen Algorithmus zahlen Sie jedoch in union operation, wie in Ihrer Frage erwähnt.

Es gibt einen weiteren Algorithmus Quick Union , der die Zeit für union operation verbessert. Aber dann bleibt find nicht O(1) (aber besser als lineare Zeit).

    
Vinayak Garg 16.06.2014 17:07
quelle

Tags und Links