Seguici su Telegram, ne vale la pena ❤️ ➡ @trovalost
Vai al contenuto

Guida pratica alle superpermutazioni minimali

Non ha ancora votato nessuno.

Il mondo delle superpermutazioni è molto interessante a livello pratico, non soltanto teorico, e merita qualche esemplificazione per renderci conto di cosa parliamo. Supponiamo di avere una sequenza di numeri privi di ripetizioni (come potrebbero esserlo gli identificatori di una serie TV: serie 1 episodio 1, serie 1 episodio2, … fino a serie 6 episodio 6, o se preferite in notazione compatta 11, 12, 13, … fino a 66), e di voler trovare la successione più breve che consenta di sequenziare tutte le possibili permutazioni.

Che cos’è una permutazione


Cerchi un hosting economico per il tuo sito o blog? Tophost ti aspetta (clicca qui) - Puoi anche usare il coupon sconto esclusivo 7NSS5HAGD5UC2 per spendere di meno ;-)

Supponiamo di avere tre elementi: 1, 2, 3. Possiamo trovare tutte le possibili permutazioni di questi tre elementi.Le permutazioni possibili di lunghezza 3 saranno, per esempio:

(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)

In questo caso, abbiamo 6 permutazioni diverse dei tre elementi 1, 2 e 3. Ogni permutazione rappresenta un diverso ordine in cui gli elementi possono essere disposti. Il numero di permutazioni possibili è pari al fattoriale del numero di elementi, nello specifico 3! = 6. Non facciamo confusione con le combinazioni, perchè queste ultime sono simili ma non considerano l’ordine degli elementi, a differenza delle permutazioni.

Permutazioni in Python (esempio)

# si può usare la libreria permutations dentro itertools
from itertools import permutations

# trova tutte le permutazioni di lunghezza k=3
k = 3
perm = permutations([1, 2, 3], k)

# stampa il risultato
for i in list(perm):
  print (i)

Nel magico mondo delle super-permutazioni

Le permutazioni e le superpermutazioni sono concetti leggermente diversi: nello specifico, le superpermutazioni sono certamente più complesse rispetto alle permutazioni, e possono richiedere un’analisi più approfondita per essere trovate o calcolate correttamente. Abbiamo visto che permutazione è un riarrangiamento degli elementi di un insieme in un ordine specifico. Ogni elemento dell’insieme appare una sola volta nella permutazione, e nel caso di 1, 2 e 3, 123 e 132 sono due permutazioni differenti, perché l’ordine degli elementi è diverso (e l’ordine conta, a differenza delle combinazioni).

Una superpermutazione è una sequenza o stringa che contiene tutte le possibili permutazioni di un insieme di n elementi come sottosequenze. Facciamo un po’ di esempi semplici per amor di comprensione, dato che l’argomento non sempre viene affrontato in modo chiaro sul web. Per n= 1, la superpermutazione sarà banalmente:

1

Ponendo di voler sequenziare i due simboli 1 e 2, per n=2 avremo che la superpermutazione:

1221

che contiene effettivamente tutte le possibili permutazioni (12 e 21), per quanto la superpermutazione minimale sia la stringa più corta:

121

che contiene entrambe le permutazioni valide (12 e 21). Di fatto, partendo dalla prima posizione si ha l’ordine 12, partendo dalla seconda quello 21. Accertatevi di aver capito questo esempio perchè le cose si fanno un po’ più complicate già per n=3. La superpermutazione minimale sarà, in questo caso:

123121321

e non dovrebbe essere difficile vedere tutte e sei le permutazioni ammissibili presenti nel pattern:

(1, 2, 3) le prime tre cifre

(2, 3, 1) seconda, terza e quarta cifra

(3, 1, 2) terza quarta e quinta cifra

(2, 1, 3) quinta, sesta e settima cifra

(1, 3, 2) sesta, settima e ottava cifra

(3, 2, 1) ultime tre cifre

