Semplice domanda di combinazione / probabilità basata sulla lunghezza della stringa e sui possibili caratteri


9

Supponendo "casualità completa" e una stringa con una lunghezza di 20 caratteri in cui ogni personaggio può essere uno dei 62 caratteri possibili:

  • Quali sono il numero totale di combinazioni possibili? (Indovinando 20 alla potenza di 62.)
  • Inoltre, se le nuove stringhe vengono selezionate casualmente una dopo l'altra e aggiunte a un elenco di stringhe selezionate finora, quante stringhe devono essere selezionate prima che la possibilità di selezionare una stringa che sia già stata selezionata sia inferiore a 1 su 100000 ( 105 )?

Nota: 62 proviene da: cifre numeriche (0-9), lettere maiuscole (AZ) e lettere minuscole (az).


2
Il tuo secondo punto elenco può essere letto (almeno) in due modi possibili. Mi chiedo che siete interessati a. ( 1 ) La probabilità che il n ° stringa corrisponde una delle stringhe precedenti o ( 2 ) La probabilità che per il momento il n è selezionato esima stringa esiste qualche duplicato all'interno della collezione di stringhe disegnate finora. Le risposte a queste due domande saranno molto diverse. :)
cardinale il

1
Forse considerare un alfabeto di due caratteri chiarirà la differenza. Lasciate che le lettere siano e T . Possiamo chiedere: ( 1 ) Per quale n dobbiamo avere almeno un 99% del n ° stringa di essere un duplicato di una stringa precedente? La n qui è 8 poiché l'unico modo in cui falliamo è se la nostra sequenza è T T T T H o H H H H T , che ha probabilità totale 2 - ( n - 1 ) . Oppure, chiediamo ( 2 ) Per cosaHTnnnTTTTHHHHHT2(n1) abbiamo almeno il 99% di possibilità di vedere dei duplicati? In questo caso n = 3 poiché nel momento in cui abbiamo visto tre stringhe, H o T sono state ripetute almeno una volta. nn=3HT
cardinale il

1
La risposta di Matt gestisce ( 1 ), che essenzialmente risponde alla domanda se la "mia" stringa corrisponde a quella di qualcun altro. Ma, se siete preoccupati per le stringhe di alcune altre due persone anche potenzialmente di corrispondenza, allora siete interessati a ( 2 ). Dipende se hai una particolare stringa di interesse con cui stai confrontando tutti gli altri o se stai confrontando tutte le stringhe tra loro. Non sono sicuro se lo sto chiarendo, però. (Il tuo problema si riduce a una delle due varianti del famoso cosiddetto "problema del compleanno".)
Cardinale

1
Il cardinale è, come al solito, corretto. Supponevo che avessi una stringa "target", per la quale stavi generando un elenco di ipotesi. Se invece stai generando stringhe a caso e vuoi sapere il numero che è sicuro generare prima che due stringhe corrispondano, allora la risposta è molto diversa. Modificherò la mia risposta per affrontare quel caso, se per te va bene.
Matt Krause,

1
Non ho chiarito completamente il mio esempio precedente. Mi dispiace per quello. Stavo pensando a un alfabeto di due lettere e disegnavo stringhe di lunghezza uno . Quindi, quando ho scritto H H H H T , che stava per s 1 = H , s 2 = H , ..., s n - 1 = H , s n = T . {H,T}HHHHTs1=Hs2=Hsn1=Hsn=T
cardinale il

Risposte:


11

Numero totale di possibilità

1) Chiudi! Hai 62 scelte per il primo personaggio, 62 per il 2 °, ecc., Quindi finisci con , che è un numero assurdamente enorme.62626262=6220

Collisione con una stringa "Target"

2) Come stabilito sopra, ci sono stringhe potenziali. Volete sapere quanti ne dovreste indovinare per avere una probabilità migliore di 1 su 100.000 di indovinare la stringa "target". In sostanza, stai chiedendo cosa x6220 Per metterlo a posto, dovresti arrotondare x per eccesso (o aggiungerne uno, se sono esattamente uguali), ma come vedrai tra un secondo, non importa.

x62201105

Attraverso l'algebra di base, possiamo riorganizzarlo come

