MST: la complejidad del algoritmo de Prim, ¿por qué no ?


8

Según CLRS, los algoritmos de Prim se implementan a continuación:

MST-PRIM(G,w,r)

  • para cada dou∈V[G]
    • key[u]←∞
    • π[u]←NIL
  • key[r]←0
  • Q←V[G]
  • mientras que do // ...Q≠∅O(V)
    • u ← EXTRACT-MIN(u) // ...O(lg⁡V)
      • para cada do // ...v∈adj[u]O(E)
        • si yv∈Qw(u,v)>key[v]
          • entoncesπ[v]←u
            • key←w(u,v) // ...DECREASE-KEYO(lg⁡V)

El libro dice que la complejidad total es . Sin embargo, lo que entendí es que el bucle interno con la operación costará , y el bucle externo encierra tanto el bucle interno como el interno , por lo que la complejidad total debería ser .O(Vlg⁡V+Elg⁡V)≈O(Elg⁡V)forDECREASE-KEYO(Elg⁡V)whileEXTRACT-MINforO(V(lg⁡V+Elg⁡V))=O(Vlg⁡V+EVlg⁡V)≈O(EVlg⁡V)

¿Por qué el análisis de complejidad no se realiza como tal? y ¿Qué hay de malo en mi formulación?

Respuestas:


9

La complejidad se deriva de la siguiente manera. La fase de inicialización cuesta . El bucle se ejecutaveces. El bucle anidado dentro de la bucle se ejecuta veces. Finalmente, el lema del apretón de manos implica que hay implícitas DECREASE-KEY's. Por lo tanto, la complejidad es: .O(V)while|V|forwhiledegree(u)Θ(E)Θ(V)∗TEXTRACT−MIN+Θ(E)∗TDECREASE−KEY

La complejidad real depende de la estructura de datos realmente utilizada en el algoritmo. Usando una matriz, , la complejidad es en el peor de los casos.TEXTRACT−MIN=O(V),TDECREASE−KEY=O(1)O(V2)

Usando un montón binario, , la complejidad es en el peor de los casos. Aquí está la razón: dado que el gráfico está conectado, entonces , y es como máximo (peor de los casos, para un gráfico denso). Probablemente, te perdiste este punto.TEXTRACT−MIN=O(log⁡V),TDECREASE−KEY=O(log⁡V)O(Elog⁡V)|E|≥|V|−1EV2

Usando un montón de Fibonacci, amortizado, amortizado, la complejidad es en el peor de los casos.TEXTRACT−MIN=O(log⁡V)TDECREASE−KEY=O(1)O(E+Vlog⁡V)


1

Tu idea parece correcta. Tomemos la complejidad como . Luego observe que en el bucle for interno, en realidad estamos atravesando todos los vértices, y no los bordes, así que modifiquemos un poco a , lo que significa . Pero para el análisis del peor de los casos (gráficos densos), es aproximadamente igual al número de aristas, , dando pero desde , por lo tanto .V(lg⁡v+Elg⁡v)V(lg⁡v+Vlg⁡v)Vlg⁡v+V2lg⁡vV2EVlg⁡v+Elg⁡v=(V+E)lg⁡vV≪EElg⁡v


¿Cuál es ? ¿Un error tipográfico para ? vV
— David Richerby

En realidad, no entiendo esto en absoluto. ¿Qué significa decir "Tomemos la complejidad como [expresión 1]" y luego "modifiquemos un poco a [expresión 2]"? No puede asumir que el tiempo de ejecución es una cosa y luego cambiarlo por otra.
— David Richerby
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.