Abbiamo “sprecato” formalmente solo una cifra ed abbiamo usato un pattern risolutivo di lunghezza 9, tanto è vero che ci sono 9 cifre nella sequenza 123121321. Ma non solo: già per n = 3 c’è una sorta di “spreco” che inficia la lunghezza minima, ovvero il blocco 121 che evidenziamo di seguito:

123121321

121 che, ovviamente, NON rappresenta una permutazione. Motivo per cui la superpermutazione minimale di tre elementi dovrà essere lunga 9 caratteri, e non meno di 9. Se andiamo a vedere n=4, la superpermutazione minimale sarà:

123412314231243121342132413214321

mentre per n=5 sarà:

123451234152341253412354123145231425314235142315423124531243512431524312543121345213425134215342135421324513241532413524132541321453214352143251432154321

È stato inoltre scoperto che la lunghezza L di qualsiasi superpermutazione minimale di lunghezza n è pari alla formula ricorsiva:

L(n) = L(n–1) + n!

che scritta per esteso diventa:

L(n) = 1! + 2! + … + n!

Questa formula sembra valere per n compreso tra 1 e 5, per quello che ne sappiamo ad oggi.

Applicazione pratica del problema

Finora abbiamo discusso in termini matematico-informatici, e senza scendere troppo nei formalismi peraltro. Ma a chi e a cosa serve questo genere di “cose”? Immaginiamo per un istante di voler vedere una serie TV di cui non conosciamo l’ordine degli episodi: pensate a una serie qualsiasi non antologica, in cui esiste un ordine consequenziale, tuttavia ignoto per via di un ipotetico e terribile bug su Netflix non si vedano l’ordine dell’episodio e la serie.

Supponiamo adesso di voler vedere gli episodi nell’ordine corretto, ovvero: quanti episodi dovrai guardare per farlo? Se la serie fosse composta da soli 2 episodi, basterebbe vedere il primo, il secondo e poi di nuovo il primo, e qualunqu fosse l’ordine corretto ci ritroveremmo “a cavallo”. Chiaramente si tratta di un lower bound, di un limite inferiore, perchè non posso fare questa attività senza vedere almeno due volte l’episodio 1 e preservando la condizione data. Il bello è che, a questo punto, se volessimo estendere il ragionamento per n intero generico maggiore di 2, il numero numero minimo di episodi che dobbiamo guardare per una serie televisiva di n episodi non si sa ancora bene come si calcoli. È infatti uno dei grandi problemi aperti della matematica di oggi.

Il problema di Haruhi

Questa curiosa denominazione prende spunto dalla light novel nota in Italia con il titolo La malinconia di Haruhi Suzumi, per cui è successa una cosa abbastanza curiosa: i suoi 14 episodi sono stati trasmessi in ordine diverso da quello cronologico, sia in TV che in DVD. In questo caso avremo che n=14 ed è facile rendersi conto che la superpermutazione minimale non sia banale nè da scrivere, nè tantomeno da concepire anche solo numericamenteo come lower bound. Come fare a vedere tutta la serie nel minor tempo possibile, senza sapere l’ordine cronologico effettivo degli episodi?

Nel 2018 è stato dimostrato che un lower bound valido è:

L >= n! + (n-1)! + (n-2)!

il tutto concepito mediante una complessa dimostrazione costruttiva – che trovate al link indicato. Il bello è che il tutto era avvenuto su 4chan, con tutte le conseguenze del caso (e la disconferma che il dark web sia una brutta cosa a prescindere): come citare un teorema effettivamente valido non pubblicato su una rivista scientifica? Questo risultato è stato un importante contributo alla teoria delle superpermutazioni, e mette in discussione in meccanismo del peer review che, prima o poi, dovrà esplicitamente prevedere circostanze del genere.

Non vale il bias di autorità, in sostanza: per le dimostrazioni matematiche vale “solo” la validità logica del ragionamento che si sta facendo, per cui un rispettato luminare matematico potrà avere tranquillamente torto, quanto un anonimo troll di Internet potrebbe avere ragione, come è successo in questo caso.

