Grazie al suggerimento di j_random_hacker, ho trovato una soluzione per ridurre la copertura dei vertici al problema di rete:
Facciamo un -by- | V | griglia di blocchi 3 per 3, ovvero un 3 | E | -by- 3 | V | griglia, con vertici ordinati come colonne { v 1 , ... , v N 1 } e bordi ordinati come righe { e 1 , ... , e N 2 } . Costruiremo rettangoli su questa griglia (il disegno seguente aiuterà molto a comprendere i diversi rettangoli utilizzati)|E||V|3|E|3|V|{v1,…,vN1}{e1,…,eN2}
Per ogni vertice, creiamo un rettangolo di tipo 1, che copre la colonna centrale della colonna di blocchi corrispondente a quel vertice, quindi abbiamo rettangoli di tipo 1.|V|
Ogni blocco corrisponde a una coppia unica , con e i = ( v a , v b ) per ogni blocco aggiungiamo un rettangolo di tipo 2:(ei,vj)ei=(va,vb)
- se o b < j , questo è un rettangolo 3 per 3 che copre l'intero blocco.j<ab<j
- se (resp. j = b ), si tratta di un rettangolo 3 per 1 che copre la colonna sinistra (resp. destra) del blocco.j=aj=b
- se , si tratta di un rettangolo 1 per 3 che copre la riga superiore del blocco.a<j<b
Quindi abbiamo rettangoli di tipo 2, questi rettangoli saranno obbligatori da scegliere, in quanto ognuno sarà l'unica copertura per l'angolo in alto a sinistra (o in alto a destra) del blocco in cui si trova.|E||V|
(ei,va)(ei,vb)
- (ei,va)(ei,vb)
2|E|
Ora, per ogni bordo costruiamo rettangoli di tipo 4, tra i blocchi finali, abbiamo due rettangoli per la seconda riga:
- Uno che va dalla piazza centrale del primo blocco alla piazza centrale-sinistra del secondo blocco.
- Uno che va dalla piazza centrale destra del primo blocco alla piazza centrale del secondo blocco.
- E gli stessi due rettangoli per la terza fila.
4|E|
Quindi ora, per coprire la griglia:
- |E|(|V|+2)|V|+4|E|
Per coprire, per un dato bordo, la parte tra i blocchi di estremità del bordo non ancora coperta (seconda e terza fila della fila di blocchi), possiamo usare:
- i quattro rettangoli di tipo 4.
- un rettangolo di tipo 1 e due rettangoli di tipo 4.
Si noti che in ogni caso, abbiamo bisogno di almeno due rettangoli di tipo 4.
Quindi qui la funzione di costo sarà: | E| ( | V| +4)+k
Se la loro è una copertura di vertici valida con meno di k vertici: usiamo il | E| ( | V| +2)rettangoli obbligatori, quindi per i rettangoli opzionali, possiamo usare i rettangoli di tipo 1 corrispondenti alla copertura del vertice e per ogni riga, abbiamo bisogno solo di 2 rettangoli di tipo 4 (abbiamo già un rettangolo di tipo 1). Quindi, se il grafico ha una copertura vertice valida, la griglia ha una copertura set valida.
Se disponiamo di una copertura set valida per la griglia (con meno di | E| ( | V| +4)+k) rettangoli, quindi per ogni bordo o abbiamo già un rettangolo di tipo 1 (e il bordo è "coperto") o quattro rettangoli di tipo 4, nel qual caso, possiamo sostituirne due con un rettangolo di tipo 1, e abbiamo ancora una copertura valida con | E| ( | V| +4)+krettangoli. Seguendo questo processo, raggiungiamo una soluzione valida senza riga utilizzando quattro rettangoli di tipo 4, da cui è possibile ottenere una copertura dei vertici valida.
Quindi la copertura del vertice può essere ridotta alla copertura della griglia. E l'istanza del problema alla griglia può essere codificata da| E| ( | V| +6)+ | V| copre su una griglia con 9 | V| | E| elementi, quindi la riduzione è polinomiale e il problema alla griglia è NPC.
PS: Ho notato dopo aver scritto questa risposta che molti rettangoli sono in realtà inutili e una riduzione molto più semplice può essere fatta usando un | E|-di-3 | V| griglia con | V| +4 | E| copertine, utilizzando la funzione di costo 3 | E| +k