Resumo:
Porque representa o número total médio de perguntas perfeitas que você precisa que sejam respondidas para resolver completamente todas as ambiguidades em dados que você ainda não tinha visto. Uma pergunta perfeita com respostas possíveis é aquela que, quando respondida, o espaço de possibilidades será reduzido em vezes.nn
Exemplo:
Suponha que eu joguei um dado justo de faces e você previsse o resultado. O espaço de possibilidades é . Você poderia me fazer perguntas como essa binária "é o resultado ?" (a resposta é sim ou não, ou seja, ) e minha resposta pode ser "nopies!". Então o espaço de possibilidades é apenas . Portanto, essa pergunta não é boa para perguntar.661n=21
Como alternativa, você poderia fazer perguntas melhores, como esta pergunta binária superior "é maior que ?", E minha resposta seria "yeppies!" - então bum, o espaço de possibilidades é reduzido pela metade! Ou seja, restam apenas candidatos (dos 6 originalmente). Inferno, sim cara.3.56/2=3
Agora, suponha que você continue fazendo recursivamente mais dessas boas perguntas até chegar ao caso em que o espaço de possibilidades tem apenas possibilidade, pela qual - por definição - não resta ambiguidade (você sabe a resposta).1
Vamos fazer isso:
- 6 possibilidades. P: O resultado é ? A: sim>3.5
- 6/2=3 possibilidades restantes. P: o resultado é ? A: sim≥5
- 6/2/2=1.5 possibilidades restantes. Q: resultado ? A: sim=6
Você conclui que o resultado deve ser o número e só precisava fazer perguntas binárias. seja,63ceil(log2(6))=ceil(2.58)=3
Agora, obviamente, o número de perguntas binárias é sempre um número natural. Então, por que a entropia de Shannon não usa a função ? Porque na verdade cospe o número médio de boas perguntas que precisam ser feitas.ceil
Se você repetir esse experimento (escrevendo um código Python), notará que, em média , precisará fazer perguntas binárias perfeitas.2.58
Obviamente, se você fizer perguntas binárias, defina a base do log para isso. Então aqui porque nossas perguntas eram binárias. Se você fizer perguntas que esperam muitas respostas possíveis, você definirá a base como vez de , ou seja, .log2(...)nn2logn(...)
Simulação:
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))
Resultados:
total questions: 26634
average questions per outcome: 2.6634
Santo molly cara .2.6634≠log2(6)≠2.58
O que há de errado? Está quase perto, mas não tão perto quanto eu esperava. É o PRNG do Python tentando dizer uma piada lenta? Ou Shannon está errado? Ou é - Deus não permita - meu entendimento está errado? De qualquer maneira AJUDA. SOS já é cara.