Domanda

Dato un grafico bipartite $ g= (v_1 \ tazza v_2, e) $ e un set $ v '\in (v_1 \ Cup V_2) $ .Qual è la complessità di trovare una corrispondenza massima in $ G $ che utilizza solo $ x $ vertici da $ V '$ ?

È stato utile?

Soluzione

Set $ v_i '= v_i \ cap v' $ . Puoi risolvere ciò trovando la corrispondenza massima usando al massimo $ k $ vertici da $ v_1 '$ e al massimo $ xk $ da $ v_2 '$ per tutti $ k \ in [0, x] $ . Questo a sua volta può essere trovato con il flusso massimo.

Per trovare questa corrispondenza massima, modifichiamo la consueta riduzione del flusso massimo. Let $ s $ Sii la fonte e $ T $ il lavello. Let $ L $ e $ r $ I vertici ausiliari. Aggiungi un bordo da $ s $ a $ l $ con capacità $ K $ e un bordo da $ R $ a $ T $ con capacità $ xk $ . Tutti gli altri bordi avranno capacità $ 1 $ . Aggiungere un bordo da $ L $ ad ogni $ x \ in v_1 '' $ , e da $ s $ ad ogni $ x \ in v_1 \ setminus v_1 '$ . Aggiungere un bordo da ogni classe $ Y \ in V_2 '$ a $ R $ , e da ogni $ y \ in v_2 \ setminus v_2 '$ a $ T $ . Per $ (x, y) \ in e $ , aggiungi un bordo da $ x $ a $ y $ . Ora il flusso massimo fornisce una corrispondenza massima usando al massimo $ k $ vertici in $ v_1 '$ e < span class="container math"> $ xk $ in $ v_2 '$ .

Possiamo quindi risolvere il problema in $ \ mathcal {o} (x \ clot m) $ dove $ m $ è la complessità del flusso massimo. I problemi di flusso massimo sono molto simili, quindi possiamo migliorare su questo.

Possiamo aumentare o diminuire la capacità di qualsiasi bordo di $ 1 $ mantenendo il flusso massimo in $ \ mathcal { O} (| E |) $ . Prima calcolare la corrispondenza massima usando senza vertici in $ v '$ . Quindi, aumentare la capacità del bordo da $ s $ a $ l $ di $ x $ . Quindi ad ogni passo aumenta la capacità del bordo da $ r $ a $ T $ e diminuire la capacità del bordo da $ s $ a $ l $ pur mantenendo un flusso massimo. Uscita la più grande corrispondenza prodotta. La complessità sarà $ \ mathcal {o} (| e | \ sqrt {| v |} + x {| v |} + x \ clot | e |) $ Se utilizziamo Dinic per trovare la corrispondenza iniziale bipartite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top