Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 21/08/06 в 22:21 |
Нужно строки в TXT перемешать случайным образом.
В конечном итоге я ее вычитываю PHP-скриптом в массив и затем запускаю встроенную процедуру взбивания массива, но она как-то не очень хорошо перемешивает, не помогает даже неоднократный ее запуск.
Писать для этого свою прогу неохота. Вдруг нечто подобное уже есть, или как это проще сделать.
Подскажите.
|
|
|
|
прожектор перестройки
С нами с 13.10.05
Сообщения: 1406
Рейтинг: 636
|
Добавлено: 21/08/06 в 22:25 |
ты не пробовал shuffle() ?
$massive = file("file.txt");
shuffle($massive);
|
|
|
|
С нами с 23.03.03
Сообщения: 390
Рейтинг: 254
|
Добавлено: 21/08/06 в 22:35 |
shuffle -sf yourfile > shuffledfile в шеле
|
|
|
|
Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 22/08/06 в 14:29 |
webmaster779 писал: | ты не пробовал shuffle() ?
$massive = file("file.txt");
shuffle($massive); |
Цитата: | В конечном итоге я ее вычитываю PHP-скриптом в массив и затем запускаю встроенную процедуру взбивания массива, но она как-то не очень хорошо перемешивает, не помогает даже неоднократный ее запуск. |
|
|
|
|
Ревнивый муж подобен турку
С нами с 01.03.06
Сообщения: 4302
Рейтинг: 905
|
Добавлено: 22/08/06 в 14:33 |
Может надо сбрасывать генератор случайных чисел перед запуском?
Что значит, кстати, "плохо перемешивает"?
|
|
|
|
С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096
|
Добавлено: 22/08/06 в 21:39 |
перед shuffle ОБЯЗАТЕЛЬНО надо mt_srand. Без этого у меня один раз вообще массив не перемешивался. Добавил - сразу стало как надо.
|
|
|
|
С нами с 26.02.03
Сообщения: 2366
Рейтинг: 987
|
Добавлено: 22/08/06 в 22:11 |
А как же хелп по РНР ? Код: | Примечание: начиная с PHP 4.2.0, больше не нужно сеять генератор случайных чисел, перед тем как его использовать. |
|
|
|
|
С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096
|
Добавлено: 22/08/06 в 22:38 |
а хз. остальное все работает, а вот эта функция почему то нет. может и не всегда, хз. но случай был.
|
|
|
|
Считаю до трех
С нами с 23.03.05
Сообщения: 12353
Рейтинг: 2918
|
Добавлено: 25/08/06 в 14:10 |
Петр Кроликов писал: | Что значит, кстати, "плохо перемешивает"? |
Трудно это описАть.
Он как-то группами строки переставляет, а не по-одной.
А у меня там линки на ФХГ группами по платникам.
Выходит нечто вроде: (упрощенный вариант)
Код: | Платник1_ФХГ1
Платник1_ФХГ2
Платник1_ФХГ3
Платник1_ФХГ4
Платник1_ФХГ5
Платник2_ФХГ1
Платник2_ФХГ2
Платник2_ФХГ3
Платник2_ФХГ4
Платник3_ФХГ1
Платник3_ФХГ2
Платник3_ФХГ3
Платник3_ФХГ4
Платник3_ФХГ5 |
После перемешивания получается частенько так:
Код: | Платник1_ФХГ3
Платник2_ФХГ2
Платник2_ФХГ3
Платник1_ФХГ4
Платник2_ФХГ1
Платник3_ФХГ1
Платник2_ФХГ4
Платник3_ФХГ2
Платник1_ФХГ1
Платник1_ФХГ2
Платник3_ФХГ3
Платник3_ФХГ5
Платник1_ФХГ5
Платник3_ФХГ4 |
Т.е. в этом случае "Платник1_ФХГ1" и "Платник1_ФХГ2" вроде и переместились в другое место, но все равно остались вместе, или разделенны 1-2 строками. (Пример крайне упрощенный, просто для понимания). Т.е. как-то группами строки переносятся.
|
|
|
|
С нами с 01.03.06
Сообщения: 629
Рейтинг: 620
|
Добавлено: 26/08/06 в 01:21 |
EagleOwl писал: |
Он как-то группами строки переставляет, а не по-одной.
...
Т.е. в этом случае "Платник1_ФХГ1" и "Платник1_ФХГ2" вроде и переместились в другое место, но все равно остались вместе, или разделенны 1-2 строками. (Пример крайне упрощенный, просто для понимания). Т.е. как-то группами строки переносятся.
|
а на бОльших объемах как себя ведет не смотрел? если 2 из 100 и станут рядом помоему ничего страшного не случится... функция shuffle же предназначена не для того чтобы устранить все начальные последовательности, а сугубо для перемешивания (причем наибыстрейшего, а не наилучшего), даже равномерное распределение случаных величин может давать такие склейки... если тебе нужно что бы никаких последовательностей не наблюдалось - то либо делай постобработку после shuffle, либо пиши свой уникальный метод сортировки...
|
|
|
|
С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760
|
Добавлено: 26/08/06 в 03:00 |
дык после случайного перемешивания, 2 строки могут также случайно оказаться рядом.. эт вполне нормально
|
|
|
|
Ревнивый муж подобен турку
С нами с 01.03.06
Сообщения: 4302
Рейтинг: 905
|
Добавлено: 26/08/06 в 11:40 |
У меня комбинаторика была 15 лет назад
Короче, примерно так (могу спиздеть, но несильно). Если в файле 100 строк.
Шансов для каждой строки, что следом за ней встанет порядковая (за 33-й 34-я) - это один из 99 (1,01%)
Шансов на то, что во всём файле будет хоть одна такая пара: 1- ((100%-1,01%) в 99-й степени) или 63,3%.
Короче, если в файле сто строк, то с вероятностью 63,3% будет хоть одна идущая подряд пара.
Так что можно подсчитать, какая вероятность получить расклад, который выдаёт shuffle и, исходя из этого, принимать решение.
|
|
|
|