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.