|
Перебор vs Рандом | ☑ | ||
---|---|---|---|---|
0
Balabass
07.12.12
✎
03:20
|
Есть некая комбинация комбинация знаков - пусть будет длина 5.
Как быстрее её подобрать? Перебрать все возможные комбинации, или генерировать случайные значения? |
|||
34
D_Pavel
07.12.12
✎
08:11
|
Что перебором, что рандомом, вероятность угадывания числа на N-ом шаге одинаковая. Но рандом организовать сложнее чем перебор.
Вероятность того что загадали число 9 и рандомом его угадать будет быстрее компенсируется тем что есть такая же вероятность что будет загадано число 1 и перебором будет быстрее. |
|||
35
Xapac_2
07.12.12
✎
08:14
|
(0) рандом быстрей, если мы "запоминаем" предыдущие значения.
|
|||
36
Xapac_2
07.12.12
✎
08:15
|
(35)+ если основное время уходит не на получение цифры, а на проверку ее в качестве результата
|
|||
37
1Сергей
07.12.12
✎
08:16
|
(32) нельзя заставить рандом исключить какой-то значение. Тебе придётся генерить рандомное число, потом сравнивать его со списком уже проверенных чисел, а потом сравнивать с основным. И зачем?
|
|||
38
Balabass
07.12.12
✎
08:17
|
(37) Спортивнй интерес. Разве нет?
|
|||
39
Xapac_2
07.12.12
✎
08:17
|
(37) в этом есть смысл.
|
|||
40
Лодырь
07.12.12
✎
08:18
|
Количество опытов: 10 000 рандом:98 469 перебор:54 612
Количество опытов: 100 000 рандом:975 523 перебор:549 340 |
|||
41
1Сергей
07.12.12
✎
08:19
|
(38) (39) замедлит. Проще просто сравнивать с искомым и идти дальше. Так будет быстрее
|
|||
42
Лодырь
07.12.12
✎
08:19
|
Это тест рандома по методу балабаса - без запоминания ранее проверенных значений.
|
|||
43
Balabass
07.12.12
✎
08:20
|
(42) Почему же без запоминания?
|
|||
44
Xapac_2
07.12.12
✎
08:21
|
(41) см(36)
|
|||
45
1Сергей
07.12.12
✎
08:21
|
средствами 1С можно сделать так:
создать список со всем возможными значениями, потом рандомно выбирать значение из списка, проверять на соответствие и удалять из списка |
|||
46
1Сергей
07.12.12
✎
08:22
|
(45) + но, это опять же будет дольше
|
|||
47
Лодырь
07.12.12
✎
08:22
|
(43) Потому что запоминание убьет производительность вхлам.
|
|||
48
ParaWiz
07.12.12
✎
08:23
|
(0) А тебе не приходил в голову вопрос "Почему все bruteforce используют последовательный перебор (по словарю или без словаря)?" а уж в bruteforce как раз самое критичное это скорость подбора
|
|||
49
Лодырь
07.12.12
✎
08:24
|
Количество опытов: 1 000 000 рандом:9 690 835 перебор:5 500 031
Где то явно косяк с генерацией случайных числе у 1С. |
|||
50
HeroShima
07.12.12
✎
08:25
|
дихотомию таки попробуйте
|
|||
51
Лодырь
07.12.12
✎
08:25
|
хотя туплю.. все нормально с генерацией.
|
|||
52
Heckfy
07.12.12
✎
08:26
|
А чего вы только числа берете? А буквы, латиница, кирилица, верхний/нижний регистр, спецсимволы. Это нихера не 99 999!!!
|
|||
53
1Сергей
07.12.12
✎
08:26
|
(49) а длина числа какая была?
|
|||
54
1Сергей
07.12.12
✎
08:26
|
(52) это не суть важно
|
|||
55
Лодырь
07.12.12
✎
08:26
|
(50) Блин расскажи нам алгоритм дихотомии. Я вот со своей подготовкой в области математики не знаю способа его применения тут.
|
|||
56
ParaWiz
07.12.12
✎
08:26
|
(50) по какому признаку блин поможет дихотомия ? если нам известно только то что мы не попали, и неизвестно в меньшую или в большую сторону не попали
|
|||
57
HeroShima
07.12.12
✎
08:28
|
(55) начинать проверку со значений располагающихся на 50% поддиапазона.
|
|||
58
HeroShima
07.12.12
✎
08:29
|
(56) речь идёт о половинном делении, а не о поиске половинным делением
|
|||
59
ParaWiz
07.12.12
✎
08:29
|
(57) дальше говори :) *приготовил попкорн*
|
|||
60
Лодырь
07.12.12
✎
08:30
|
(57) То есть ты предлагаешь сверять в таком порядке 5,3,1,0,2,4,8,7,6,9 ? (обход дерева вглубь)
|
|||
61
HeroShima
07.12.12
✎
08:30
|
(59) 50%, 25%, 75%...
|
|||
62
ParaWiz
07.12.12
✎
08:31
|
(61) смысл то в чем ? в том что вероятность выпадения экстремума типа меньше ?
|
|||
63
HeroShima
07.12.12
✎
08:32
|
(62) да
|
|||
64
ParaWiz
07.12.12
✎
08:32
|
так это бред при нормальном количестве экспериментов
|
|||
65
МастерВопросов
07.12.12
✎
08:32
|
(37) ну ты как бы повторил мою мысль в (32) что в "рандоме" все так же сводится к перебору.
Как в том анеке либо один перебор, но большой. Либо рандом и маленькие переборы, но много раз. |
|||
66
Лодырь
07.12.12
✎
08:32
|
(61) Подробнее. Есть число в диапазоне 0..9. В каком порядке сверять? Мне не лень накодить и проверить.
|
|||
67
ParaWiz
07.12.12
✎
08:32
|
вероятность выпадения цифры 5 равновелика вероятности выпадения 0
|
|||
68
HeroShima
07.12.12
✎
08:33
|
(64) о свойствах значений нам ничего не сказали. что рендом бред ещё никто не сказал, хоть и намекают.
|
|||
69
ParaWiz
07.12.12
✎
08:35
|
(0) Иди на мехмат, ща вспомню на каком курсе у нас был тервер .. на третьем вроде
|
|||
70
Xapac_2
07.12.12
✎
08:39
|
итак эксперимент показал, что рандом нашел число 9892 за
4166 итераций число само выбиралось рандомно из от 0 до 99999 |
|||
71
1Сергей
07.12.12
✎
08:39
|
помница на 7.7 делал игру быки и коровы. Там 1С сама загадывала число и пыталась отгадать число задуманное пользователем. Отгадывала она не тупым брутфорсом и не рандомом, а методом исключения. Но, там задача другая
|
|||
72
Лодырь
07.12.12
✎
08:39
|
(70) Дружище смотри выше результаты для 1 миллиона экспериментов.
|
|||
73
1Сергей
07.12.12
✎
08:40
|
(70) с исключением проверенных?
|
|||
74
HeroShima
07.12.12
✎
08:40
|
(66) 5, 3, 8, 1, 4, 7, 9, 0, 2, 6 , если нигде не ошибся
|
|||
75
ParaWiz
07.12.12
✎
08:41
|
(70) ага, а число 107 перебор найдет за 108 шагов и что ?
|
|||
76
Xapac_2
07.12.12
✎
08:42
|
(73) да
private var cH:int = 0; public function Check(f1:int, f2:int):Boolean { //trace(" fintNum " + f1 + " " + " fintNum " + f2); cH++; if (f1 == f2) return true; return false; } var FNum:Array = new Array(); public function GetRandom():int { var lastNum:int = -1; lastNum = Math.round(Math.random() * 99999); var _if:Boolean = false; for (var i:int = 0; i < FNum.length; i++) if (FNum[i] == lastNum) { _if = true; break; } if(!_if) FNum.push(lastNum); else return -1; return lastNum } public function Main():void { var fintNum:int = Math.round(Math.random() * 99999); var lastNum:int = -1; while (true) { while (true) { lastNum = GetRandom(); if (lastNum!= -1) break; } if(Check(lastNum, fintNum)) break; } trace("cH " + cH + " fintNum " + fintNum + " " + " fintNum " + fintNum); } |
|||
77
Balabass
07.12.12
✎
08:42
|
При 1000 разных значений [0..1000]
Перебор: 489 686 Рандом: 1 011 571 |
|||
78
Лодырь
07.12.12
✎
08:43
|
Количество опытов: 100 000 рандом:965 238 перебор:550 964 ебанутыйспособ:550 497
|
|||
79
Balabass
07.12.12
✎
08:43
|
(78) Что за 3 способ такой?
|
|||
80
Лодырь
07.12.12
✎
08:44
|
Как видим вышеупомянутый HeroShima способ аналогичен перебору
|
|||
81
Лодырь
07.12.12
✎
08:44
|
(79) метод HeroShima
|
|||
82
Xapac_2
07.12.12
✎
08:45
|
итак эксперимент_2 показал, что рандом нашел число 18148 за
79428 итераций 2 эксперимента провалились, ибо процесс выполнялся больше 15 секунд, а данная платформа умирает, если задумывается больше 15(типа я зависла) (эт когда 25000 проверок превышает) |
|||
83
Xapac_2
07.12.12
✎
08:45
|
короче ну вас работать надо
|
|||
84
ParaWiz
07.12.12
✎
08:45
|
(80) при нормальном количестве экспериментов все три способа (если конечно рандом с исключением проверенных) дадут равное количество итераций, но! что рандом что "метод хирошимы" будут выполнятся дольше по времени
|
|||
85
ParaWiz
07.12.12
✎
08:46
|
что дает однозначный ответ: перебор без вариантов
|
|||
86
ParaWiz
07.12.12
✎
08:46
|
остальное онанизм и дебилизм
|
|||
87
МастерВопросов
07.12.12
✎
08:46
|
Вот вам старая баянистая задачка, но зато поинтереснее:
" Разборчивая невеста В 1962 году Гарднер сформулировал очень интересную задачу, популярность которой сейчас достигла пика. Это задача о разборчивой невесте. Итак, к невесте (принцессе некоторого царства) явилось, допустим, 1000 женихов. Она может одновременно общаться только с одним женихом и по окончании беседы обязана дать ему согласие или отказ. Какую стратегию необходимо принять принцессе, чтобы с наибольшей вероятности выбрать наиболее достойного?" http://stastu.livejournal.com/4140.html |
|||
88
D_Pavel
07.12.12
✎
08:46
|
(35) >> рандом быстрей, если мы "запоминаем" предыдущие значения.
не быстрее. |
|||
89
Лодырь
07.12.12
✎
08:47
|
(84) (85) (86) Так точно.
|
|||
90
D_Pavel
07.12.12
✎
08:48
|
(87) Я думаю первым 500 нужно отказать, и согласиться на любого который лучше самого лучшего из предыдущих. Вероятность успеха 50%
|
|||
91
Лодырь
07.12.12
✎
08:49
|
(87) Дружище, если некоторые не понимают основ тервера, оценки трудоемкости алгоритмов и методов оптимизации - что говорить о задачах Гарднера - которые как правило небанальны.
|
|||
92
ParaWiz
07.12.12
✎
08:50
|
(91) да ладно, мы же на форуме 1Сников ... тут это норма :)
|
|||
93
HeroShima
07.12.12
✎
08:50
|
(84) накладные расходы у "моего" метода и метода перебора сопоставимы и гораздо меньше чем проверка рендома по таблицам.
|
|||
94
Лодырь
07.12.12
✎
08:51
|
(93) В коде метод перебора занимает 3 строчки а твой 30
|
|||
95
Лодырь
07.12.12
✎
08:52
|
(93) Это если кодировать для 0..9 Если же реализовывать универсальный метод - то большие вычислительные затраты на деление пополам.
|
|||
96
D_Pavel
07.12.12
✎
08:53
|
(87) Почему-то в задаче правильный ответ странный... Почему "е" ?? Так вероятность выбора лучшего меньше чем в моем способе!
|
|||
97
ParaWiz
07.12.12
✎
08:53
|
(93) с чего бы вдруг ... i++ работает быстрее чем даже i=i+1 не то что операции деления и прочие
|
|||
98
МастерВопросов
07.12.12
✎
08:53
|
(91) сама по себе она не так страшна как ее интерпритации.
" Математически это задача выбора наилучшего объекта без возможности возвращения. Задача была решена быстро и сейчас ее предлагают школьникам в популярной математической литературе. ... Сухая математическая формулировка многим не понравилась и задачу попытались приблизить к жизни. Стали решать менее формальные задачи. Как выбрать лучшего или одного из лучших. Эта веселая задача, которая ставит в тупик простого человека, породила новое направление в математике – теории рекордов, а так же теорию оптимизации случайных процессов." |
|||
99
D_Pavel
07.12.12
✎
08:54
|
Короче, метод перебора лучший.
|
|||
100
1Сергей
07.12.12
✎
08:54
|
(97) >> ... i++ работает быстрее чем даже i=i+1 ...
Выдыхай |
|||
101
HeroShima
07.12.12
✎
08:55
|
(67) спасибо, с ассемблером знаком
(100) с отключенной оптимизацией быстрее) |
|||
102
ParaWiz
07.12.12
✎
08:56
|
(100) схерали ? :)
|
|||
103
HeroShima
07.12.12
✎
08:56
|
*(101) (97), конечно же
|
|||
104
Лодырь
07.12.12
✎
08:57
|
(98) Вообще нашим студентам и школьникам не хватает таких задач. Нихрена не умеют решать более менее практические вещи, где требуется построение модели.
|
|||
105
ParaWiz
07.12.12
✎
08:57
|
ну кстати забыл, еще быстрее будет преинкремент ++i
|
|||
106
D_Pavel
07.12.12
✎
08:57
|
Объясните по задаче. Схера "е" ??????
|
|||
107
D_Pavel
07.12.12
✎
08:58
|
А, всё. Сам допер.
|
|||
108
МастерВопросов
07.12.12
✎
09:00
|
(90) ну вообщем то ответ правильный. Только оптимальный размер первой выборки математики вычислили менее чем 50%, но это уже действительно уровень не для простых людей.
|
|||
109
МастерВопросов
07.12.12
✎
09:01
|
(107) рассказывай теперь нам :-)
|
|||
110
HeroShima
07.12.12
✎
09:02
|
так как на счёт от центра к периферии?)
|
|||
111
HeroShima
07.12.12
✎
09:03
|
+(110) при маловероятных крайностях
|
|||
112
Лодырь
07.12.12
✎
09:03
|
(110) Я выложил результаты выше
|
|||
113
HeroShima
07.12.12
✎
09:05
|
(112) там был последовательный перебор от 50% декрементом к 0% и инкрементом к 100%?
|
|||
114
vde69
07.12.12
✎
09:06
|
//класический обход дерева
анализируемоеЧисло = 3244353454 Разрядность = ЧислоЗнаков(анализируемоеЧисло) правило = массив(6,5,7,0,3,2,1,4,9,8) КусокПравила = массив() ПолучитьРекурсивно (анализируемоеЧисло, КусокПравила, Разрядность, Правило) Процедура ПолучитьРекурсивно (анализируемоеЧисло, КусокПравила, Разрядность, Правило) для каждого текЗнак из правило цикл мКусокПравила = КусокПравила.Скопировать() мКусокПравила.Добавить(текЗнак) Если мКусокПравила.Количество() = Разрядность Тогда ОбработатьПроверку(мКусокПравила) Иначе ПолучитьРекурсивно (анализируемоеЧисло, КусокПравила, Разрядность, Правило) КонецЕсли конецЦикла конецПроцедуры |
|||
115
ParaWiz
07.12.12
✎
09:07
|
(110) при равновероятных вариантах и достаточно количестве экспериментов нету разницы никакой, сколько говорить то можно ... но затраты выше при любом методе чем при переборе
|
|||
116
ParaWiz
07.12.12
✎
09:07
|
и еще раз повторюсь посмотрите любой алгоритм брутфорса
|
|||
117
HeroShima
07.12.12
✎
09:07
|
(115) я не говорю о равновероятных вариантах
|
|||
118
Лодырь
07.12.12
✎
09:07
|
(113) писал ранее
Количество опытов: 100 000 рандом:965 238 перебор:550 964 ебанутыйспособ:550 497 |
|||
119
vde69
07.12.12
✎
09:08
|
(114)+ писал от балды, ошибко наверно море, но сам принцеп думаю ясен
|
|||
120
Лодырь
07.12.12
✎
09:08
|
(117) Если речь идет о нормальном распределении то задача СОВСЕМ другая.
|
|||
121
HeroShima
07.12.12
✎
09:09
|
(116) в криптографии крайние значения маловероятны
(118) ебанутым был назван метод через "пополам", который был предложен в самом начале ветки не мной |
|||
122
Balabass
07.12.12
✎
09:11
|
10 числе от 0 до 1000
1 из 29 Перебор: 4 918 Рандом: 4 835 |
|||
123
vde69
07.12.12
✎
09:11
|
(114)+
достоинства что для каждого вычисления можно генерить массив правила свой, например на основании какой-то статистики (например 0 и 9 поставить в конец ряда) |
|||
124
ParaWiz
07.12.12
✎
09:12
|
(121) хех, какова вероятность использования идиотами паролей типа 111 или 123
|
|||
125
vde69
07.12.12
✎
09:13
|
(124) 80%
|
|||
126
Balabass
07.12.12
✎
09:13
|
ахаха
|
|||
127
ParaWiz
07.12.12
✎
09:13
|
(125) если не больше :)
|
|||
128
D_Pavel
07.12.12
✎
09:14
|
Вот процедура генерации не повторяющихся случайных чисел:
Процедура Рандом()
Л, Й и Ж взаимно простые числа. Генерируемые числа не повторяются Ж раз подряд. Нужно изначально инициализировать переменную хре, например: хре = 0; |
|||
129
HeroShima
07.12.12
✎
09:14
|
ага, давайте ещё присовокупим статистику по кол-ву идиотов на душу населения)
|
|||
130
Balabass
07.12.12
✎
09:16
|
(128) А где Л и Й и Ж указать?
|
|||
131
D_Pavel
07.12.12
✎
09:17
|
(130) Вместо Л и Й и Ж можешь цифрами впечатать. Или еще где-нибудь.
|
|||
132
vde69
07.12.12
✎
09:17
|
где то видел алгоритм "ход конем", то же типа случайный...
|
|||
133
D_Pavel
07.12.12
✎
09:19
|
Например для периода 65536:
Процедура Рандом()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |