Питання про комбінацію / ймовірність на основі довжини рядка та можливих символів


9

Якщо припустити "повну випадковість" і надати рядок довжиною 20 символів, де кожен символ може бути одним з 62 можливих символів:

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

Примітка: 62 походить з числових цифр (0-9), великих літер (AZ) та малих літер (az).


2
Вашу другу точку кулі можна прочитати (принаймні) двома можливими способами. Мене цікавить, що вас цікавить. ( 1 ) Ймовірність того, що й рядок відповідає одній з попередніх рядків, або ( 2 ) Ймовірність того, що до моменту вибору ї рядки в колекції існує деякий дублікат ниток, намальованих поки що. Відповіді на ці два питання будуть дуже різними. :)nn
кардинал

1
Можливо, врахування двозначного алфавіту дозволить зрозуміти різницю. Нехай букви будуть і . Ми можемо запитати: ( 1 ) Для якого у нас є принаймні 99% шанс, що й рядок буде дублікатом попереднього рядка? Тут є 8, оскільки єдиний спосіб, коли ми не вдається, це якщо наша послідовність є або або , яка має загальну ймовірність . Або ми запитуємо ( 2 ) Для чого маємо принаймні 99% шанс побачити якийсь дублікат? У цьому випадку оскільки до того часу ми бачили три рядки абоHTnnnTTTTHHHHHT2(n1)nn=3Hабо повторюється щонайменше один раз. Т
кардинал

1
Відповідь Метта відповідає ( 1 ), яка по суті відповідає на питання про те, чи відповідає "мій" рядок чужому. Але якщо ви переживаєте, що рядки інших двох людей також можуть збігатися, то вас цікавить ( 2 ). Це зводиться до того, чи є у вас якась цікава нитка, з якою ви порівнюєте всіх інших, чи ви порівнюєте всі рядки один з одним. Я не впевнений, чи роблю це ясніше. (Ваша проблема зводиться до одного з двох варіантів відомої так званої "проблеми з днем ​​народження".)
кардинал

1
Кардинал, як завжди, правильно. Я припускав, що у вас є одна "цільова" рядок, для якої ви генеруєте список здогадок. Якщо замість цього, ви генеруєте рядки випадковим чином і хочете дізнатися число, яке можна генерувати, перш ніж збігаються будь-які дві рядки, то відповідь насправді дуже різний. Я зміню свою відповідь, щоб вирішити цю справу, якщо з вами це нормально.
Метт Крауз

1
Я не зробив свого попереднього прикладу повністю зрозумілим. Вибач за те. Я думав про двобуквенний алфавіт і малював рядки довжиною один . Отже, коли я писав , це стояв за{H,T}HHHHTs1=H, s2=H, ..., sn1=H, sn=Т.
кардинал

Відповіді:


11

Загальна кількість можливостей

1) Закрий! У вас 62 варіанти для першого персонажа, 62 для другого тощо, так що ви закінчите62626262=6220, що є абсурдно величезною кількістю.

Зіткнення з рядком "Ціль"

2) Як ми встановили вище, є 6220потенційні рядки. Ви хочете знати, скільки вам потрібно буде здогадуватися, щоб мати кращий показник 1 на 100 000 шансів на вгадування рядка "target". По суті, ви запитуєте, що

x62201105
Щоб вимкнути це місце, вам доведеться округлити х (або додати його, якщо вони точно рівні), але як ви побачите через секунду, це насправді не має значення.

За допомогою основної алгебри ми можемо переставити це як

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

Виконуючи математику, 6.220 є про 71015, тому назвемо всю справу 71030 або, що більш лаконічно, цілий чорт багато.

Це, звичайно, чому довгі паролі працюють дуже добре :-) Що стосується справжніх паролів, звичайно, ви повинні турбуватися про рядки довжиною менше або дорівнює двадцяти, що збільшує кількість можливостей ще більше.

Дублікати у списку

