È necessario il carattere EOF nella stringa affinché BWT funzioni, altrimenti non è possibile eseguire la trasformazione inversa per ripristinare la stringa originale. Senza EOF, entrambe le stringhe "ba" e "ab" hanno la stessa versione trasformata ("ba"). Con EOF, le trasformazioni sono diverse
ab ba
a b | a | b
b | a b a |
| a b | b a
cioè ab si trasforma in "| ab" e ba a "B | a".
EOF è necessario per BWT perché segna il punto in cui inizia il ciclo di caratteri.
Re: farlo senza il carattere EOF, secondo Wikipedia,
Dal momento che ogni rotazione della stringa di input porterà alla stessa stringa trasformato, il BWT non può essere invertita senza l'aggiunta di un 'EOF' marker all'ingresso o, aumentando l'output con informazioni, come come un indice, che consente di identificare la stringa di input da la classe di tutte le sue rotazioni.
Esiste una versione biiettiva della trasformazione, con la quale la stringa trasformata identifica univocamente l'originale. In questa versione, ogni stringa ha un inverso univoco della stessa lunghezza.
La trasformazione biiettiva viene calcolata calcolando innanzitutto l'input in una sequenza non crescente di parole di Lyndon; tale fattorizzazione esiste dal teorema Chen-Fox-Lyndon e può essere trovata in tempo lineare. Quindi, l'algoritmo ordina insieme tutte le rotazioni di tutte queste parole ; come nella consueta trasformazione Burrows-Wheeler, questo produce una sequenza ordinata di n stringhe . La stringa trasformata viene quindi ottenuta selezionando il carattere finale di ciascuna di queste stringhe in questo elenco ordinato .
fonte
2012-05-10 05:23:21
è compito e non è necessario eseguire la decodifica. – user8078
Vorrei risolvere il problema con il carattere EOF. Se avessi uno studente che risolvesse il problema senza il carattere EOF perché "lui/lei riusciva a trovare una soluzione senza di esso", fallirei quello studente. –
il controllo viene eseguito dal sistema automatico, se utilizzo EOF avrò una "risposta sbagliata". – user8078