Sommario:
Perché rappresenta il numero totale medio di domande perfette di cui hai bisogno per ottenere una risposta al fine di risolvere completamente tutte le ambiguità in un dato che non avevi ancora visto. Una domanda perfetta con possibili risposte è quella che, una volta risposta, lo spazio delle possibilità sarà ridotto di n volte.nn
Esempio:
Supponiamo che io abbia lanciato un dado a facce e che tu debba prevederne l'esito. Lo spazio delle possibilità è 6 . Potresti farmi domande come questa binaria "è il risultato 1 ?" (la risposta è sì o no, ovvero n = 2 ) e la mia risposta potrebbe essere "nopies!". Quindi lo spazio delle possibilità di solo 1 . Quindi questa domanda non è una buona domanda.661n=21
In alternativa, potresti porre domande migliori, come questa domanda binaria superiore "è maggiore di ?", E la mia risposta sarebbe "yeppies!" - poi boom, lo spazio delle possibilità è ridotto della metà! Cioè ci sono solo 6 / 2 = 3 candidati a sinistra (fuori originariamente 6). Diavolo sì amico.3.56/2=3
Supponiamo ora che continui a porre ricorsivamente più di queste buone domande fino a quando non raggiungi il caso in cui lo spazio delle possibilità ha solo possibilità, per cui, per definizione, non è rimasta ambiguità (conosci la risposta).1
Facciamolo:
- possibilità. D: Il risultato è > 3.5 ? A: Sì.6>3.5
- possibilità sinistra. D: il risultato è ≥ 5 ? A: Sì.6/2=3≥5
- possibilità sinistra. D: è outcome = 6 ? A: Sì.6/2/2=1.5=6
Concludete che il risultato deve essere il numero e avete solo bisogno di porre 3 domande binarie. Ie c e i l ( log 2 ( 6 ) ) = c e i l ( 2.58 ) = 363ceil(log2(6))=ceil(2.58)=3
Ora, ovviamente, il numero di domande binarie è sempre un numero naturale. Allora perché l'entropia di Shannon non usa la funzione ? Perché in realtà sputa il numero medio di buone domande che devono essere poste.ceil
Se ripeti questo esperimento (scrivendo un codice Python), noterai che in media dovrai porre domande binarie perfette.2.58
Naturalmente, se poni domande binarie, imposti la base del registro su quello. Quindi, ecco , Perché le nostre domande erano binario. Se fare domande che si aspettano n molte risposte possibili, si imposterà la base per n invece di 2 , cioè log n ( . . . ) .log2(...)nn2logn(...)
Simulazione:
import random
total_questions = 0
TOTAL_ROUNDS = 10000
for i in range(0,TOTAL_ROUNDS):
outcome = random.randrange(1,7)
total_questions += 1
if outcome > 3.5:
total_questions += 1
if outcome >= 5:
total_questions += 1
if outcome == 5:
pass
else:
# must be 6! no need to ask
pass
else:
# must be 4! no need to ask
pass
else:
total_questions += 1
if outcome >= 2:
total_questions += 1
if outcome == 2:
pass
else:
# must be 3! no need to ask
pass
else:
# must be 1! no need to ask
pass
print 'total questions: ' + str(total_questions)
print 'average questions per outcome: ' + str(total_questions/float(TOTAL_ROUNDS))
risultati:
total questions: 26634
average questions per outcome: 2.6634
Holy molly dude .2.6634≠log2(6)≠2.58
Cosa c'è che non va? È quasi vicino, ma non molto vicino come speravo. È il PRNG di Python che sta cercando di dire una battuta lenta? O Shannon ha torto? O è -Dio proibito- la mia comprensione è sbagliata? Ad ogni modo AIUTO. SOS già amico.