Тепер розглянемо інший сценарій. Рядки генеруються випадковим чином, і ми хочемо визначити, скільки їх можна створити, перш ніж є шанс 1: 100 000 для будь-яких двох рядків. Класична версія цієї проблеми називається «Проблема з днем ​​народження» (або «Парадокс») і запитує, яка ймовірність того, що двоє з російських людей мають один день народження. Стаття у Вікіпедії [1] виглядає пристойно і містить кілька таблиць, які можуть вам бути корисними. Тим не менш, я спробую надати вам смак для відповіді і тут.

Деякі речі, які слід пам’ятати:

-Імовірність матчу та невідповідності повинна дорівнювати 1, значить P(match)=1P(no match) і навпаки.

-До двох незалежних заходів A і B, ймовірність P(A&B)=P(A)P(B).

Щоб отримати відповідь, ми почнемо з обчислення ймовірності не побачити відповідність для фіксованої кількості рядків k. Як тільки ми знаємо, як це зробити, ми можемо встановити це рівняння, що дорівнює порогу (1/100 000), і вирішити дляk. Для зручності давайте зателефонуємоN кількість можливих рядків (6220).

Ми збираємось "піти" вниз по списку і обчислити ймовірність того, що k^ {th} рядок відповідає будь-якому з рядків "вище" у списку. Перший рядок у нас єN загальних рядків і нічого в списку, так що Pk=1(no match)=NN=1. Для другого рядка є щеN загальних можливостей, але одна з них була "використана" першим рядком, тому ймовірність відповідності для цього рядка є Pk=2(no match)=N1N Для третьої струни є два способи відповідності їй і тому N2 способи не зробити так Pk=3(no match)=N2Nі так далі. Загалом, ймовірність виникненняkth рядок, що не відповідає іншим, є

Пк(немає відповідності)=N-к+1N

Однак ми хочемо, щоб не було відповідностей жодному з кструни. Оскільки всі події є незалежними (за запитанням), ми можемо просто помножити ці ймовірності разом так:

П(Немає відповідностей)=NNN-1NN-2NN-к+1N
Це можна трохи спростити:
П(Немає відповідностей)=N(N-1)(N-2)(N-к+1)NкП(Немає відповідностей)=N!Nк(N-к)!П(Немає відповідностей)=к!(Nк)Nк
Перший крок просто множує дроби разом, другий використовує визначення факторіального (к!=(к)(к-1)(к-2)1) замінити продукцію Nk+1Nз чимось трохи більш керованим, а останній крок заміняється на двочленний коефіцієнт. Це дає нам рівняння щодо ймовірності відсутності збігів після генераціїkструни. Теоретично ви могли б встановити це рівним1100,000 і вирішити для k. На практиці відповісти на це буде складно, оскільки ви будете множувати / ділити на величезну кількість - фабрики ростуть дуже швидко (100! довше 150 цифр).

Однак є наближення, як для обчислення факторіалу, так і для всієї проблеми. Цей документ [2] пропонує

k=0.5+0.252Nln(p)
де р - ймовірність не побачити відповідність. Його випробування максимум наN=48,000, але це все ще досить точно. Підключаючи ваші номери, я отримую приблизно3.71015.

Список літератури

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

[2] Матіс, Френк Х. (червень 1991). "Узагальнена проблема дня народження". Огляд SIAM (Товариство промислової та прикладної математики) 33 (2): 265–270. JSTOR Посилання


+1 Дивовижно, зважаючи на те, що мої погані математичні навички призвели до того, що я задав це питання, тому я залишаю це питання без відповіді на день, але мені добре виглядає, і чи є більш зрозумілим відповідь, ніж я очікував - дякую!
помилки

1
Радий допомогти! Дайте мені знати, якщо щось незрозуміло. Для ударів я побіг числа. Вам знадобиться 7044234255469980229683302646164 здогадки; як я вже сказав - багато!
Метт Крауз

+1 @Matt Krause: +1 до вашого коментаря нижче відповіді; Ваша відповідь та прихильність дати найкращу можливу відповідь є зразковою, гідною уваги, і дякую за всю Вашу важку працю!
промахи
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.