Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как это сделано? 
V
    Опции темы
Karadul
Дата 31.3.2013, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



PM MAIL   Вверх
Arantir
Дата 31.3.2013, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 1
Всего: 55



Генерация чисел является псевдослучайной. Это значит, что ряд чисел, выдаваемый генератором, детерминирован.
Конструктор класса Random принимает аргументом сид. Для одного и того же сида ряд генерируемых чисел всегда одинаков.

Вся суть вышеприведенной программы заключается в ловко подобранных сидах и символе, к которому прибавляются полученные псевдослучайные числа.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Stolzen
Дата 31.3.2013, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48





--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Karadul
Дата 31.3.2013, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



Это я уже сам понял smile Но как подобрали эти сиды? Брутфорсом? И какая вероятность найти seed, которое будет выдавать последовательность из 6 чисел?
PM MAIL   Вверх
Stolzen
Дата 31.3.2013, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Посмотрите ссылку, там есть ответы на ваши вопросы


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Karadul
Дата 31.3.2013, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



Есть, я просто эти математические козюбрики плохо понимаю smile

Я так понимаю, этот код уже - редкостный боян?

Это сообщение отредактировал(а) Karadul - 31.3.2013, 21:53
PM MAIL   Вверх
Stolzen
Дата 1.4.2013, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Рассмотрим следующую задачу:

Допустим, мы хотим получить слово "ЛЕНИН". Наш алфавит состоит из 33 букв и одного терминального символа, обозначающего конец последовательности, например '.'. Т.е. мы ищем слово "ЛЕНИН." Можно представить, что мы бросаем многогранник с 34-мя гранями 6 раз, и каждый раз записываем выпавшую букву.

Пусть событие B - выпал "ЛЕНИН."

p = p(B) = (1/34)^6 (34^6 - общее число исходов, 1 - число благоприятных исходов)
q = p(не B) = 1 - p - выпал не "ЛЕНИН.".

Теперь посчитаем сколько испытаний нужно провести, чтобы хотя бы раз выпал "ЛЕНИН.".
Пусть событие А - при n испытаниях слово "ЛЕНИН" выпадает хотя бы один раз. 

Посчитаем n для P(A) = 0.9:

q^n = P(не B)^n - вероятность того, что за n испытаний слово "ЛЕНИН." не выпадет ни разу. 
P(A) = 1 - P(не B)^n = 1 - q^n
P(A) = 0.9
0.9 = 1 - q^n
q^n = 0.1
n ln q = ln 0.1
n = ln 0.1 / ln q

Подставляем q и получаем n = ~3.5 млрд раз. Т.е. для того, чтобы с вероятностью 0.9 хотя бы один раз выпало слово "ЛЕНИН." нам нужно провести около 3.5 млрд испытаний. 

Теперь оценим количество операций.

Положим, что один бросок нашего многогранника есть одна операция. 
Далее, пусть в испытании мы бросаем буквы до тех пор, пока складывается нужно слово и прекращаем, как только выпало что-то другое. Т.е. если 1-й буквой выпала "Л" мы продолжаем, иначе останавливаемся.

Пусть случайная величина X - количество операций для одного испытания. 

p = 33/34 вероятность того, что испытание прерывается
q = 1/34 вероятность того, что испытание продолжается

p_i - вероятность того, что испытание закончится после x_i операций.

x_1 = 1, p_1 = q = 33/34 (только в 1 случае из 34 продолжаем, во всех остальных останавливаемся)
x_2 = 2, p_2 = q^1 * p = 1/34 * 33/34 (вероятность того, что в прошлый раз выпала нужная буква и того, что в этот раз выпала ненужная)
x_3 = 3, p_3 = q^2 * p = 1/34^2 * 33/34
x_4 = 4, p_4 = q^3 * p = 1/34^3 * 33/34
x_5 = 5, p_5 = q^4 * p = 1/34^4 * 33/34
x_6 = 6, p_6 = q^5 * 1 = 1/34^5 * 1 (вероятность того, что все 5 предыдущих раз выпала нужная буква * 1, т.к. 6-й раз мы бросаем в любом случае)

Проверка: сумма всех вероятностей должна быть равна единице. 
sum(p_i) = (33*34^4 + 33*34^3 + 33*34^2 + 33*34 + 33 + 1) / 34^5 = 45435424 / 45435424 = 1

Найдем математическое ожидание нашей случайной величины
M(X) = sum p_i * x_i ~ 1.0303

Т.е. в среднем за один эксперимент производится 1.0303 операции. 


N = n * 1.0303 ~ 3.6 млрд операций. 

Итого получаем, что нужно осуществить около 3.6 млрд операций, чтобы подобрать нужное слово длины 5 и оканчивающееся нулём. Не так уж и много для современных компьютеров - на моем ноутбуке почти всегда алгоритм завершается быстрее, чем за 30 секунд.

Это сообщение отредактировал(а) Stolzen - 1.4.2013, 15:41


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Karadul
Дата 1.4.2013, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 0
Всего: 1



2**32 (4 млрд) - worst case, при том, что можно искать параллельно несколько слов

Все это верно, если буквы выпадают равновероятно. Надо бы посмотреть nextInt.

Это сообщение отредактировал(а) Karadul - 1.4.2013, 19:28
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.