Problem może być NP-zupełny, nie algorytm.
A pytanie gdzie? Rozumiem że pytasz "jak dowodzi się NP-zupełności"?
Otóż dowód taki wymaga 2 kroków, wynikających bezpośrednio z definicji:
Problem NP-zupełny to problem który:
- Jest problemem klasy NP, czyli istnieje algorytm wielomianowy na niedeterministyczną maszynę turinga który ten problem rozwiązuje
- Jest problemem NP-trudnym, tzn każdy inny problem NP się do niego redukuje.
Ad.1. dowieść jest zwykle banalnie łatwo, w tym przypadku:
Nasz algorytm dokonuje podziału osób na 3 grupy a następnie sprawdzamy czy nie występują w żadnej z grup 2 lub więcej nielubiących się osób. Niedeterministyczna maszyna turinga potrafi z definicji rozpatrywać nam wiele ścieżek jednocześnie, w efekcie potrafi rozwiązać ten problem w czasie O(n) [oczywiście deterministyczna maszyna turinga z tym algorytmem wymagałaby wykładniczego czasu, bo byłaby to zwykła rekurencja z powrotami]
Ad.2. z tym zwykle bywa trudniej, bo najprostszym sposobem jest wielomianowa redukcja znanego problemu NP-zupełnego do naszego problemu. Tzn musimy pokazać że pewien znany problem NP-zupełny można przekształcić do naszego problemu zwiększajac trudność problemu co najwyżej wielomianowo. Na pierwszy rzut oka próbowałbym redukcji z problemu IndependentSet.
Problem IndependentSet to pytanie: "czy dla danego grafu G oraz pewnej liczby naturalnej K istnieje podzbiór K wierzchołków z których żadne 2 nie są połączone"
Myślę że możemy w czasie O(n^2) dokonać redukcji IndependentSet do naszego problemu wyjściowego. Jak? Nie będę ci psuł zabawy, bo chyba i tak już za dużo powiedziałem...