Простой вопрос комбинации / вероятности, основанный на длине строки и возможных символах

9

Предполагая «полную случайность» и получая строку длиной 20 символов, где каждый символ может быть одним из 62 возможных символов:

  • Какое общее количество возможных комбинаций? (Угадай 20 до степени 62.)
  • Кроме того, если новые строки выбираются случайным образом одна за другой и добавляются в список выбранных строк, сколько строк должно быть выбрано до того, как вероятность выбора строки, которая уже была выбрана, будет ниже 1 в 100000 ( 105 )

Примечание: 62 состоит из: цифровых цифр (0-9), заглавных букв (AZ) и строчных букв (az).

просчеты
источник
2
Ваш второй пункт может быть прочитан (по крайней мере) двумя возможными способами. Мне интересно, что вас интересует. ( 1 ) Вероятность того, что n я строка соответствует одной из предыдущих строк, или ( 2 ) Вероятность того, что к моменту выбора n й строки в коллекции будет какой-то дубликат строк, нарисованных до сих пор. Ответы на эти два вопроса будут очень разными. :)
кардинал
1
Возможно, учитывая двухсимвольный алфавит, разница будет ясна. Пусть буквы будут и T . Мы можем спросить: ( 1 ) Для какого n у нас есть по крайней мере 99% шанс того, что n- я строка будет дубликатом предыдущей строки? Здесь n равно 8, поскольку единственный способ, которым мы терпим неудачу, - это если наша последовательность либо T T T T H, либо H H H H T , которая имеет общую вероятность 2 - ( n - 1 ) . Или мы спрашиваем ( 2 ) Для чегоHTnnnTTTTHHHHHT2(n1) ли у нас хотя бы 99% шанс увидеть дубликаты? В этом случае n = 3, поскольку к тому времени, когда мы увидели три строки, H или T были повторены, по крайней мере, один раз. nn=3HT
кардинал
1
Ответ Мэтта обрабатывает ( 1 ), что, по сути, отвечает на вопрос о том, соответствует ли «моя» строка чужой. Но, если вы беспокоитесь о строках некоторых других двух людей также потенциально подходящих, вы заинтересованы в ( 2 ). Все сводится к тому, есть ли у вас интересующая вас строка, с которой вы сравниваете все остальные, или вы сравниваете все строки друг с другом. Я не уверен, что я делаю это более ясным, хотя. (Ваша проблема сводится к одному из двух вариантов знаменитой так называемой «проблемы дня рождения».)
Кардинал
1
Кардинал, как обычно, прав. Я предположил, что у вас была одна «целевая» строка, для которой вы генерировали список догадок. Если вместо этого вы генерируете строки в произвольном порядке и хотите знать число, которое можно сгенерировать до совпадения любых двух строк, тогда ответ на самом деле будет совершенно другим. Я исправлю свой ответ, чтобы рассмотреть это дело, если с тобой все в порядке.
Мэтт Краузе
1
Я не совсем ясно изложил свой предыдущий пример. Прости за это. Я думал о двухбуквенном алфавите и рисовал строки одной длины . Поэтому, когда я писал H H H H T , стоявшим на с 1 = H , S 2 = H , ..., S п - 1 = H , S п = Т . {H,T}HHHHTs1=Hs2=Hsn1=Hsn=T
кардинал

Ответы:

11

Общее количество возможностей

1) Закрыть! У вас есть 62 вариантов для первого символа, 62 для 2 - го и т.д., так что вы в конечном итоге с , что абсурдно огромное количество.62626262=6220

Столкновение со строкой «Target»

2) Как мы установили выше, существует потенциальных строк. Вы хотите знать, сколько вам нужно угадать, чтобы иметь больше, чем 1 на 100 000 шансов угадать «целевую» строку. По сути, вы спрашиваете, что х6220 Чтобы получить точный результат, вам нужно округлить х (или добавить один, если они точно равны), но, как вы увидите через секунду, это не имеет значения.

x62201105

Посредством базовой алгебры мы можем изменить это как

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

6.2207101571030

Именно поэтому длинные пароли работают очень хорошо :-) Для реальных паролей, конечно, вам нужно беспокоиться о строках длиной не более двадцати, что увеличивает количество возможностей еще больше.

Дубликаты в списке

Теперь давайте рассмотрим другой сценарий. Строки генерируются случайным образом, и мы хотим определить, сколько можно сгенерировать до того, как появится шанс совпадения любых двух строк 1: 100 000. Классическая версия этой проблемы называется проблемой дня рождения (или «парадоксом») и спрашивает, какова вероятность того, что двое из n человек имеют одинаковый день рождения. Статья в Википедии [1] выглядит прилично и содержит несколько таблиц, которые могут оказаться полезными. Тем не менее, я постараюсь дать вам ответ на этот вопрос здесь.

Некоторые вещи, которые нужно иметь в виду:

P(match)=1P(no match)

ABP(A&B)=P(A)P(B)

kkN6220

kNPk=1(no match)=NN=1NPk=2(no match)=N1NN2Pk=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

Ссылки

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

[2] Матис, Фрэнк Х. (июнь 1991 г.). «Обобщенная проблема дня рождения». SIAM Review (Общество по промышленной и прикладной математике) 33 (2): 265–270. JSTOR Ссылка

Мэтт Краузе
источник
+1 Удивительно, учитывая, что мои плохие математические навыки привели к тому, что я задал вопрос, поэтому я оставлю вопрос без ответа на один день, но выгляжу хорошо для меня, и мне гораздо яснее ответ, чем я ожидал - спасибо!
промахи
1
Рад помочь! Дайте мне знать, если что-то неясно. Для ударов я побежал номера. Вам понадобится 7044234255469980229683302646164 догадок; как я уже сказал - много!
Мэтт Краузе
+1 @Matt Krause: +1 к вашему комментарию под ответом; Ваш ответ и стремление дать лучший ответ возможны, достойны внимания и благодарят вас за всю вашу тяжелую работу!
промахи