Ulteriori sviluppi: problema del commesso viaggiatore

L’argomento è molto complesso e poi sembrare astratto, al più un vezzo da nerd, ma non è così: un noto problema di teoria dei grafi come quello del “commesso viaggiatore” sembra direttamente collegato a quello delle superpermutazioni minimali.

In un mondo ossessionato dal risparmio ad oltranza e dal non voler sprecare risorse, vale la pena leggere fino in fondo: il problema del commesso viaggiatore (Travelling Salesman Problem o TSP) è un problema matematico che riguarda un commesso che deve visitare varie città in modo efficiente, ovvero: passando una sola volta per ognuna di esse e tornando alla base a fine giornata. Nel caso di un grafo con 5 nodi, possiamo immaginare che ci siano 5 città e il commesso deve trovare il percorso più breve per visitarle tutte, tornando infine alla città di partenza. Ad esempio:

{1,2,5,3,4,1}

Il problema è complicato perché ci sono molte possibili combinazioni di percorsi che il commesso può seguire, e dipendono dal costo del tragitto da ogni nodo ad ogni altro. L’obiettivo del problema resta quello di trovare il percorso più breve possibile, in modo che il commesso non sprechi tempo e/o risorse visitando città inutilmente e/o facendo percorsi più lunghi del necessario.

Suona familiare? Il TSP chiede, dato un elenco di città e le distanze tra queste città, di trovare il percorso più breve che visiti ogni città esattamente una volta. Nel problema della superpermutazione, ci veniva chiesto di trovare la stringa più breve contenente tutte le permutazioni di un insieme di n elementi. Con un piccolo sforzo immaginifico, invece di dire che dobbiamo trovare la stringa più breve contenente tutte le permutazioni, potremmo riformulare che dobbiamo trovare il percorso più breve che visita ogni permutazione esattamente una volta. Per poter formulare il problema in questo modo, avremmo bisogno di un elenco di tutte le permutazioni e delle “distanze” tra di esse. Creare un elenco di tutte le permutazioni è abbastanza facile. Prima abbiamo fornito l’elenco per il caso di 3 elementi: 123, 132, 213, 231, 312, 321. Rimane da capire cosa intendiamo per “distanza” tra le permutazioni, a questo punto.

Si è scoperto che il problema delle superpermutazioni minimali è di fatto equivalente a trovare il percorso più breve attraverso tutte le permutazioni, dove la distanza tra due permutazioni è data dal numero di caratteri aggiuntivi necessari per formare la loro superstringa. E vale un curioso concetto di distanza, perchè abbiamo visto che 213 non ha lo stesso peso di 312, per quanto camminare da A verso B richieda in genere lo stesso tempo che andare da B verso A, nel mondo reale. Lo sforzo concettuale che bisogna fare in questo caso che i nodi saranno le singole permutazioni, e che “la lunghezza del tragitto” è determinata dal numero di archi del grafo (citta, percorsi) che andiamo ad attraversare.

Ed è a questo punto che dovrebbe essere chiaro perché ci siamo occupati di problemi così difficili: perché possono avere un impatto su problemi reali in modo sostanziale, E perché possono essere un modo alternativo per riformulare problemi complessi in un’ottica più agevole. Questo naturalmente vale per molti altri casi di problemi reali, generalizzando, risolti mediante strumenti informatici e opportune codifiche a supporto.

(L’immagine di copertina è un grafo generato da StarryAI – fonte)

👇 Da non perdere 👇



Questo sito web esiste da 4456 giorni (12 anni), e contiene ad oggi 5960 articoli (circa 4.768.000 parole in tutto) e 13 servizi online gratuiti. – Leggi un altro articolo a caso

Ti sembra utile o interessante? Vota e fammelo sapere.

Questo sito contribuisce alla audience di sè stesso.
Il nostro network informativo: Lipercubo.it - Pagare.online - Trovalost.it.