Nel film Martian, perché Mark usa l'esadecimale per comunicare con la NASA? I numeri da 0 a 9 non erano sufficienti per indicare il numero corrispondente all'alfabeto?
Nel film Martian, perché Mark usa l'esadecimale per comunicare con la NASA? I numeri da 0 a 9 non erano sufficienti per indicare il numero corrispondente all'alfabeto?
Mark sceglie di utilizzare un sistema esadecimale principalmente perché la sua propria capacità di capire cosa sta puntando il puntatore della fotocamera non è abbastanza precisa. Se ha tutte le 26 lettere (più una scheda domanda, più uno spazio), c'è una ragionevole possibilità che lotterà per determinare quale lettera significano. Aggiungi i numeri 0-9 e peggiora ancora. Inoltre, se la virata è disattivata anche di un paio di gradi, sarà quasi impossibile comunicare a qualsiasi velocità.
In confronto, le carte esadecimali (più una carta in più per indicare una domanda) richiede solo 17 carte, un numero molto più gestibile:
Dovremo parlare più velocemente delle domande sì / no ogni mezz'ora. La fotocamera può ruotare di 360 gradi e ho molte parti dell'antenna. È ora di fare un alfabeto. Ma non posso usare solo le lettere dalla A alla Z. Ventisei lettere più la mia scheda con le domande sarebbero ventisette carte attorno al lander. Ognuno otterrebbe solo 13 gradi di arco. Anche se JPL punta perfettamente la fotocamera, ci sono buone probabilità che non sappia quale lettera intendessero.
Quindi dovrò usare ASCII. È così che i computer gestiscono i personaggi. Ogni carattere ha un codice numerico compreso tra 0 e 255. I valori compresi tra 0 e 255 possono essere espressi come 2 cifre esadecimali. Fornendomi coppie di cifre esadecimali, possono inviare qualsiasi carattere desiderino, inclusi numeri, punteggiatura, ecc.
...
Quindi io " Farò carte da 0 a 9 e da A a F. Ciò fa 16 carte da posizionare intorno alla telecamera, più la carta domanda. Diciassette carte significano oltre 21 gradi ciascuna. Molto più facile da gestire. The Martian: Andy Weir
Ovviamente nel film, il puntatore sembra piuttosto più efficiente nel girare e fermarsi (il che invalida il suo ragionamento) ma per te è Hollywood.
Ecco i motivi principali che mi vengono in mente per preferire la mappatura esadecimale (piuttosto arbitraria) da decimale a quella alfabetica:
I codici esadecimali e ASCII dovrebbero essere qualcosa di scienziati della NASA hanno familiarità, quindi quando si presentano 16 carte - 0-9 e AF - l'intento è immediatamente evidente: "Voglio comunicare usando Esadecimale".
Non c'è ambiguità. Mappare le 10 cifre del sistema numerico decimale su una lettera dell'alfabeto funzionerebbe, a condizione che tu voglia usare solo le lettere dell'alfabeto. Essere in grado di utilizzare numeri reali sarebbe probabilmente utile in una conversazione tra la NASA e un astronauta arenato su Marte. Esadecimale significa che ogni lettera dell'alfabeto, ogni numero e molti segni di punteggiatura e altri simboli possono essere tutti rappresentati in modo univoco da un numero a due cifre.
Esadecimale sarebbe effettivamente più veloce per comunicare. Se devi usare uno 'spazio' tra ogni lettera, allora stai guardando due movimenti della telecamera per le prime 9 (o 10 se mappi A a 0) lettere dell'alfabeto e tre movimenti per il resto. L'esadecimale corrisponde a due movimenti della telecamera per carattere.
Non è uno scienziato informatico. Inventare un nuovo modo per trasmettere tutto il testo che desideri non sarà banale.
Avrebbe potuto creare una tabella di 100 voci (con valori da 00 a 99) e assegnare a ciascuna un carattere. Ma poi avrebbe dovuto comunicare il tavolo al quartier generale della NASA, e ci sarebbe voluto lo stesso numero di messaggi per trasmettere comunque un personaggio! (2 messaggi per carattere).
Il semplice invio di 01-26 per codificare le lettere non è molto buono: la codifica dei numeri richiederebbe l'ortografia! Peggio ancora se devono comunicare ?
o !
o .
o ,
o # codice> ecc. (improbabile, ma possibile)
ASCII sarà ben noto a entrambe le parti. Non è necessario trasmettere una tabella. Contiene un set di caratteri di base che ti consentirà di passare la maggior parte delle informazioni tecniche (compresa la programmazione) da una parte all'altra. Sulla Terra, saranno in grado di digitare un messaggio in un editor di testo e transcodificarlo in ASCII semplicemente guardando i byte grezzi del messaggio e non dovranno scrivere software personalizzato per farlo, il che rende il problema facile e affidabile da parte loro.
In breve, esisteva già un modo ben noto di comunicare utilizzando 2 bocconcini per carattere. Reinventare un nuovo protocollo sarà soggetto a errori e più difficile. Una volta che 1/17 di arco era abbastanza grande da poter distinguere facilmente, non c'è molto vantaggio nell'usare una minore precisione, almeno inizialmente.
Come notato, andare a 26 o 36 o più incorre in problemi di precisione (26 lettere + 10 numeri + spazio + 3 simboli = 40 o 9 gradi di arco per carattere). Quindi trasmettere 1 lettera per movimento della telecamera non era pratico. Fare 2 caratteri per 3 mosse della telecamera sarebbe probabilmente fattibile, ma incorre nel problema di "riprogettazione" e problemi di comunicazione del protocollo.
Nel frattempo, l'invio di "Usa ASCII" e i segnali che dicono 0-9 A-F e a? ha risolto il problema.
Sospetto che in parte il motivo sia che lo fa sembrare più tecnico e impressionante.
In teoria, l'esadecimale dovrebbe consentire una larghezza di banda molto più elevata - per ogni due posizioni della telecamera, può essere trasmesso 1 byte intero, con 255 possibili caratteri. Al contrario, un approccio decimale consentirebbe solo 99 caratteri. Tuttavia non c'è nulla (che io possa ricordare) che dimostri che la larghezza di banda aggiuntiva fosse necessaria o addirittura utilizzata.
Il sistema decimale più semplice potrebbe facilmente includere le 26 lettere maiuscole, 26 lettere minuscole, i numeri e la punteggiatura associata segni.
L'utilizzo dell'approccio esadecimale si basa sulla tabella ASCII, che di solito è di soli 7 bit; solo 4 valori (su 16 completi) della prima cifra vengono utilizzati per le lettere stampabili se si escludono le lettere minuscole.
Dove la larghezza di banda aggiuntiva sarebbe stata utile sarebbe stato definire una tabella di più parole usate. Mark avrebbe potuto facilmente scrivere un elenco di parole comuni e mostrarle alla telecamera. Avrebbero potuto aumentare notevolmente la velocità di comunicazione, poiché avrebbero avuto un vocabolario di 12x16 = 192 parole da usare. Xkcd ( https://xkcd.com/1133/) ci ha mostrato che la piena comunicazione è possibile con solo 1000 parole (10 bit). Avere 192 parole veloci, con l'ortografia completa di tutte le parole non presenti nell'elenco, renderebbe la comunicazione molto meno noiosa. Inoltre, non sembra irragionevole per Mark capirlo e comunicarlo alla Terra. Anche solo poche parole aiuterebbero.
Se avesse più carta e un po 'di pazienza, un approccio ancora migliore sarebbe usare codici esadecimali a 3 cifre: questo gli darebbe 4000 parole, più l'alfabeto.
Sarebbe ancora meglio adottare una semplice codifica di Huffman, ovvero utilizzare codici più brevi per i simboli frequenti. Poteva inserire le parole / lettere più comuni nella prima cifra, insieme a codici speciali per parole a 2 o 3 cifre. Ciò darebbe una lunghezza variabile al messaggio, ma sarebbe comunque molto fattibile da decodificare a mano.
Ma l'approccio migliore di tutti sarebbe quello di utilizzare il computer per elaborare un insieme di dati compressi in modo ottimale, quindi trasmetterlo utilizzando l'intera gamma di 8 bit. Ciò richiederebbe una programmazione un po 'complicata che probabilmente andrebbe oltre le sue capacità - non sarebbe efficiente usare le librerie di compressione standard poiché un approccio con dizionario fisso sarebbe migliore. In questo modo potrebbe avvicinarsi al limite teorico di 1 bit per carattere o 4 caratteri per ogni posizionamento della telecamera.
Ma probabilmente non sarebbe così drammatico per i lettori / spettatori.
(Mi piacciono parti di molte altre risposte e commenti, ma hanno tutti i loro problemi, quindi ecco qui ...)
"tl; dr"? Solo il grassetto per una versione concisa.
Nota che alcune risposte o commenti riguardano "perché non far corrispondere direttamente ciascuna posizione del puntatore a un simbolo, non a un codice. " La citazione del romanzo (sotto e come nella risposta di Richard) lo spiega, ma la domanda era semplicemente "perché non usare numeri da 0 a 9", cioè decimale invece di esadecimale . Quindi inizierò prendendo ASCII come un dato. In una nota di chiusura dirò un po 'di schemi più efficienti per "indicare il numero corrispondente all'alfabeto", per citare il richiedente, poiché immagino che intendesse un codice ma possibilmente non ASCII. (E forse non è così chiaro nel film, come nel romanzo, che questo è il codice utilizzato. Non lo so, ero un po 'brillo quando l'ho visto. )
Rispondi prima alla seconda parte: semplicemente "sì", l'invio di codici da 0 a 9 è assolutamente sufficiente. Nel romanzo, la citazione (grazie a Richard) che spiega perché usare un numero limitato di simboli è:
"Ventisei lettere più la mia scheda della domanda sarebbero ventisette carte intorno al lander. Ciascuno otterrebbe solo 13 gradi di arco. Anche se JPL punta perfettamente la fotocamera, ci sono buone probabilità che non sappia quale lettera si riferisse. "
Questo lo rende ovvio : Da 0 a 9 significa meno carte, quindi va bene anche.
Per coloro che non sono matematicamente inclini, potrebbe sembrare implicito che ci sia qualcosa di speciale nell'esadecimale ( in cui le cifre A - F rappresentano 10-15 e la posizione di una cifra indica la potenza (esponente) di 16 anziché 10) in relazione ad ASCII, come in quest'altra citazione:
"Quindi dovrò usare ASCII *. È così che i computer gestiscono i caratteri. Ogni carattere ha un codice numerico compreso tra 0 e 255 **. Valori tra 0 e 255 può essere espresso come 2 cifre esadecimali. "
Ma no : ASCII è solo una tabella che" mappa " un numero a un simbolo, in modo che il numero possa essere altrettanto facilmente il decimale più familiare con cifre da 0 a 9.
La prima parte: "perché esadecimale?" - non ha una risposta, almeno nel film. Probabilmente la risposta migliore è fuori dall'universo: sembra roba da scienza nerd, e questo film adora i suoi scienziati nerd. b> Ehi, ha funzionato per Ron Howard e Tom Hanks.
In linea di principio è più efficiente - meno mosse del puntatore - avere 16 "cifre" (puntatore posizioni) rispetto a 10. Anzi, più sono e meglio è finché non diventano troppe le nostre marziane preferite da distinguere. Altri scambiatori di stack hanno descritto, con dettagli e correttezza variabili, altri schemi di codifica * che potrebbero trarne vantaggio molto meglio, specialmente per il nostro astro - Le circostanze dell'eroe botanico. Ma @Ghanima e @Peter Davidson sono i più importanti notando che, usando ASCII come in The Martian, la possibile efficienza di avere 16 contro 10 cifre per mossa del puntatore è per lo più sprecata. Per essere più espliciti su quanta poca differenza fa nel caso reale: In ASCII, i numeri che rappresentano ciascuno di "spazio", 0 - 9, A - Z (ma non az) e simboli tranne {|} ~, sono meno di 99, quindi se non ti dispiace ESSERE UN CAZZO GRIDO AL TUO AMICO MARZIANO INVIANDO TESTI IN ALLCAPS e puoi resistere agli "abbracci" {{Matt Damon}} (Puoi? No, davvero - PUOI ?? 'Cuz è adorabile!) non servono più mosse del puntatore (2) per carattere con decimale che con esadecimale .
Note di chiusura:
* Ehi Mark, no, non devi usare ascii. Apparentemente puoi comunicare alla NASA qualsiasi metodo tu inventi che desideri utilizzare. Ad esempio, (usando sempre l'esadecimale se si pensa numericamente) una in cui le 15 lettere più comuni sono rappresentate ciascuna da una sola "cifra" (una mossa del puntatore), da 0 a F saltando 1 e le altre 11 dai valori da 10 a 1A. Il valore "1" viene saltato in modo che quando viene inviato è chiaro che è la prima cifra di un valore di codice a due cifre.
Come ASCII è un semplice schema di codifica dei simboli, ma la grande maggioranza delle lettere inviate richiederà la metà del tempo. L'invio di numeri è meno prioritario (non è stato menzionato nelle citazioni del romanzo, o nel film credo). Anche in ASCII, il punto di codice per ogni cifra è un numero a due cifre. Quindi, se vuoi inviare molte cifre, invece di codificarle come in ASCII e / o uno dei commenti postati in precedenza, dovresti inviarle come "semplici numeri". Se un paio di posizioni extra del puntatore non sono troppe, un modo semplice è aggiungerne uno che significhi "ciò che viene dopo è un numero" e uno che significa "ciò che viene dopo non è un numero". Segnalare ciò senza queste posizioni extra (cioè utilizzando solo valori di codice che potrebbero essere dati numerici) è lasciato come esercizio per il lettore.
Altre cose fantasiose come la codifica di Huffman sono menzionate da altri ma, ehi, Mark è semplicemente il più grande botanico su Marte: può lasciarlo ai nerd di matematica o computer della NASA.
** [Spinge gli occhiali da nerd di nuovo sul ponte del naso]: in realtà ASCII usa solo 0 - 127, non 0 - 255.
Bene, supponendo che tu intenda perché non hanno semplicemente usato il codice ASCII in decimali, invece di usare esadecimale?
Tecnicamente, avrebbero potuto, voglio dire 32 è il carattere spazio, 97 è la lettera "a", 117 è "u" e così via.
Quindi tecnicamente, Mark avrebbe potuto semplicemente scrivere "ASCII usando i decimali" sulla sua lavagna per inviare quel messaggio come immagine e quindi usare solo altre 11 antenne per rappresentare tutte le 10 cifre da 0 a 9 e il punto interrogativo.
Questo gli avrebbe dato una gamma più ampia per ogni lettera MA la maggior parte delle lettere dell'alfabeto sulla tabella ASCII sono rappresentate con 3 cifre (in base 10), quindi le comunicazioni richiederebbero un po 'più di tempo.
Questo è l'unico motivo per cui posso pensare che abbia senso per me, il tempo che avrebbero impiegato per trasmettere ogni lettera avrebbe aumentato il tempo di comunicazione complessivo.
La maggior parte dei grafici di riferimento per ASCII organizza i caratteri in una tabella di 16 colonne e 16 righe (beh, in senso stretto solo 8 righe; o forse come questo esempio storico in 16 righe e 8 colonne) che rende particolarmente facile decodificare / codificare da / a coppie di cifre esadecimali.
Comunque lo tagli, 17 carte gli danno 17 simboli, siano essi lettere o numeri. L'unico vantaggio dell'esadecimale è che i simboli da 10 a 16 sono probabilmente più stretti in esadecimale (A - F). Se la spaziatura delle carte è ciò che conta, non c'è alcun vantaggio. Suona bene, ma non ha senso.