Quello che vedremo oggi
sono dopo aver definito questa
fantastica nozione di NP completezza,
oggi vedremo problemi NP completi. Ok,
chiaro per tutti? Cos'è NP hard? Cos'è
NP completo?
Il corso sta stando troppo difficile.
No, si capisce. Vado troppo veloce. Se
vado troppo veloce rallentatemi, eh.
Vado veloce. Ah, ok.
Ok, quindi quello che faremo oggi
vedremo
sperabilmente cinque problemi NP
completi, forse sei, però visto l'orario
deito. Eh,
siamo partiti. Ok, prima cosa, ieri
avevo lasciato la domanda di dimostrare
l'NP hardness o NP completezza di Exact
3at. Ci avete pensato? Avete risolto?
Come si fa?
Le variabili.
Sì. Ok. Allora, come si fa? Si prende
la formula iniziale che è una tre satat,
quindi le sue clausole hanno al più tre
variabili. Ok? La dobbiamo trasformare
tre letterali, la dobbiamo trasformare
in una formula le cui clausole tutte le
clausole hanno esattamente
tre letterali. Qua registra, registra.
Come si procede? Si prendono a turno
tutte le clausole della formula di
partenza. Se quella clausola è
esattamente tre letterali, la copiamo
così com'è. Se la clausola ha meno,
strettamente meno di tre letterali,
prendiamo a caso un po' di letterali che
stanno già dentro in quella clausa e li
replichiamo. Finita la riduzione, ok? La
formula è semanticamente equivalente e
di conseguenza noi abbiamo che Xat 3 SAT
è nardbo. Per questa ragione, quando
parlerò di tre SAT da qui in avanti,
indistintamente mi farò farò riferimento
o alla variante con esattamente tre
letterali o alla variante con tre
letterali, dipende quale ci torna
comodo, però giusto perché trasformare
l'una nell'altra è una cosa estremamente
semplice, ok? Quindi si può fare
senza problemi. Ok? Allora, quello che
oggi vedremo sono una serie di problemi
sul grafo che magari già ne avete visti.
Oggi dimostreremo che sono NP completi,
ok? NP al hard, quindi sono problemi
inerentemente combinatorici
per i quali non conosciamo algoritmi di
soluzione polinomiale. Ok? Il primo che
andiamo a guardare è uno che abbiamo già
introdotto la volta scorsa, è il
problema dell'indipendent set.
in independent
set. Ok.
Allora, che cos'è un independent set?
Dato un grafo,
unindipend per un grafo, l'abbiamo già
definito, è un insieme di nodi
tali per cui non esiste un arco fra
nessuna coppia di nodi di questo set.
Quindi S è un indipendent set dei nodi
del grafo. Se presa una qualsiasi coppia
di nodi dentro S non ci sta un arco che
li collega, ok? Sono quindi un insieme
di set di di elementi di insieme di nodi
completamente sganciati. Ok. Grafo non
orientato. Grafo non orientato. Sì, sì.
Oggi facciamo è tutto non orientato
tranne forse l'ultimissimo problema se
ci arriviamo. Ok?
Ah, alright. Allora, ovviamente questo
problema, come dicevamo,
ogni grafo ammette un indipendent set,
ad esempio, il set vuoto. Ok? Quindi
quello che ci interessano sono
indipendent set grandi perché è quelli
che sono difficili da provare. Ok?
Quindi la definizione di problemi di
decisione, perché vi ripeto che nella
classe NP come in P stanno problemi di
decisione, non problemi di calcolo. Ci
serve una versione di decisione di
questo problema ed è la seguente.
Indipenden set è l'insieme delle coppie,
grafo
numero intero, ok? K talé
esiste
un
independent set
di taglia
almeno K
in G.
Ok? Questa è la definizione del problema
di decisione dell'indipendenzetti.
Quindi ci danno un grafo, ci danno un
numero. È vero o no che esiste
unindipendette di taglia almeno k?
Ok? Noi dimostreremo che questo problema
è n completo. Ok?
Per dimostrare che il problema è NP
completo, quale cose dobbiamo
dimostrare?
Due pezzi dobbiamo fare che sono
NP, membership in NP e NPS. Ok? Quindi,
per essere uno dei problemi più tosti di
NP deve stare in NP, senò non sarebbe
uno dei problemi più tosti di NP e
ovviamente deve essere NP ald. Ok.
Membership
in NP. Membership membership.
Ok. Che independence set appartiene a
NP. È vero, no che Independence
appartiene a NP? Basta avere una
macchina non deterministica che in tempo
polinomiale è in grado di decidere
un'istanza di questo problema. Ce la
facciamo?
Gessiamo il risultato, no?
Sì. Quindi ghessiamo l'insieme S,
contiamo i suoi elementi perché dobbiamo
essere sicuri di averne gessati almeno
K.
Dopodiché andiamo a coppie dentro S e
vediamo se c'è un arco chece. Se non c'è
rispondiamo sì. Ok. Questa cosa si fa in
tempo polinomiale.
Se il gess è grosso o è polinomiale?
polinomiale per il get è polinomiale
perché dobbiamo decidere per ogni nodo
se lo prendiamo o meno, quindi non è che
chissà che cosa andiamo a gessare. Ok?
Quindi il gess è polinomiale, il check è
polinomiale. Da questo noi abbiamo che
independentet è in NP. Ok? La parte più
tosta è mostrare che hardness, questa è
la parte più tosta, hardness
independent set è np hard.
Ok?
Per dimostrare che indipend NPR abbiamo
due strade. O riduciamo tutti i problemi
di NP a indipendent Z, che è una cosa
che è meglio evitare, oppure ci
scegliamo un problema
NP completo o NP ardo da ridurre a
indipendente. Quello che vedremo
stamattina è una riduzione da 3 SAT a
indipendent. Ok?
tre sat nella variante di esattamente
tre nodi, ok? Che così tre esattamente
tre letterali che così ci semplifica un
po' le cose. Ok?
Allora,
ragioniamoci un po' assieme. Che cos'è
un'istanza di tre SAT? La formula è una
formula fai in CNF, ok? Questo è
importante che sia in CNF, eh.
Che cos'è un'istanza per
l'indipendenzette?
Grafo K. È un grafo numero grafo G
numero K. Ok?
Quindi noi dobbiamo trovare una funzione
di trasformazione fann
polinomiale
e trasforma
formule CNF. in coppie grafo numero
talé
se la formula di partenza fai è
soddisfacbile,
allora il grafo G ottenuto da F ha un
indipendent di taglia K, dove pure K è
ottenuto da FA. Ok? Se la formula è
insoddisfacbile,
allora il grafo G non deve avere
un'indipendenzetta di taglia K. Ok?
Quindi dobbiamo, vedremo questa cosa un
po' poco usuale, le altre riduzioni
saranno un po' più semplici, almeno
questa della prima parte di lezione, in
cui dobbiamo prendere una formula
e la trasformiamo in un grafo. Ok?
Prendiamo un esempio.
Non so, facciamo ad esempio X1
or X2 or not X3 and
X2
or X3 or X4
and
I don't know. Not. Eh, sì.
Not X3 or
not X4 or X5. Ok. Scritto
come
not X3 or not X4 or is 5. Sì, ho ho
preso troppo spazio.
Alright,
allora ragioniamo prima assieme.
Che cos'è un'istanza per il problema di
CNF?
Di SAT SAT. Che cos'è?
Dai su
una formula. Ok. Che cos'è un'istanza?
Ve lo ripeto perché ci serve mappare le
idee. Che cos'è un'istanza per file per
tre satat? File è una formula. Che cos'è
un'istanza per tre per independence set?
Scusate, ho dormito 4 ore.
Cos'è un per l'istanza di indipendenza?
Accoppia grafo numero. Grafo numero. Ok.
Noi vogliamo mappare questo problema su
quest'altro. Ok? E
in particolare la difficoltà di questo
problema sulla difficoltà di questo
problema. Ok? Secondo voi che cos'è che
rende difficile risolvere il problema
della formula buleana?
[Musica]
Cos'è che lo rende combinatorio
il fatto che io abbia tante possibili
combina? Posso assegnare di Sì, cioè la
cosa difficile del problema della
formula buleana è che noi alla fine
dobbiamo decidere per ogni variabile se
va vero o falso. Ok?
In maniera similare, sul problema
dell'indipendence set, cos'è che
dobbiamo decidere?
Se il nodo wait wait wait nuove voci
so che lo sai.
So independent set che dobbiamo decidere
se prendere un nodo o meno. Okamo
facendo adesso è per dare un'idea del
perché costruiremo la riduzione in quel
modo. Cioè
quando vi andate a leggere sui libri,
no, le riduzioni, non è che vi scrivono
sul libro come ci sono arrivati, vi
danno la riduzione e basta. Ok? Quello
che stiamo facendo ora è cercare di
capire come sta cosa uno se la possa
inventata, ok? Perché mi chiedevano che
eserci, che problemi ci saranno sulla
prova scritta con altissima probabilità
ci sarà. vi do un problema che non
abbiamo visto a lezione, ovviamente non
vi do una cosa catastroficamente
complicata, vi do un problemino e vi
dico di che NP completo e quindi la
riduzione ve la dovete inventare. Ok?
Allora, quindi a noi seria per costruire
riduzioni. Com'è che faccio io quando
costruisco riduzioni? Faccio così, mi
metto i problemi così come li avete
visti, me li metto uno a fianco
all'altro, me li incolonno, mi inizio a
scrivere cos'è un'istanza di un
problema, cos'è l'istanza dell'altro
problema. Cosa sono le istanze sì, cosa
sono le istanze sì, cosa sono le istanze
no? Cosa sono le stanze no? perché mi
serve chiarezza per capire cosa devo
mappare su cosa. Dopodiché inizio a
ragionare sulla struttura del problema e
mi chiedo ok, ma su preso
fare per risolverlo?
No, che devo fare per risolverlo? Date
una variabile buleiana, date tutte le
sue variabili buleane, devo stabilire se
gli do vero o gli do falso. Dall'altro
lato c'è il problema dell'indipendenza.
Che devo fare stringendo quando risolvo
il problema dell'indipendenza?
Devo scegliere nodi da includere in S e
nodi da escludere in S. Variabile vera,
variabile falsa, nodo dentro, nodo
fuori. Notate una similità? Sì. Allora,
la nostra riduzione ce la inventiamo
tale per cui assegnare vero a una certa
variabile dovrà significare infilare un
particolare nodo nell'indipendenzet e
assegnare falso una certa variabile
dovrà essere mappato su tenere un nodo
fuori dall'indipendenza. Ok? Perché vi
ricordo la questione della riduzione è
prendere una formula, trasformarla in un
grafo, e un numero tale per cui un
risolutore di indipendentet ci dirà se
la formula di partenza era soddisfacile.
Ok? Questa è la questione. Quindi è
ovvio che la struttura dei due problemi
vada mappata in qualche modo. Siccome
sulle formule scelgo per le variabili,
vero o falso? E sui grafi io scelgo nodo
dentro fuori l'indipendetta. Una prima
idea che va verificata è
inventare una trasformazione di una
formula in un grafo tale per cui
semanticamente a nodo vero a variabile
vera abbiamo nodo nell'indipendetto e a
variabile falsa abbiamo nodo fuori
dall'indipendenza. Ok? Questa è l'idea
di fondo. Ok? Alrght.
Ovviamente se noi vogliamo descrivere
tramite l'appartenenza o meno di alcuni
nodi all'indipendent set, se
certe variabili buleane sono vere e
false, io dovrò evitare che
nell'indipendentette vadano a finire
nodi
che sono corrispondenti a variabili
opposte, a letterali opposti.
Ok? Cioè, quindi io non vorrò che
nell'indipendenza andranno a finire nodi
relativi a x1 e not x1 e quindi
significa che dovero allumina al suo
negato. Ok? Quindi mi dovrò inventare
questa trasformazione tale per cui
questa proprietà venga soddisfatta. Ok?
Guardiamo la definizione di
indipendentet.
Quando noi vogliamo ottenere che due
nodi non possano stare nell'indipendent
set se stanno mimando variabili opposte,
come facciamo a evitare che i nodi
vadano a finire nell'indipendenza setet?
Vediamo, devono essere nodi congiunti,
quindi noi sfrutteremo questa idea di
costruire un grafo
in cui congiungiamo nodi relativi a
variabili opposte, così quelli là
nell'indipendent non ci possono finire.
Ok?
Questa costruzione è una cosa, cioè
anche quando ci pensate che viene
costruita tipo il Lego, cioè si
costruisce pezzo a pezzo. Io adesso so
dove sto andando a parare perché ho in
mente la riduzione, ma quando voi la
fate per la prima volta, semmai vi
cimentete in questa idea, è una cosa che
si fa sostanzialmente a prove, cioè uno
c'ha un'idea, mi guida, inizio a farla,
la scrivo là, dopodiché verifico se
funziona, se trovo un errore va giusto,
ok? Cioè, non è che uno fin dall'inizio
sa dove sta andando a parare,
soprattutto sulle riduzioni più
complicate. Io ricordo che per una delle
riduzioni più toste che abbia fatto
nella mia carriera sono serviti due mesi
per ottenerla perché ogni volta che la
facevo trovavo che c'era un problema.
Ok?
Alri. Allora, facciamo così.
per ognuno dei letterali
in ogni clausola.
Quindi noi da questo V dobbiamo ottenere
una coppia grafo numero. Ok? Ci
concentriamo prima sul grafo
e sì e facciamo così.
Per ognuno dei letterali
di ogni clausola
mettiamo un nodo nel nostro grafo.
Quindi, per esempio, consideriamo la
prima clausola. Avremo x1,
x2
not x3. Guardate che
i nodi sono per i letterali, non per le
variabili. Ok? E quindi, per esempio,
sul terzo nodo ho messo not.
Poi lo devo fare anche per la seconda
clausola, quindi avrò
X2,
X3,
X4
e poi per la terza clausola e quindi
avrò nota
ceravamo dettieravamo detti che noi
colleghiamo i nodi dei letterali
dei letterali opposti. Ok? Quindi che ne
so X3 e not.
Qua ne abbiamo veramente pochi. Ah no,
qua è not X4. Eh,
alright.
Note X4 e poi collegato questo.
Aggiungo un Note X2 qua, senò è
veramente un grafo scemo.
Questo qua nel la seconda clausola la
metto not X2 invece di X2. Quindi questa
qua è così
e quindi collevo questo qua. Ok.
Quindi abbiamo tante triple di nodi.
Quanti sono i
quanti sono i le clausole del nostro
della nostra formula fil. Ok? Quindi
abbiamo tanti nodi quanti letterali. Ok?
Supponiamo,
ve lo faccio a passaggi, così vi faccio
capire proprio il metodo costruttivo,
ok? Abbiamo questo grafico che più o
meno qualcuna delle nostre idee le
copre. Ok? Benissimo.
Focalizziamoci. Voi la formula la
vedete? Sì, la vedete. Ve l'abbasso un
pochettino. Ok.
Allora, quello che noi dobbiamo
verificare ora è che se abbiamo una
formula fai soddisfacbile otteniamo un
grafo con un un numero con un
indipendetto di taglia
K. Ok? Questo ancora non ve lo
specifico, no? Mentre se la formula non
è soddisfaccibile, no, otteniamo un
grafo che non ha un'indipendetta di
taglia K o equivalentemente è che se
abbiamo ottenuto unindipenden un grafo,
con un indipendentette di taglia k era
perché la formula era soddisfacile. Ok?
Allora,
iniziamo a guardare la riduzione così
com'è. Supponiamo che la formula
iniziale fai sia soddisfacile. Ok?
Se è soddisfaciile,
esiste un assegnamento sigma per le sue
variabili tali che sigma soddisfa fai.
Uso questo simbolo qua, eh
sigma soddisfa.
Ok.
Prendiamo questo assegnamento di verità.
Questo assegnamento di verità assegnerà
alle variabili vero, falso e così via,
no? L'assegnamento sigma soddisfa fai,
ok? Significa che l'assegnamento sigma
che cosa fa? fa sì che in ogni clausola
ci sia almeno un letterale vero.
È chiaro?
Chiaro per tutti?
Ok.
Allora, che cosa facciamo? Noi dobbiamo
mostrare che poiché la formula f è
soddisfacbile, allora esiste un
indipendent set di taglia K e questo K
ancora non sappiamo chi è. Ok?
Facciamo questo.
Per ognuno
delle clausole di fai
prendiamo un letterale vero secondo
sigma.
Quando dico un letterale vero secondo
sigma, potrebbe essere che sigma rende
vero questo letterale e quindi sta
assegnando x3 falso. Ok? Un conto è
assegnamento alle variabili, un conto è
il valore di verità dei letterari. Ok?
Quindi noi sappiamo che sigma soddisfa
fai, quindi sigma soddisfa tutte le
clausole di f, che vuol dire che ogni
clausola ha almeno un letterale vero
secondo sigma.
Prendiamo la prima clausola, becchiamo
un suo letterale vero, il relativo nodo
lo infiliamo dentro s, ok? Quindi
costruiamo un insieme s di sigma
proveniente da sigma. Ok?
Quindi, se il letterale della clausola i
è vero, un letterale della prendiamo il
relativo nodo di quella tripletta di
nodi e lo insuriamo dentro s di sigma.
Ci siete? Come stiamo costruendo s di
sigma?
Facciamo questo per tutte le clausole di
file. Ok,
ci siete?
Sì. Eh,
tu si prendono tutti i letterali, no?
Uno uno a clausola. La la riduzione non
è finita. Vi mostro, ok? Ve l'anticipo.
È sbagliata sta riduzione. Dobbiamo però
capire dove andare a mettere una pezza.
Ok? Ecco perché ve la sto facendo a
pezzi. Ok?
Ripeto, partiamo da sigma. Sigma
soddisfa. Siccome sigma soddisfa file,
allora ogni clausola è soddisfatta da
sigma, il che significa che secondo
sigma in ognuna delle clausole c con i
ci sta un certo letterale che è vero.
Dobbiamo costruire s partendo da sigma e
lo chiamiamo s sigma per ricordarci che
è un s che proviene da sigma. Ok?
Sigma è costruito così. Prendiamo una
clausola.
Siccome sigma soddisfa quella clausola,
questa clausola avrà un almeno un
letterale vero. Ne prendiamo uno a caso,
lo infiliamo dentro s sigma, ok? E
facciamo questo per tutte le clausole. È
chiaro? Bene. Quante nodi ci stanno in
Sigma?
Tante quante sono le clausole. Tante
quante sono le clausole. Ok? Quindi
avremo che la cardinalità
di questo insieme è m dove m sono le
clausole. Ok?
Quindi iniziamo a fare questo.
Il la noi dovevamo avere un'istanza di
indipendent set che è grafo numero. Come
k diamo M.
Ok?
Scrivo meglio. Questa è una coppia.
Questa è la mega parentesi. Ok? Qua c'è
una virgola e questa è m. Ok? Quindi G
viene generato secondo quell'algoritmo.
Il K della coppia GK è M, il numero di
clausole.
Riguardiamo
qual è la taglia di Sigma
M per costruzione. Ok? S sigma è un
indipenden set o no?
Per non esserlo che dovrebbe succedere?
Lo sa pure l'ambulanza. C M Attenzione,
attenzione, attenzione, M non c'entra.
Sto prendendo Sigma.
La domanda che adesso noi ci poniamo è i
nodi che abbiamo infilato in Sigma sono
o non sono un indipendetto?
Supponiamo che non lo siano.
Se non sono un indipendent set, che deve
succedere? ci deve essere due nodi
dentro sigma che sono collegati da un
arco. Ok? Da un arco di quale grafo?
Questo. Non un grafo a caso, questo qua.
Quali nodi sono collegati in questo
grafo?
Rivediamo che questo è un passaggio
importante per prendiamo Sigma.
ci chiediamo se i suoi nodi sono
unindipendet o meno. Supponiamo che non
lo siano, cioè per contraddizione
assumiamo che Sigma non è un indipendent
set. Se non è un indipendent set ci
stanno due nodi dentro s sigma che sono
collegati da un arco. Questi nodi e
questi archi non è che vengono da un
grafo a caso, vengono da questo. Ok?
Quindi se ci sono due nodi in Sigma che
sono collegati da un arco, saranno ad
esempio questo e questo o non possono
essere altri. Quindi se fossero
collegati
due nodi dentro s sigma, allora avremmo
che sigma sta valutando, vero? Un
letterale è il suo opposto. Ma cioè
possibile?
No, quindi Sigma è un independent.
Ci siete con la col ragionamento?
Ok. Quindi cosa abbiamo dimostrato? Che
questa trasformazione
se parte da una formula fa
insoddisfacbile
ottiene una coppia grafo numero in cui
il grafo ha un'indipendenzetta di taglia
quel numero dove quel numero è il numero
di clausole di F. Ok? È finita la
dimostrazione? No, perché dobbiamo
dimostrare che se arriviamo a una coppia
del genere
era perché la formula di partenza era
soddisfacile. Ok?
Supponiamo di essere arrivati a
un'istanza sì, quindi questo grafo
ottenuto partendo da quella formula
ha un'indipendenza di taglia M. Ok?
Sia s e state qua attenti perché ora c'è
il passaggio strano. Sia s un
indipendent set di taglia M su un grafo
ottenuto in questo modo. Ok? L'idea
sarebbe e quella che noi vorremmo è che
andando a guardare chi sono i nodi
dentro noi tiriamo fuori un assegnamento
di verità per fichi
che f sia soddisfacile. Ok?
Prendiamo un indipendenzetto
di taglia M, ok? E facciamo così. Quindi
partiamo da S e costruiamo un sigma S,
ok? Un assegnamento che parte dalla
dall'indipendent set qua sopra. Quanti
quanti nodi ha questo indipendentet? S
almeno M. Ok? per definizione.
Se il un nodo letterale dentro s
nodo dentro s,
allora noi assegniamo a sigma il
relativo assegnamento di verità coerente
con il fatto che quel letterale sia
dentro S. Quindi se ci sta x2 dentro s
sigma assegna vero a x2. Se dentro S not
x3, allora sigma assegna falso a x3. Ok?
Bene. Possiamo essere certi che una
assegnamento di verità fatto così
soddisfi la formula di partenza?
Be careful.
No, mi sa dire perché
x2 è vera cosa?
No, no, ovviamente questi qua non
possono entrare nell'indipendent set
perché nell'indipendent set le cose
agganciate da un arco non ci stanno,
cioè non saranno dentro s. Quindi
sicuramente la sigma di s che tiro fuori
è qualcosa di coerente, cioè non è che
assegna vero e falso alla stessa
variabile perché ovviamente essendo un
indipendetto in indipendentetto ci sarà
questo e questo in s. Quindi sigma di s
è consistente.
Ma siamo sicuri che sigma di soddisfa
fai?
Per soddisfare fai sigma di s che
dovrebbe fare? soddisfare tutte le
clausole e siamo sicuri che sigma di
soddisfi tutte le clausole? Io potrei
teoricamente prendere, facciamo m sia
tre, io posso prendere tre nodi che però
non appartengono a tre clausole diverse.
Esattamente, è quello il problema.
Questa riduzione non funziona perché
S a cui noi chiediamo che sia almeno M e
in questo esempio specifico è 3 potrebbe
essere questo qua,
cioè io riempo S con con più nodi che
provengono dalla stessa clausola. Ok?
Quindi per formule più intricate io la
garanzia che la sigma di s che sto
costruendo soddisfica ce l'ho. Ok?
Quindi dobbiamo evitare che in Sadano a
finire noti provenienti da una stessa
clausola. Come facciamo?
Li colleghiamo. Ok? Questo ci risolve la
questione.
[Musica]
Ok, questo
non
4 sono
Yes. E quello le soddisfa la formula.
Ripetiamo. Ok, adesso vi ho fatto vedere
il passaggio lungo per far vedere come
si ci si arriva a costruire queste cose.
Cioè, uno ci prova, inizia a fare un
primo mapping, poi vede che le cose non
funzionano, lo aggiusta un pochettino.
Ok. È così che funziona. Cioè nessuno,
immagino che qualcuno ci sia, ma non
sono quello io che riesce ad avere la
soluzione fin dall'inizio. Io ci devo
pensare. Ok? Come ci penso? Ci penso a
passi e gran parte, cioè tutti i miei
colleghi, quelli che conosco io, sarà
che non conosco Geni, non lo so,
procedono a passi. Ok.
Però ricordo uno dei miei supervisori a
Oxford che era un genio e lui procedeva
a passi, quindi così si fa, cioè magari
riusciva a vedere un po' oltre, no?
Faceva dei passi più grossi, ma la
rifinitura andava sempre fatta. Nessuno
è in grado di vedere la fin. Ok?
C'è un'interessante discussione
di
Scott Aronson che è un famoso
informatico teorico, una discussione
filosofica sul fatto per cui P sia
inverso da NP e lui sosteneva lui dice
se P fosse uguale a NP
di teoremi sarebbe ugualmente semplice
come verificarne la dimostrazione
corretta, cioè La differenza sta nel
fatto che uno se lo deve inventare e
quello è la parte difficile. Se noi
fossimo in grado di sapere fin
dall'inizio avere la visione fino in
fondo di come dimostrare qualcosa,
allora P sarebbe uguale a NP, cosa che
non ci aspettiamo che accada. Ok? Sì.
Poi per esempio un esponente Mente
secondo, no? La dimostrazione la
dimostrazione di problemi, la
dimostrazione di teoremi n argo per
parti logica ridotto per logica estesa è
indecidibile, cioè non si fa.
Però la questione è appunto questa, cioè
la parte difficile è essere creativi, è
quella la parte difficile. Stiamo
supponendo che Q ugp se P è uguale a NP.
Sì, sì, però comunque potrebbero
comunque avere un esponente molto
diverso, quindi uno è un al quadrato,
l'altro è 100.
Ah, va. Ok, però sì, in realtà noi
prendiamo dal dalla polinomialità il
fatto che sia semplice, ok? Quindi è
normale, è naturale che quando pensiate
a queste cose la soluzione non vi viene
al primo colpo, ok? Si fa si fa prove si
fa prove guidate dall'intuito, cioè non
è che io mi metto e provo tutte le
riduzioni possibili. Io faccio quelle
considerazioni che vi ho detto prima. Mi
studio qual è il problema iniziale, mi
studio qual è il problema finale, le sue
istanze. Istanza sì, istanza sì, istanza
no, istanza no. Poi cerco di capire come
mappare le caratteristiche di un
problema sulle caratteristiche di un
altro. Ok? E quelle sono in genere le
domande che mi pongo. Mi pongo domande
del tipo, ok? Ma la soluzione del primo
problema in cosa consiste? Scegliere le
variabili vero o falso. Ma la soluzione
del secondo problema in cosa consiste?
Scegliere i nodi dentro fuori. Ah, ok.
Allora, probabilmente devo inventarmi
una riduzione, una trasformazione che mi
mappi la scelta vero o falso su nodi
dentro fuori. Ok? Cioè, quindi ho una
guida, ovviamente non so dove andrò,
però un minimo di guida ce l'ho,
nonostante c'ho la guida.
Le riduzioni vanno rifinite, nessuno se
le riesce a inventare al primo colpo.
Ok? Sui libri questo non ve lo dicono
perché sul libro c'è la riduzione punto.
E uno pensa: "Oh cavolo, è stato un
genio questo inventarselo." Magari ci ha
messo 3 mesi e non ve l'ha detto. Ok.
Eh, alright. Allora,
Milla, è tardissimo.
Ridimostriamo quindi che questa
riduzione è corretta, la facciamo
pulita, poi alle prossime andrò un
pelino più veloce. Ok?
Allora, noi vogliamo dimostrare che 3
SAT si riduce a
indipendetti. In questo modo noi avremo
che indipendence set è np hardware come
tre esat, ok? Da cui otterremo l' NP
completezza di dell'indipendent. Chiaro?
Funziona così la riduzione sia fai una
formula in CNF, guardate, fai deve
essere in CNF. Noi stiamo trasformando,
noi possiamo costruire questo grafo con
questa formula, con questa forma perché
FC GNF. Se fai fosse stata in un altro
modo, non avremmo saputo che fare. Però
siccome noi sappiamo che basta una
formula in CNF per renderla
difficilmente risolvibile, noi ci
prendiamo quello perché ci siamo questa
cosa qua. Ok?
Sia fai una formula in GNF, dobbiamo
generare la coppia GK.
Come generiamo G? Dobbiamo dire chi sono
i noi, chi sono gli altri, chi sono Sì,
gli Ari. Ok.
I nodi di G. Abbiamo un nodo per ognuno
dei letterali che appare dentro F.
Gli archi di G chi sono? Abbiamo archi
che collegano i letterai di una stessa
clausola e quindi lì abbiamo le
triplette, ok? e poi archi che collegano
nodi relativi a letterari opposti.
Finita la definizione di G, vi ricordo
che la funzione di trasformazione è un
algoritmo, ma io non lo sto scrivendo
questo algoritmo. Va bene così? Va
benissimo così. Sull'esame andrà bene
così? Andrà bene così. Se si capisce in
maniera cristallina
cosa state trasformando in cosa e come
lo ottenete. Prego. Se per esempio esame
facessimo un errore come non mette gli
altri varie cause perdremmo
completamente? No, te lo stimo. E certo,
no, io stesso sbagliai una riduzione
quando ero studente all'esame di
l'ho fatto. Ecco, ecco perché poi ci
sono diventato attento, perché un errore
comune che ho fatto nella mia prova
d'esame, ho fatto la riduzione nel verso
opposto, cioè ho ridotto tra virgolette,
non era indipendetta, era un'altra cosa,
ho ridotto indipendetta a tre esatti e
invece devo fare l'altra via. Ok, quello
è un errore comunissimo, ci dovete stare
attenti. Ok?
Se ci chiedi un esercizio, un problema
un altro io devo ridurre No, lei dipende
che cosa vuole ottenere. Se lei vuole
ottenere che indipendetta è NP arduo,
per dire, allora deve ridurre un
problema NP arduo noto a indipendentet.
Se lei vuole mostrare che Indipendent
sta in NP, allora può ridurre
Indipendent a un problema NP completo,
ma è una la cosa un po' lunga, le
conviene la macchina non deterministica,
ok?
Eh, quindi abbiamo detto il grafo,
dobbiamo dire K. Chi è K? È il numero di
clausole di fil. Ok? Questa è la
trasformazione.
Alri?
Dobbiamo dimostrare quindi che se
partiamo da f soddisfaccibile
[Musica]
f di f, cioè la trasformazione di f
secondo f genera una bocca grafo numero
tale che il grafo ha un certo il grafo
ha un indipendette di taglia k con k
numero di clausole di fil. Ok?
Supponiamo che fai sia soddisfacile.
Se fai è soddisfacbile,
allora
esiste un assegnamento sigma che
soddisfa.
Ci siete?
Adesso noi dobbiamo mostrare che
G ha un indipendetti di taglia M, ok? Di
K. Che K è quell M lì. Come facciamo?
Partiamo da S. e costruiamo un insieme
sma, quello che avevamo scritto là. Ok?
Che ci infiliamo in sma?
Per ognuna delle triplette di nodi
prendiamo un nodo
in cui letterale è vero in sigma.
Abbiamo garanzia che questo c'è perché
sigma soddisfa.
Quindi in S di sigma finiranno tanti
nodi quanto le clausole e in particolare
un nodo per ogni clausola.
Prendo un nodo
relativo a un letterale
reso vero da sigma.
Abbiamo la garanzia che questo letterale
esista
perché sigma
soddisfacendo file
deve soddisfare tutte le clausole.
È quella uguale. Sì, sì, è quella model.
Ok.
È chiaro per tutti come possiamo sma?
Quanti nodi ha s sigma?
M ed m è K. Quindi semmai S sigma fosse
un indipendente sarebbe dalla taglia
giusta.
Sigma è un indipendent.
Supponiamo per assurdo che non lo sia.
Ok?
Se
ah ah no, ve lo dimostro meglio.
Ok, guardiamo il contenuto di Sigma.
Stavo facendo un passo extra. Ok,
guardiamo il contenuto di Sigma.
No, stavo procedendo bene.
Sigma,
Sigma
è un indipendenzet, sì o no? Supponiamo
che non lo sia. Ok? Se non lo è, devono
esserci due nodi dentro Sigma che sono
collegati da un arco. Ok?
Quali archi ci stanno in questo grafo? o
quello delle triplette o quello tra le
triplette.
È possibile che ci sia
ci siano due nodi
in sma provenienti dalla stessa
tripletta e quindi sono collegati da un
arco, no? perché ne abbiamo preso uno a
tripletta. Quindi sicuramente sem mai ci
dovessero essere due nodi collegati da
un arco in sma, devono essere nodi che
provengono da triplette differenti.
Chiaro?
Ma se questo è il caso, allora vuol dire
che sono nodi
relativi a letterali
opposti,
ma ciò non può essere perché partiamo da
un assegnamento sigma che è consistente.
Quindi Sigma
è un indipendent di taglia K e quindi se
la formula f era soddisfaccibile abbiamo
ottenuto un'istanza sì del problema
dell'indipendetta. Ok?
Wow!
Altro verso.
Supponiamo che siamo arrivati a
un'istanza sì dell'indipendet.
Ok?
sia
un indipenden set di taglia k
la nostra istanza di indipenden noi
vogliamo mostrare e da qui riusciamo a
ottenere un assegnamento s sigma che ci
certifichi che la formula iniziale di
partenza, qua mi manca un pezzeriello,
la formula iniziale di partenza è
soddisfacile. Ok, partiamo da S. S è un
insieme di taglia
M. Ok.
Alright.
È possibile che noi dentro esse abbiamo
più nodi provenienti dalla stessa
tripletta? No. Quindi in S abbiamo un
esattamente un nodo da ogni tripletta.
Come generiamo Sigma?
Sigma
assegna.
Ok. Per ogni nodo che sta in Seriamo,
se ci sta un letterale tipo x 2, il
sigma di S mettiamo X2, vero? Se dentro
Sono di un letterale negato,
in sigma di S mettiamo ad esempio x3 =
falso, ok? e lo facciamo per tutte
queste.
Prima domanda.
Questo assegnamento di verità è
consistente generato in questo modo?
Cioè, abbiamo la garanzia che non ci sia
una variabile buleana che dentro sigma e
sia vero che falsa
per forza perché in s cose opposte non
ci possono finire perché ci stanno gli
archi che le legano, ok? Quindi Sigma di
S è un assegnamento consistente.
Guardate che sigma di S potrebbe essere
incompleto, cioè questa questo metodo
che abbiamo di tradurre il contenuto di
s in un assegnamento di verità potrebbe
far accadere che in sigma di s alcune
variabili non sono assegnate a niente.
In quel caso ci mettiamo valore a caso.
Ok?
Quindi da qui otteniamo che sigma di S è
consistente. Ci chiediamo se sigma di
Soddisfi
Ok?
Supponiamo per assurdo che non sia così.
Di conseguenza
esiste una clausola dentro fai
i cui letterali sono tutti falsi secondo
sigma di s,
ma ciò equivarrebbe
al fatto che in Sremmo
preso alcun nodo di una certa tripletta,
ma ciò non è possibile. Di conseguenza
questo qui deve essere un assegnamento
di verità che certifica che fai è
soddisfacile.
Chiaro?
Quindi noi otteniamo che questa
riduzione trasforma istanze sì di CNF su
istanze s di indipendentet e istanze no
di CNF in istanze no di independence set
eh da cui independence 7 è NP arduo e
siccome rank anche l' NP è NP completo.
Chiaro?
Ok,
ci fermiamo. Pausa. 10 minuti.
[Musica]
[Applauso]
Ripartiamo.
Alri,
vediamo
un altro po' di problemi.
Ok, altro problema sul grafo. Vertex
cover.
Allora, cos'è un vertex cover
di un grafo?
Un lo sapete mai visto prima? Ok. Un
vertex cover
di un grafo è un sottoinsieme dei suoi
vertici,
magari chiamiamolo C.
tale per cui
ogni arco
del grafo
ha almeno un end point in C.
Ok? Quello è un vert, cioè un vert è un
insieme dei nodi del grafo tale per cui
copriamo tutti gli archi, ok? significa
che
eh noi siamo in grado di
vedere tutti gli archi. Una similitudine
un po' un po' fessa potrebbe essere,
supponiamo di avere una casa con vari
corridoi no corridoi sono gli archi e i
nodi sono i punti in cui andiamo a i
corridoi si incontrano. Se andiamo a
mettere delle telecamere
nei punti di incontro, noi siamo in
grado di controllare tutti i corridori.
Ok? Quello è un po' il senso del del
vertex cover. Ok?
Dato un grafo. È vero o no che questo
dobbiamo sempre trovare la versione di
decisione? eh dato un grafo e quindi un
verte cover per questo potrebbe essere
ad esempio
questo qua e poi ci manca questo
arco qui, quindi ce ne serve un altro,
ad esempio questo. Ok?
Allora,
dato un grafo, è vero, no? Che un grafo
ha un vertex cover?
Sì. Quale? Eh, tutti i nodi. Ok. Quindi,
dato un grafo, decidere se ha un vertex
cover o meno è un problema banale. La
risposta è sempre sì. Tutti i nodi sono
un vertex cover del grafo. Problema più
difficile è al solito quest'altro vertex
cover. È l'insieme delle coppie grafo
numero tale che G ha un vertex.
cover
di taglia
al più K.
Ok, quindi independent set eravamo
interessati a trovare independent di
taglia grande. Invece vertex cover,
siamo interessati a trovare vertex cover
di taglia piccola. Ok.
Alright.
Dimostriamo che vertex cover è NP
completo.
Ovviamente sempre i due passaggi. È vero
o no che vertex cover appartiene a NP?
Sì. Come facciamo?
che siamo i nodi e poi controlliamo che
siano al alk
effettivamente ricoprano che ricoprano
tutto. Questo guess e questo check si
può fare in tempo polinomiale, sì.
Quindi vertex cover,
abbiamo che vertex cover appartiene a
NP.
Dobbiamo ora mostrare che vertex cover è
NP
arduo.
Ok.
La riduzione è particolarmente furba.
Facciamo una riduzione da independent
set. Ok?
Che una volta che iniziamo ad avere
problemi NP completi, quelli là li
possiamo usare come sorgenti di
complessità. Ok? Per esempio, ora non è
che sto andando a, sebbene sia possibile
fare una riduzione da SAT a vertex
cover, però c'ho Indipenden Set che è
già un problema su grafiche, è una cosa
molto più semplice, ok? Quindi io
trasformo l'indipendent setanze
di indipendence set in istanze di vertex
cover, ok? Quindi all'esame
qualsiasi problemazione
che Sì, molto probabilmente te lo
suggerisco io il problema. Guarda che
forse questo ti è utile. Ok.
Ah sì, perché senò insomma c'è da
pensare anche a quello ed è lunga. Ok.
Alright. Allora, solita storia.
Che cos'è un'istanza di indipendet?
Grafo numero.
Che cos'è un'istanza per vertex? Come?
Grafo numero li chiamiamo in un modo
diverso H ed, giusto per non
confonderci. Ok? Quindi quello che noi
dovremmo fare è
trovare una funzione di trasformazione
calcolabile in tempo polinomiale che
dato una coppia GK grafo numero k tira
fuori una coppia grafo H numero L. tale
per cui il grafo G ha un indipendenzette
di taglia al- K se solo se il grafo HX
cover di taglia al + L. Ok?
La riduzione è furbissima e si basa su
questa osservazione.
L'emma
sia G v è un grafo
non diretto. Eh, qui stiamo facendo
tutta roba non diretta al momento.
e sia s
un insieme
di nodi.
Allora,
S è un independent set
se e solo se
il complemento di S, quindi V - S
è un vertex cover.
Ok? Cosa ci dice questa proprietà? E se
noi abbiamo un grafo e un insieme S,
quell'insieme S è un un dipendent set.
Se solo se il suo complemento, cioè gli
altri nodi, sono un vert color, ok? C'è
questa proprietà di dualità tra i due
insiemi che ci permette poi di fare una
riduzione immediata. Dimostrazione.
Facciamo questo verso. Quindi cosa
abbiamo?
S è un independent set.
Assumiamo per assurdo che V - S non sia
un vertex cover. Questo è fero assurdo.
Ok.
Chiaro cosa stiamo facendo? Dobbiamo
mostrare che se S è un indipendenzetta,
allora V - S è un vertex cover. Come lo
dimostriamo? Partiamo per assurdo.
Diciamo supponiamo che invece V - S non
sia un vertex cover, nonostante Sano un
indipendente. Ok? Se V - S non è un
vertex cover,
significa che ci sta in G
un arco
i cui end point
entrambi stanno non stanno in V - S.
Ma se non stanno in V- S, dove stanno
quegli end point?
S. In S. E quindi S non è un indipendet,
perciò B - S deve essere un verte cover.
Chiaro? Ripeto,
prendiamo S un indipendent, consideriamo
il suo complemento rispetto a B.
Supponiamo che il suo complemento
rispetto a V, che ne so, chiamiamolo C,
dai,
non sia un vertex cover. Se C non è un
vertex cover, allora significa che
esiste un arco di G i cui end point non
stanno in C, ma siccome C è il
complemento di S, se gli end point di
questo arco non stanno in C, devono
stare tutti e due in S.
Ma allora in Sno nodi agganciati e
quindi S non era un dipenden set.
Contraddizione, C deve essere per forza
un vertex cover.
Supponiamo
che C = V - Sia
vertex cover
S.
non sia un independent set per assurdo.
Ok, facciamo la cosa al contrario, è
simile.
M
ok.
Supponiamo che S non sia un independent
set, nonostante il suo complemento sia
un vertex cover.
Se S
non è un indipendentet,
allora ci stanno due nodi in S
collegati da un arco.
Ma se ci sono due nodi in S collegati da
un arco, quello è un arco i cui due end
point non stanno in C. Ma allora C non
era un vertex cover, contraddizione.
Quindi S deve essere per forza un
indipendente. Sì.
Ah, ok. Supponiamo che C, che è il
complemento di S, sia un vertex cover e
che S non sia un indipendent set. per
assurdo.
Se S non è un indipendent set, allora ci
devono essere due nodi dentro S
collegati, il che significa che esiste
un arco i cui end point stanno dentro S,
ma se i suoi end point stanno dentro S,
quelli non possono stare dentro C, che è
il suo complemento e quindi quello di
partenza non era un vertex cover, è una
contraddizione. Di conseguenza abbiamo
questa proprietà che se S è un
indipendent
di eh G, allora il suo complemento è un
vertex cover di C di G. Ok? Quindi
possiamo
ottenere la trasformazione in questo
modo semplicissima. GK trasformato in
HL.
Sfruttiamo questa proprietà eh di
dualità.
Dobbiamo dobbiamo dire sostanzialmente H
come si ottiene da G L H come si ottiene
da G e K ed L come si ottiene da G e K.
Ok?
H lo definiamo uguale a G
e L lo definiamo come il numero di nodi
- k - k. Ok?
Quindi il grafro rimane invariato,
l'intero viene complementato, diciamo,
prendiamo il numero di nodi, gli
sottraiamo K. Ok?
Chiaro? Com'è questa trasformazione? Il
grafo rimane di invariato.
Al numero
L, che cosa diamo? Il numero di nodi
meno questo K. Quindi se il numero di
minori era 10, K è 3, qua gli diamo 7.
Ok? È chiaro? Come si ottiene L? Questa
trasformazione si può ottenere in tempo
polinomiale? Sì, il grafoo è ricopiato,
poi dobbiamo fare una differenza. È una
cosa abbastanza semplice. Qua lo scrivo
un pelino meglio.
Ok.
Dobbiamo ora dimostrare
che se G ha un indipendenzetto di taglia
almeno K, allora
H un verde cover di taglia al più l è
quel numero particolare. Eh,
ok? Per far questo usiamo il lemma di
prima. È semplicissimo. Ok? Supponiamo
che G abbia un indipenden set di taglia
K.
sia S tale indipendette.
Il suo complemento
è un vertex cover di C
di taglia numero di nodi - k
sia
GK un'istanza sì di indipendetta. Di
conseguenza, G è un grafo che ammette un
indipendente di taglia K,
sia S
un tale indipende Z, ok?
Di taglia K.
Consideriamo il complemento di S.
Per ilma precedente
il complemento di S
è un verte cover. Un vertex cover di
chi? Di G.
Ma siccome H è uguale a G, il
complemento di Sà un verte cover di H.
Qual è la taglia del complemento di S? È
quel numerello là. numero di nodi - k.
Quindi se S
è un'indipendenza
di C,
allora il complemento
di S
è un verte cover di H di quella taglia
da cui
se parto da un istanza Sì di indipendent
arrivo a un istanza Sì di verte cover.
È chiaro per tutti? Il il fulcro della
dimostrazione è il lemma che abbiamo
dato prima, che è il duale, cioè il
complemento di indipendent un verde
score. Ok?
Altro verso della dimostrazione.
Supponiamo di essere arrivati a
un'istanza s di vertex cover.
Quindi in H
esiste un vertex cover di taglia L.
Chiamiamo questo vertex cover.
C.
Consideriamo il suo complemento.
Complemento di C.
Per il lemma precedente
il complemento di C è un indipendent
di H.
Ma H è ug,
quindi il complemento di C è un
indipendenza
di G.
ci chiediamo se il complemento di C sia
un indipendezza sufficientemente grande
per forza, perché siccome C ha una
taglia al più questo,
il suo complemento ha una taglia almeno
questo per definizione della
trasformazione.
Di conseguenza,
se siamo arrivati a un'istanza
sì di vertex cover, era perché partivamo
da un'istanza sì di indipendent
da cui vertex cover
è np arduo e quindi NP completo.
Cioè, gran parte dei problemi
combinatori.
NP completo, ok? Sono tutti relati fra
di loro.
Chiaro per tutti questa dimostrazione?
Altro problema. Questo lo conoscete
sicuro perché, insomma, è abbastanza
semplice.
Problema della
click o cricca, non so come lo chiamate,
cos'è una click o una cricca su grafo,
lo sapete?
No, è un sottografo
completamente connesso.
Ok? Cioè, quindi abbiamo un grafo, che
ne so, questo qua.
Questa qui è una click di taglia 3. Ok.
Perché tutti i nodi sono collegati a
coppie. Ok.
Dato un grafo.
È vero, no, che questo grafo ammette una
click.
Sì. Quale? L'insieme vuoto o l'insieme
di un nodo. Quindi è un problema banale.
Ci serve la sua variante, la solita
variante V. Utile. Click.
e l'insieme delle coppie grafo numero
tali che G ha una click
di taglia
almeno K.
Ok.
Vogliamo dimostrare che click è NP
completo.
Per essere NP completo dobbiamo fare
sempre i due passaggi. Membership
hardness hardness. È vero, no, che click
appartiene a NP?
Sì. No, forse
sì. Come lo dimostriamo?
Gessiamo la click, cerchiamo la click.
Gioco fatto. Si fa in tempo polinomiale.
Il problema è in NP. Dobbiamo dimostrare
che è click
e NPR2.
Ok.
Riduzione pure in questo caso da
independent set.
un'istanza di independent set è una
coppia GK, un'istanza per click e una
coppia HL. La facciamo così. Ok,
dobbiamo trovare una trasformazione F
opportuna.
Già tutto sto sp. Ah, ok.
ci focalizziamo su questa cosa, ok?
Sia G un grafo di E.
Definiamo il complemento di G
come il grafo in cui i nodi sono gli
stessi e gli archi sono
scambiati, flippati. Dove non ci stava
ce lo mettiamo. Dove ci stava lo
togliamo. Ok? Quell viene fuori un
attimo come quella viene fuori è
l'insieme degli edg del grafo.
Un grafo è una coppia no di archi e è
edges. Non so come non sono a conoscenza
di parole italiane si usano parole
diverse per archi diretti e non diretti
in italiano
me l'hanno mai detto no perché in
inglese generalmente si usano parole
diverse. Quindi mi chiedevo se ci sta
che in inglese edge è non diretto, arc è
diretto. Ok, vabbò.
Quindi noi abbiamo questo grafo B dove è
l'insieme degli edge.
Il complemento di G lo definiamo come il
grafico in cui i nodi sono uguali,
gli archi sono all'opposto.
Se una coppia di nodi non era collegata,
in G soprasegnato, li colleghiamo. Se
una coppia di nodi era collegata in G,
in G soprasegnato, togliamo l'ar. Ok,
facciamo proprio l'opposto. Torn
Lemma.
Allora, questo lo sto improvvisando,
solo la proprietà. Sta stiamo attenti
che non vorrei dire stupidaggine, ok?
però dovrebbe funzionare sia G un grafo
se eh ah ah ah.
Allora,
S è un independent set
di G
se è solo se S
è una click
in G soprassegnato. Ok, questa è la
proprietà che ci serve.
Dovrebbe funzionare. No, vediamo un po'.
Ok,
questo l'avevamo fatto doppio.
Sì.
Allora,
sia S un independent set di G, assumiamo
che
S non sia una click.
in G soprasegnato. Questo per assurdo.
Ok.
Allora,
sì, sì, se S
non è
una click
in G soprasegnato,
allora vuol dire
che in Sno
nodi
che in G soprasegnato non sono
collegati.
Ripeto, stiamo partendo da S che è un
indipendent set per G.
Allora, noi vogliamo mostrare che S è
una click in GR, ok?
Lo mostriamo per assurdo. Supponiamo che
questo insieme S di nodi in g barrato
non sia una click.
Se non è una click, S in G barrato deve
avere due nodi non collegati fra di
loro.
Ma allora vuol dire che quei due nodi in
G non barrato
erano collegati e allora S non era un
indipendent di GAR,
quindi per forza S deve essere una click
di GAR. Chiaro?
Altro verso.
Ma ce la facciamo pure a fare dominating
set mostruoso.
Allora, sia
S una click
di G barrato.
Assumiamo
che S non
sia un indipendent set in G e questo per
assurdo.
Ok.
Alright.
G barrato G. S è una click qui, Sindet
qui. Se S non è un indipendentet in G
non barrato,
ci sono due nodi di S che dentro G sono
collegati.
Ma allora per definizione di grafo
soprasegnato, quei due nodi qui erano
sganciati.
da cui S non era una click di GR.
Contraddizione.
Chiaro?
Quindi abbiamo questo lemma intermedio
che ci dice che se S dato un insieme S
in S è una un indipendenzet di G se solo
se è una click di G barrato. Sfruttiamo
questa proprietà per la trasformazione.
Anche in questo caso trasformazione
molto semplice.
Quindi partendo da GK dobbiamo ottenere
HL.
Facciamo così, H è ottenuto come G
barrato,
ok?
Mentre L è ottenuto come K. Prendiamo,
lo copiamo.
Ok.
Chiara la riduzione?
H e G bar invertiamo e otteniamo H. L è
la copia di K. 5 5 9 9 1000 1000.
Ok?
Dobbiamo dimostrare che questa
trasformazione trasforma istanze sì di
indipendentet in istanze sì di click e
istanze no di indipendent setet in
istanze no di click. Ok?
Supponiamo
che GK sia un'istanza s di indipendetta.
Ciò vuol dire che G
ammette un indipendent set S di taglia
K.
Per il demma precedente
S
è una click di G barrato
di taglia K, ma per definizione di H
Slick
di H di taglia L.
Chiaro?
Quindi
partendo da un'istanza sì di indipendent
siamo arrivati a un'istanza sì di click.
Supponiamo di essere arrivati a
un'istanza sì di click.
Quindi h
ha una click S
di taglia
L.
Per il lemma precedente,
S è un indipendent set di taglia L di H
barrato,
ma per definizione di H L, hrato è G,
L è UG = K e quindi S
è un indipendent set
di G di taglia K. Quindi se siamo
arrivati a un'istanza Sì, era perché
partivamo da un istanza Sì,
da cui
indipendence si riduce a click e quindi
click è NPR. Insieme alla membership in
NP abbiamo che click è np completo.
Ok.
Altro esempio.
Ci siete? Sto andando troppo veloce.
No. Alrght.
Ultimo problema di oggi a questo punto
perché l'altro è troppo lungo.
Dominating set.
Dominating set è un altro problema di
sugrafo.
È un problema simile al vertex cover, ma
non completamente.
Cos'è un dominating set di un grafo?
Un dominating set di un grafo
è un insieme di nodi
tale per cui
tutti i nodi
fuori il dominating set
sono agganciati a qualche nodo del
dominating set. Ok? Ripeto, un insieme
di di nodi di un grafo è un dominating
set per il grafo.
Se per tutti i nodi fuori D
es un arco che mi collega a un nodo in
D. Ok? Questo è il dominio y un nodoì.
Esattamente come ci faceva notare il
nostro collega,
questo qui è un dominating set per
questo grafo, però
quello lì non è un vertex cover perché
c'è questo arco qua che non è coperto da
niente. Ok? Quindi il dominating set è
noi vogliamo essere in grado di
raggiungere da D tutti gli altri nodi,
invece nel verte cover noi vogliamo
essere in grado di coprire tutti gli
archi. Ok? C'è questa differenza nella
definizione.
Chiaro per tutti? Ok.
Yes. Quindi sempre un solo insieme di
Sì, questa è un osservazione
interessante e sarà appunto alla base
della riduzione,
cioè un vertex cover
e un dominio inset.
Ok? Perché? Perché se copriamo tutti gli
archi, vi ricordo che un vertex cover è
un insieme di nodi tale per cui preso un
qualsiasi arco, almeno uno dei suoi end
point sta nel vertex cover. Di
conseguenza
io posso raggiungere l'altro end point
da qualcuno che sta nel vertex cover,
quindi un vertex cover, questo ve lo
segno che è utile.
Vertex cover
è sempre
un
dominating
set,
ma non viceversa
come l'esempio mostra. Ok?
Quindi, che intuizione possiamo avere?
Nelle ultime due riduzioni che abbiamo
visto, la trasformazione è stata
estremamente semplice. Prendevamo il
grafo e lo ricopiavamo tipo nella
trasformazione da indipendetta a vertex
cover o ne facevamo il suo opposto. Ok?
Quindi in linea di principio quello che
si potrebbe fare perché eh ok no, no
andiamo per passi. Vogliamo mostrare che
dominating set è np completo. Ok? Quindi
ci servono sempre le due condizioni,
dominating set sia in NP e dominating
set sia NP arduo. È vero o no che
dominating set appartiene a NP?
Gesso cecco bla. Si fa tutto in tempo
polinomiale, quindi dominate inset sta
in NP. Ok. Quello che ci manca da
mostrare è che dominating set è
np arduo
[Musica]
e la riduzione la facciamo da vertex
cover.
Sì,
anche questi
in taglia. Sì, sì, sì, sì. Giusto,
eh? Where is it? Allora, mi serve una lo
scrivo qua di fianco, giustamente mi
sono dimenticato una cosa. Dobbiamo
definire il problema.
È vero, no, che un grafo ha un
dominating set? Certo, l'insieme di
tutti i nodi è sempre un dominating set.
Quindi, come ci faceva giustamente
notare il nostro collega, anche in
questo caso dobbiamo definire
una variante di decisione di questo
problema che sia sensato studiato.
Quindi, dominating set, l'insieme delle
coppie, grafo numero, tale che G ha un
dominating set, dominating
set
di taglia
al più.
K. Ok.
Alright. Quindi dominating set così
definito in NP. Sì, facciamo un guess di
di K nodi. Vediamo, verifichiamo la
condizione di dominate in set. Se è così
rispondiamo sì. Quindi il problema è in
NP perché tutto ciò si fa in polinomial
time.
NP hard. NP hard. Dobbiamo fare una
riduzione da vertex cover. Ok? Adesso
noi abbiamo che un vertex cover è sempre
un dominating set, quindi nella nostra
riduzione
GK che va verso HL
L.
Se noi il grafo G
lo lasciamo invariato, cioè H è la
stessa cosa di G, avremmo che se G ha un
verte cover di taglia K,
allora
H avrebbe un un dominating set di taglia
K, perché un vertex cover è sempre un
dominating set, però non avremmo la
garanzia del verso opposto, ok? Perché
potrebbe accadere che partiamo da una
coppia GK
in cui G non ha un vertex cover
di taglia K perché magari gli servono
più nodi per coprire tutti gli archi,
mentre lui ha un domaine di set di
taglia K perché servono meno nodi a
coprire tutti i nodi. Ok? Quindi H non
può essere la semplice propria di G,
deve essere un'altra cosa e la facciamo
così.
Allora, supponiamo di star trasformando,
voi lo vedete? Sì, di star trasformando
questo qui.
Noi aggiungiamo
dei nodi. Ok?
Allora, gli diamo dei nomi. Questo è
uno, questo è due, questo è 3 e questo è
4. Ok?
Voi la vedete più o meno? così, quindi
devo farlo qua. Facciamo così, la
struttura è più o meno preservata,
quindi facciamo 1 2 3 4, quindi parte
del grafo, cioè il grafo viene preso e
ricopiato. Poi ci aggiungiamo alcune
cosine per farci tornare i conti.
Aggiungiamo
un vertice in h per ognuno
degli archi di G. Quindi facciamo un
vertice qua,
un vertice qua, un vertice qua, un
vertice qua.
Ok?
E per distinguere li chiamiamo con delle
lettere A, B, C, D, ok?
E poi le li agganciamo ai rispettivi
nodi dell'arco.
Ok?
Quindi, come si ottiene H da G?
H G si ottiene in questo modo. Prendiamo
G, lo schiaffiamo dentro Hic.
Dopodiché ci aggiungiamo un po' di
pezzi.
Aggiungiamo
in h un vertice per ognuno degli archi
di G.
Sono i vertici che qua ho chiamato con
le lettere, ok? Quindi è questo qua che
è relativo a questo arco qui, questo qui
che è relativo a questo arco qui, questo
qua che è relativo a questo arco qui e
questo qua che è relativo a questo arco
qui. Ok?
Dopodiché quel ogni nodo aggiunto per un
edge lo agganciamo agli end point
dell'arco a cui mi si riferisce. Ok?
Chiaro?
Bene,
questo è h
questo è h ottenuto da G. L
otteniamo uguale a K. Scrivere ogni
formula che un nodo per ogni arco per
esempio non lo scrivere a formula. Scriv
a parola. Esiste un valore che
esiste modi
sembra. Sì, sì, si potresti fare con la
cardenalità, però cioè non non dovete
non è necessario essere estremamente
formali quando descrivete una ruzione.
L'importante è che è chiaro che fate,
cioè così come ve l'ho descritto a
parole, sareste in grado di scrivere un
algoritmo che trasforma G in H.
Sì. E allora va, cioè l'importante è che
la vostra descrizione linguistica
permetta di tirare fuori un algoritmo.
Tutto qua
chiaro? Ok. Adesso noi in questi ultimi
5 minuti, mi sa 6 dobbiamo mostrare che
se G K è un'istanza Sì di vertex cover,
allora HL è un'istanza Sì di dominate
inset.
E se HL è un'istanza sì di dominati in
sette, allora era perché GK, cioè
stavamo partendo da un'istanza sì di
verte, no? Di vertex di sì. Ok?
Supponiamo che GK sia un'istanza C di
vertex CO,
poiché allora esiste un insieme C di
taglia K che è un verte cover di G.
[Musica]
Ok?
Allora, prendiamo questo C. Ok,
poi vi dico una cosa giusto per
aggiustare, però se la dico adesso in un
casino, te la dico alla fine. Prendiamo
questo C, ok? Questo C ci chiediamo se
sia o no un dominate in set di H.
Allora, siccome C era un verte cover di
G,
da C
di cosenza in H, riusciamo sicuramente a
raggiungere tutti i nodi con un nome
numerico perché perché C era un verte
cover di G.
Però per costruzione di H da C
raggiungiamo i nodi con un nome
letterale
perché il grafo H è stato costruito in
quel modo. Ok? Quindi se C è un verte
cover di G di taglia K, allora C sarà un
dominating set di H di taglia L che è
uguale a K. Ok? E quindi se partiamo da
unanza S,
quindi se GK è un'istanza Sì, allora il
suo trasformato che è hl è un distanza
sì di dominate in set. Altro verso,
questo è è un pelino più intricato, ok?
sia D, quindi supponiamo che HL sia
un'istanza Sì, di dominating set, quindi
esiste
un dominating set Dlia
L.
Ok?
Questo insieme D
in linea di principio per come è fatto H
può contenere
nodi i cui nomi sono numeri o nodi i cui
numeri i numeri i cui nomi sono lettere.
Ok?
Prendiamo questo D
e facciamo questa operazione.
Se compare un nodo lettera, diciamo,
dentro D,
lo sostituiamo
con uno dei due nodi numero a cui
agganciamo.
È chiaro?
Quindi da D otteniamo un dibilde
tale per cui i suoi nodi sono tutti nodi
con un nome numerico.
Ma allora,
siccome questo ditilde è particolare,
siccome un dominate in set di H deve
raggiungere da ditilde non solo i nodi
il cui nome è un numero,
ma anche i nodi il cui nome è una
lettera.
Di conseguenza noi avremo che questo
ditilde, i cui nodi all'interno sono
quelli numerici, riescono ad acchiappare
i nodi che mimano gli archi. Quindi di
tilde
su G è un vertex covere.
Ve lo riesco, ve lo dimostro in un altro
modo. Supponiamo che D tild sia un
dominating set di questo che abbiamo
detto contenga solo
nodi con nomi numerici.
Supponiamo per assurdo che di tilde
non sia un verte cover di chi? Ehi, come
on man del grafo di sopra che è quello
di partenza.
Se di tilde non è un vertex cover di G,
esiste un arco in Gi,
due end point non stanno in ditilde.
Ma se i due end point di quell'arco non
stanno in ditte e sono nodi, il cui è un
numero, significa che in questo in
questo grafo non avrei per esempio né
due né tre. Ma se in ditilde non ho né
due né tre, io a B non lo raggiungo in
nessun modo, ok? Quindi per forza di
tildx
cover del graf iniziale di taglia K, fra
l'altro. Ok? Quindi se siamo arrivati a
un'istanza sì era perché partivamo da
un'istanza sì,
da cui
vertex cover si riduce al dominating
set. Dominating set è NP arduo perché
vertex cover è NP arduo e quindi
dominating set è NP completo. È
fantastico,
ce l'abbiamo fatta. Ok, chiaro per
tutti? Ok, quello che vi consiglio, la
lezione di oggi è un po' intricata
perché abbiamo visto trasformazioni,
cose qua. Quello che vi consiglio è
rivedetevi la lezione, ripercorrete le
dimostrazioni.
Quello che vi suggerisco è
provate a a far finta che voi stiate di
quelle proprietà a un vostro collega. Vi
mettete su carta, iniziate a scrivere e
fate finta di spiegare a qualcuno.
Quello là vi permette di organizzarvi le
idee, è chiaro?
E lo fate più di una volta. Ok? Questa
cosa vi permetterà un attimo di
riassarvi. La lezione di oggi era un po'
intricata.