Número total de possibilidades
1) Fechar! Você tem 62 opções para o primeiro caractere, 62 para o 2º, etc., então você acaba com , que é um número absurdamente grande.62⋅62⋅62⋅⋯62=6220
Colisão com uma String "Target"
2) Como estabelecemos acima, existem cadeias em potencial. Você quer saber quantas precisaria adivinhar para ter mais de 1 em 100.000 chances de adivinhar a sequência "alvo". Essencialmente, você está perguntando o que Para deixar claro, você teria que arredondar x para cima (ou adicionar um, se forem precisamente iguais), mas como você verá em um segundo, isso realmente não importa.6220
x6220≥1105
Através da álgebra básica, podemos reorganizar isso como
105x105x105xx≥6220≥(6.2⋅10)20≥6.220⋅1020≥6.220⋅1015
Fazendo as contas, é de cerca de , então vamos chamar a coisa toda de ou, mais sucintamente, um monte de coisas.6.2207⋅10157⋅1030
É por isso que as senhas longas funcionam muito bem :-) Para senhas reais, é claro, você precisa se preocupar com cadeias de comprimento menores ou iguais a vinte, o que aumenta ainda mais o número de possibilidades.
Duplicatas na lista
Agora, vamos considerar o outro cenário. As strings são geradas aleatoriamente e queremos determinar quantas podem ser geradas antes que exista uma chance de 1: 100.000 de quaisquer duas strings correspondentes. A versão clássica desse problema é chamada de Problema de Aniversário (ou 'Paradoxo') e pergunta qual é a probabilidade de duas de n pessoas terem o mesmo aniversário. O artigo da wikipedia [1] parece decente e possui algumas tabelas que você pode achar úteis. No entanto, vou tentar dar a você o sabor da resposta aqui também.
Algumas coisas a ter em mente:
-A probabilidade de uma correspondência e de não haver correspondência deve somar 1, então e vice-versa.P(match)=1−P(no match)
-Para dois eventos independentes e , a probabilidade de .ABP(A&B)=P(A)⋅P(B)
Para obter a resposta, começaremos calculando a probabilidade de não encontrar uma correspondência para um número fixo de cadeias . Uma vez que sabemos como fazer isso, podemos definir essa equação igual ao limite (1 / 100.000) e resolver para . Por conveniência, vamos chamar o número de sequências possíveis ( ).kkN6220
Nós vamos 'andar' pela lista e calcular a probabilidade de que a string ^ {th} corresponda a qualquer uma das strings "acima" dela na lista. Para a primeira string, temos strings totais e nada na lista, então . Para a segunda sequência, ainda existem possibilidades totais, mas uma delas foi "usada" pela primeira, portanto, a probabilidade de uma correspondência para essa sequência é Para a terceira sequência, há duas maneiras de uma correspondência e, portanto, não, portanto e assim por diante. Em geral, a probabilidade dokNPk=1(no match)=NN=1NPk=2(no match)=N−1NN−2Pk=3(no match)=N−2Nk késima sequência que não corresponde às outras é
Pk(no match)=N−k+1N
No entanto, queremos a probabilidade de não haver correspondência entre nenhuma das strings. Como todos os eventos são independentes (de acordo com a pergunta), podemos apenas multiplicar essas probabilidades juntas, assim:
Isso pode ser simplificado um pouco:
O primeiro passo apenas multiplica as frações, o segundo usa a definição de fatorial ( ) para substituir os produtos dek
P(No Matches)=NN⋅N−1N⋅N−2N⋯N−k+1N
P(No Matches)P(No Matches)P(No Matches)=N⋅(N−1)⋅(N−2)⋯(N−k+1)Nk=N!Nk⋅(N−k)!=k!⋅(Nk)Nk
k!=(k)⋅(k−1)⋅(k−2)⋯1N−k+1⋯N com algo um pouco mais gerenciável, e a etapa final alterna em um coeficiente binomial. Isso nos dá uma equação para a probabilidade de não haver correspondências após a geração de strings. Em teoria, você pode definir isso igual a e resolver para . Na prática, será difícil responder, pois você multiplicará / dividirá por grandes números - os fatoriais crescem muito rapidamente ( Tem mais de 150 dígitos).
k1100,000k100!
No entanto, existem aproximações, tanto para calcular o fatorial quanto para todo o problema. Este artigo [2] sugere onde p é a probabilidade de não encontrar uma correspondência. Seus testes atingem o máximo de , mas ainda é bastante preciso lá. Conectando seus números, recebo aproximadamente .
k=0.5+0.25−2Nln(p)−−−−−−−−−−−−√
N=48,0003.7⋅1015
Referências
[1] http://en.wikipedia.org/wiki/Birthday_problem
[2] Mathis, Frank H. (junho de 1991). "Um problema generalizado de aniversário". Revisão do SIAM (Sociedade de Matemática Industrial e Aplicada) 33 (2): 265–270. Link JSTOR