Questa è una riduzione da Clique al tuo problema.
Iniziamo con un'istanza di Clique: un grafo e un intero k , lasciate V = { v 1 , v 2 , . . . , v n } .GkV={v1,v2,...,vn}
La cricca rimane NPC anche sotto il vincolo che (schizzo di prova: se m a x ( d e g ( v i ) > 2 ( k - 1 ) quindi aggiungi una K t dove t = 2 ( k - 1 ) - m a xmax(deg(vi))≤2(k−1)max(deg(vi)>2(k−1)Kt e collegalo a tutti i nodi di G e chiedi una cricca di dimensioni k ′ = k + t nel nuovo grafico).t=2(k−1)−max(deg(vi))Gk′=k+t
Quindi supponiamo che in , m a x ( d e g ( v i ) ) ≤ 2 ( k - 1 ) . Per ogni nodo v i per cui d e g ( v i ) < 2 ( k - 1 ) creiamo una cricca "esterna" C i di dimensione 2 ( k + 1 ) + 1 (ogni nodo di CGmax(deg(vi))≤2(k−1)videg(vi)<2(k−1)Ci2(k+1)+1 cricca ha almeno 2 ( k + 1 ) vicini).Ci2(k+1)
Se è il grado di v i , colleghiamo v i a 2 ( k - 1 ) - d e g ( v i ) nodi di C i .deg(vi)vivi2(k−1)−deg(vi)Ci
Nel risultante , ogni v i ha grado 2 ( k - 1 ) ; così | A | ≥ k perché è necessario selezionare almeno un vertice.G′vi2(k−1)|A|≥k
È chiaro che se uno dei vertici di è incluso in A, devono essere inseriti anche almeno 2 ( k + 1 ) / 2 = k + 1 nodi. Si noti che se un nodo originale ha d e g ( v i ) < k - 1, è necessario includere almeno un nodo della C i collegata , portando a | A | > kCiA2(k+1)/2=k+1deg(vi)<k−1Ci|A|>k .
Quindi possiamo costruire un set di dimensioni minime | A | = k se e solo se G contiene una cricca di dimensione kA|A|=kGk .
Un esempio della riduzione in cui chiediamo se il grafico rappresentato dai nodi gialli e dai bordi in grassetto contenga una cricca di dimensioni k = 3 (un triangolo).Gk=3
I nodi blu (raggruppati per una migliore leggibilità) sono , i bordi rossi sono i collegamenti tra i nodi di G con d e g ( v i ) < 2 ( k - 1 ) .K9Gdeg(vi)<2(k−1)