Dies ist eine Reduktion von Clique zu Ihrem Problem.
Wir beginnen mit einer Instanz von Clique: ein Graph und eine ganze Zahl k , lassen V = { v 1 , v 2 , . . . , v n } .GkV={v1,v2,...,vn}
Clique bleibt NPC auch unter der Einschränkung , dass (Nachweis Skizze: wenn m a x ( d e g ( v i ) > 2 ( k - 1 ) dann addiere ein K t mit t = 2 ( k - 1 ) - m a xmax(deg(vi))≤2(k−1)max(deg(vi)>2(k−1)Kt und verbinde es mit allen Knoten von G und frage nach einer Clique der Größe k ′ = k + t im neuen Graphen).t=2(k−1)−max(deg(vi))Gk′=k+t
Wir nehmen also an , dass in m a x ( d e g ( v i ) ) ≤ 2 ( k - 1 ) ist . Für jeden Knoten v i , für die d e g ( v i ) < 2 ( k - 1 ) wir eine "externe" Clique erstellen C i der Größe 2 ( k + 1 ) + 1 (jeder Knoten von CGmax(deg(vi))≤2(k−1)videg(vi)<2(k−1)Ci2(k+1)+1 clique hat mindestens 2 ( k + 1 ) Nachbarn.Ci2(k+1)
Wenn ist der Grad der v i verbinden wir v i zu 2 ( k - 1 ) - d e g ( v i ) Knoten C i .deg(vi)vivi2(k−1)−deg(vi)Ci
Im resultierenden hat jedes v i Grad 2 ( k - 1 ) ; so | A | ≥ k, weil mindestens ein Eckpunkt ausgewählt werden muss.G′vi2(k−1)|A|≥k
Es ist klar, dass, wenn einer der Eckpunkte von in A enthalten ist, mindestens 2 ( k + 1 ) / 2 = k + 1 Knoten darin ebenfalls eingefügt werden müssen. Beachten Sie, dass , wenn ein ursprünglicher Knoten d e g ( v i ) < k - 1 dann wenigstens einen Knoten der verknüpften C i enthalten sein müssen, was zu | A | > k .CiA2(k+1)/2=k+1deg(vi)<k−1Ci|A|>k
Wir können also eine Menge der Mindestgröße | erstellen A | = k genau dann, wenn G eine Clique der Größe k enthält .A|A|=kGk
Ein Beispiel für die Reduktion, bei der wir fragen, ob der Graph der durch die gelben Knoten und die fetten Kanten dargestellt wird, eine Clique der Größe k = 3 (ein Dreieck) enthält.Gk=3
Die blauen Knoten (zur besseren Lesbarkeit gruppiert) sind werden die roten Kanten die Verbindungen zwischen den Knoten von G mit d e g ( v i ) < 2 ( k - 1 ) .K9Gdeg(vi)<2(k−1)