четверг, 23 апреля 2009 г.

SEO Generator: методы генерации

Многие спрашивают в чем разница методов генерации в SEO Generator.
Начнем с разновидностей последовательной генерации.

Скопируйте этот код в генератор: {0|1|2|3|4|5|6|7|8|9}{0|1|2|3|4|5|6|7|8|9}


“Последовательно ->” сгенерирует:
00
10
20
30

01
11
…..
“->” означает направление обхода. Сначала меняем самые левые элементы.

“Последовательно <-" сгенерирует: 00 01 02 03 .. 10 11 12 .. Т.е. посчитает до сотни.

"Последовательно <->” выдаст:
00
11
22
33
..
00
11
22
33

Т.е. можно видеть зациклиность, когда колличество вариантов в разных конструкциях равны или имеют одинаковый делитель например (3 и 6, 6 и 9).
Если бы не возникали зациклиности, то этот метод был бы довольно хорош, поскольку все варианты каждой конструкции используються равномерно.
Т.е. Нолик в первой строчке наблюдаеться ровно 10ть раз (100 генераций/10 вариантов в конструкции). Тоже самое можно сказать про единицу, двойку тройку. При случайной генерации не обязятельно вариант будет использован ровно столько раз, сколько нужно. Еще есть одно замечание случайные числа подвержены не равномерному распределению, а нормальному. 5 и 6 генерируются чаще, 0 и 9. Этот момент я подправил, но некоторое отклонение от равномерного распределения все же наблюдаеться.
Что такое продвинутый рандом. Допустим в конструкции 200 элементов, а нужно сгенерировать 100, если действовать случайно, то очень велика вероятность несколько раз выдать один и тот же элемент конструкции. Поэтому будем последовательно перебирать все элементы конструкции, если число элементов больше чем необходимо сгенерировать. Если развить идею, то конструкции не могут попасть в цикл друг другу, если после полного перебора всех элементов конструкции начинать рандом. Это называеться продвинутый рандом. Сначала последовательно перебираем конструкцию, а потом начинаем рандом:
00
11
22
33
44
55
66
77
88
99//перебрали обе конструкции, а дальше случайно
16
51
36
20
63
45

Напоминает смесь “последовательно <->” обычным рандомом.
Рандомные прыжки.

..
08 // Начинаем перебор со случайной точки
19 // 0+1=1 8+1=9
20 // 1+2=2 9+1=10 (пускаем по кругу 10=0)
31 // 2+1=3 0+1=1
42
53
64
75
86
97
82 // Полный цикл перебора по обеим конструкциям закончен. Делаем случайный прыжок.
93 // 8+1=9 2+1=3
04
15
26
37
48

В примере проилюстрирован частный случай, когда число элементов в конструкциях одинаковое. Можите попробывать: {0|1|2} {0|1|2|3|4|5|6|7|8|9}.
Преимущество метода в том, что каждый элемент констукции используються одинаковое колличество раз (с точностью до единицы) и нет зацикливаний.
Вариационный взрыв
До этого мы не рассматривали тот момент, что синтаксис многоуровневый. Синтаксис входе препроцессинга преобразоваеться в одно уровневый.
{{очень|} хорошо|прекрасно} преобразуеться в {очень хорошо|хорошо|прекрасно} эти варианты равносильны и шанс выпадения “очень хорошо” равен шансу выпадения “хорошо” равен шансу выпадения “прекрасно” = 33.33333…%.
Обозначим вероятность выпадения P
При вариационном взрыве препроцессинга нет. И вероятность выпадения зависит от первоначального синтаксиса. {{очень|} хорошо|прекрасно}. P(”прекрасно”) = P(”{очень|} хорошо”)=100%/2=50%. P(”очень хорошо”)= P(”хорошо”) = P(”{очень|} хорошо”)/2=50%/2=25%.
Вариационный взрыв может обработать такие конструкции, которые не может обработать препроцессор.




Инвестиции и инвестиционный процесс