105x6220105x(6.210)20105x6.2201020x6.2201015

Facendo la matematica, è circa 7 10 15 , quindi chiamiamo tutto 7 10 30 o, più succintamente, un sacco di cose.6.2207101571030

Questo è, ovviamente, il motivo per cui le password lunghe funzionano davvero bene :-) Per le password reali, ovviamente, devi preoccuparti di stringhe di lunghezza inferiore o uguale a venti, che aumenta ancora di più il numero di possibilità.

Duplicati nell'elenco

Consideriamo ora l'altro scenario. Le stringhe vengono generate casualmente e vogliamo determinare quante possono essere generate prima che ci sia una probabilità 1: 100.000 di una corrispondenza di due stringhe. La versione classica di questo problema si chiama Problema del compleanno (o "Paradox") e chiede quale sia la probabilità che due persone n abbiano lo stesso compleanno. L'articolo di Wikipedia [1] sembra decente e ha alcune tabelle che potresti trovare utili. Tuttavia, proverò a darti il ​​sapore della risposta anche qui.

Alcune cose da tenere a mente:

-La probabilità di una corrispondenza e di non avere una corrispondenza deve essere pari a 1, quindi e viceversa.P(match)=1P(no match)

-Per due eventi indipendenti e B , la probabilità di P ( A e B ) = P ( A ) P ( B ) .ABP(A&B)=P(A)P(B)

Per ottenere la risposta, inizieremo calcolando la probabilità di non vedere una corrispondenza per un numero fisso di stringhe . Una volta che sappiamo come farlo, possiamo impostare quell'equazione uguale alla soglia (1 / 100.000) e risolvere per k . Per comodità, chiamiamo N il numero di stringhe possibili ( 62 20 ).kkN6220

Cammineremo lungo l'elenco e calcoleremo la probabilità che la stringa ^ {th} corrisponda a una qualsiasi delle stringhe "sopra" nella lista. Per la prima stringa, abbiamo N stringhe totali e niente nell'elenco, quindi P k = 1 ( nessuna corrispondenza ) = NkN. Per la seconda stringa, ci sono ancoraNpossibilità totali, ma una di queste è stata "utilizzata" dalla prima stringa, quindi la probabilità di una corrispondenza per questa stringa èPk=2(nessuna corrispondenza)=N-1Pk=1(no match)=NN=1N Per la terza stringa, ci sono due modi per farlo corrispondere e quindiN-2modi per non farlo, quindiPk=3(nessuna corrispondenza)=N-2Pk=2(no match)=N1NN2 e così via. In generale, la probabilità che lakesima stringa non corrisponda alle altre èPk(nessuna corrispondenza)=N-k+1Pk=3(no match)=N2Nk

Pk(no match)=Nk+1N

k

P(No Matches)=NNN1NN2NNk+1N
P(No Matches)=N(N1)(N2)(Nk+1)NkP(No Matches)=N!Nk(Nk)!P(No Matches)=k!(Nk)Nk
k!=(k)(k1)(k2)1Nk+1Nk1100,000k100!

k=0.5+0.252Nln(p)
N=48,0003.71015

Riferimenti

[1] http://en.wikipedia.org/wiki/Birthday_problem

[2] Mathis, Frank H. (giugno 1991). "Un problema di compleanno generalizzato". Revisione SIAM (Society for Industrial and Applied Mathematics) 33 (2): 265–270. JSTOR Link


+1 Fantastico, dato chiaramente che le mie scarse abilità matematiche mi hanno portato a porre la domanda, quindi lascerò la domanda senza risposta per un giorno, ma mi sembra buona ed è molto più chiara di una risposta di quanto mi aspettassi - grazie!
errori

1
Felice di aiutare! Fammi sapere se qualcosa non è chiaro. Per i calci, ho eseguito i numeri. Avrai bisogno di 7044234255469980229683302646164 ipotesi; come ho detto - molto!
Matt Krause,

+1 @Matt Krause: +1 al tuo commento sotto la risposta; la tua risposta e l'impegno a dare la migliore risposta possibile sono esemplari, degni di nota e grazie per tutto il tuo duro lavoro!
errori del
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.