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


9

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

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

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


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

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

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

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

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

Відповіді:


11

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

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

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

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

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

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

105x≥6220105x≥(6.2⋅10)20105x≥6.220⋅1020x≥6.220⋅1015

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

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

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

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

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

-Імовірність матчу та невідповідності повинна дорівнювати 1, значить P(match)=1−P(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)=N−1N Для третьої струни є два способи відповідності їй і тому N−2 способи не зробити так Pk=3(no match)=N−2Nі так далі. Загалом, ймовірність виникненняkth рядок, що не відповідає іншим, є

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

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

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

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

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

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

[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.