Реклама на сайте Advertise with us

Перемешиваем текстовый файл

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 22.10.03
Сообщения: 598
Рейтинг: 706

Ссылка на сообщениеДобавлено: 15/10/06 в 10:28       Ответить с цитатойцитата 

Понадобилось мне перемешать текстовый файл со списком ФХГ. Написал простенькую програмку и вспомнил, что пару раз кто-то на форуме про такое спрашивал. Так-что если кому надо, пользуйтесь. Во второй строке указываем имя файля и запускаем. Сгодится для перемешивания списка ФХГ например. Вместо shuffle() используется более "перемешивающий" алгоритм.

0
 



С нами с 26.02.03
Сообщения: 2352
Рейтинг: 987

Ссылка на сообщениеДобавлено: 15/10/06 в 14:48       Ответить с цитатойцитата 

Код:
$fhgs=file($file);
$v0 = count($fhgs);
$v0 = $v0-1;
$v1=$v0*3;
for ($i=0;$i<$v1;$i++){
$n1=rand(0,$v0);
$n2=rand(0,$v0);
$v2=$fhgs[$n1];
$fhgs[$n1]=$fhgs[$n2];
$fhgs[$n2]=$v2;
}
А ты уверен, что это более "перемешивающий" алгорит ? Известная аксиома програмирования на РНР - не нужно придумывать свои функции, когда есть стандартные.
Я не докалываюсь icon_smile.gif, просто самому иногда необходимо использовать данную операцию. Может кто-то что то более эфективное предложит.

3
 



С нами с 22.10.03
Сообщения: 598
Рейтинг: 706

Ссылка на сообщениеДобавлено: 15/10/06 в 16:02       Ответить с цитатойцитата 

Cibtor писал:
А ты уверен, что это более "перемешивающий" алгорит ? Известная аксиома програмирования на РНР - не нужно придумывать свои функции, когда есть стандартные.
Я не докалываюсь icon_smile.gif, просто самому иногда необходимо использовать данную операцию. Может кто-то что то более эфективное предложит.

$v1=$v0*3; - перемешивает три раза, в отличии от shuffle позволяет регулировать степень "перемешки" в ущерб времени. С год назад был топик по поводу перемешивания, где и был предложен этот алгоритм и где сошлись на мнении, что он самый толковый.

0
 



С нами с 26.02.03
Сообщения: 2352
Рейтинг: 987

Ссылка на сообщениеДобавлено: 15/10/06 в 21:22       Ответить с цитатойцитата 

pashtet писал:
в отличии от shuffle позволяет регулировать степень "перемешки" в ущерб времени
А по какому алгоритму мешает shuffle?
Код:
$n1=rand(0,$v0);
$n2=rand(0,$v0);
Меня смущает вот этот код с не самыми быстрыми операциями. IMHO в shuffle дожно быть сделанно как-то оптимальнее icon_smile.gif

1
 



С нами с 22.10.03
Сообщения: 598
Рейтинг: 706

Ссылка на сообщениеДобавлено: 15/10/06 в 21:44       Ответить с цитатойцитата 

Cibtor писал:
А по какому алгоритму мешает shuffle?
Код:
$n1=rand(0,$v0);
$n2=rand(0,$v0);
Меня смущает вот этот код с не самыми быстрыми операциями. IMHO в shuffle дожно быть сделанно как-то оптимальнее icon_smile.gif


Судя по http://php.net/shuffle не по этому. Это оказывается
Цитата:
This is an attempt to get the Fisher Yates shuffle right, and as optimized as possible

Может и оптимальнее, т.к. по любому на СИ, но в данном случае производительность не столько важна, сколько возможность регулировки, для меня по крайней мере.

0
 



С нами с 03.04.03
Сообщения: 2464
Рейтинг: 1841

Ссылка на сообщениеДобавлено: 16/10/06 в 00:50       Ответить с цитатойцитата 

также в качестве альтернативы можно использывать прогу EListPro
перемешивание , подсчет строк, удаление повторов и т.д

1
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 16/10/06 в 14:16       Ответить с цитатойцитата 

pashtet писал:
Так-что если кому надо, пользуйтесь. Сгодится для перемешивания списка ФХГ например.

за пользуйтесь конечно огромное спасибо - думаю многим в копилочку пригоится если еще нету, а самим написать не под силу. но у скрипта в связи с " $fhgs=file($file); " есть ограничение на объем памяти... и если действительно нужно перетусить обычный список ФХГ то ее не хватит однозначно на большинстве хостингов.

2
 



С нами с 22.10.03
Сообщения: 598
Рейтинг: 706

Ссылка на сообщениеДобавлено: 16/10/06 в 15:08       Ответить с цитатойцитата 

Heavy писал:
за пользуйтесь конечно огромное спасибо - думаю многим в копилочку пригоится если еще нету, а самим написать не под силу. но у скрипта в связи с " $fhgs=file($file); " есть ограничение на объем памяти... и если действительно нужно перетусить обычный список ФХГ то ее не хватит однозначно на большинстве хостингов.

А зачем ее запускать на хостинге, локально в самый раз. Да и памяти под PHP можно отвести можно побольше и время выполнения скрипта увеличить etc. У меня список из 5к ФХГ мешает за пару сек на дефолтных установках. Дюрон 1300, 512 РАМ

0
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 16/10/06 в 23:13       Ответить с цитатойцитата 

pashtet писал:

А зачем ее запускать на хостинге, локально в самый раз. Да и памяти под PHP можно отвести можно побольше и время выполнения скрипта увеличить etc. У меня список из 5к ФХГ мешает за пару сек на дефолтных установках. Дюрон 1300, 512 РАМ

затем что бы не тратить время на ручную работу - и все делалось само и в свое время... и мешать списки не в 5к ФХГ, а как минимум в 500к ;) но это так - к слову было - т.к. такие вещи на вируталах смысла делать всеравно нету...

1
 



С нами с 07.02.05
Сообщения: 691
Рейтинг: 435

Ссылка на сообщениеДобавлено: 16/10/06 в 23:39       Ответить с цитатойцитата 

Гг, чтобы фхг перемешивать уже дедик нужен? Boxer text editor вам в помощь ;)

1
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 16/10/06 в 23:52       Ответить с цитатойцитата 

WinXXXP писал:

Гг, чтобы фхг перемешивать уже дедик нужен? Boxer text editor вам в помощь ;)

что бы перемешать фхг - подошла бы и пара китайцев... но речь топика далеко не о том... я просто обратил внимание на один аспект - а именно требовательность к объему памяти отводящемуся под выполнение скрипта!

1
 



С нами с 22.10.03
Сообщения: 598
Рейтинг: 706

Ссылка на сообщениеДобавлено: 17/10/06 в 08:31       Ответить с цитатойцитата 

Cibtor писал:
Код:
$n1=rand(0,$v0);
$n2=rand(0,$v0);
Меня смущает вот этот код с не самыми быстрыми операциями. IMHO в shuffle дожно быть сделанно как-то оптимальнее icon_smile.gif

В общем, ты прав. shuffle работает в среднем в 20-30 раз быстрее этого алгоритма. Но! Если засечь время работы скрипта, то разброс времени для shuffle < 5%, для предложенного алгоритма - 20-30%.
ИМХО, и скорость, и стабильность shuffle получается в ущерб степени перемешивания. Например, сравнимые результаты будут при $v1=$v0/30;
freeuser писал:
также в качестве альтернативы можно использывать прогу EListPro

WinXXXP писал:
Гг, чтобы фхг перемешивать уже дедик нужен? Boxer text editor вам в помощь ;)

Хорошие програмки. Но я код привел в том числе и в качестве примера, вдруг кому надо его в свой скрипт встроить, например -)
Heavy писал:
списки не в 5к ФХГ, а как минимум в 500к ;)

Скорее всего их надо не просто мешать, но и: получать, обрабатывать, скачивать, куда то в каком-то формате вставлять etc. А это уже очень бы хотелось на мускуле делать. бо все эти пертубации критичны и ко времени выполнения скрипта и к надежности и т.д.
Можешь предложить что нить лучше?

0
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 17/10/06 в 21:17       Ответить с цитатойцитата 

pashtet писал:

Скорее всего их надо не просто мешать, но и: получать, обрабатывать, скачивать, куда то в каком-то формате вставлять etc. А это уже очень бы хотелось на мускуле делать. бо все эти пертубации критичны и ко времени выполнения скрипта и к надежности и т.д.
Можешь предложить что нить лучше?

"получать, обрабатывать и скачивать & etc" можно делать и не с перемешанными. насчет мускуля не понял - скачивать через мускуль хочешь или перемешивать ;) шучу... и кстати - начальный список ФХГ - впринципе тоже можно считать уже в какой-то степени перемешенным icon_smile.gif но суть не в том - на практике как правило на самом деле не требуется ничего перемешивать - зачастую достаточно перетосить не более сотни другой icon_smile.gif а если требуется постоянно из пары сотен килоФХГ выбрать случаных штук 100 - то перемешивать для этого все тоже смысла никакого не имеет... поэтому определи свою задачу - с какой целью и что требуется перемешивать... а там будет видно что тебе можно подсказать.

1
 



С нами с 22.10.03
Сообщения: 598
Рейтинг: 706

Ссылка на сообщениеДобавлено: 17/10/06 в 22:14       Ответить с цитатойцитата 

Heavy писал:
поэтому определи свою задачу - с какой целью и что требуется перемешивать... а там будет видно что тебе можно подсказать.

Да нет у меня особой задачи-то :-) Просто скрипт написал и решил поделиться, а тут вот что поднялось :-) Но если уж тебя задело file($file), то вот как средствами ПХП обратиться к произвольной строке файла подсказать можешь :-)

0
 



С нами с 22.10.03
Сообщения: 598
Рейтинг: 706

Ссылка на сообщениеДобавлено: 17/10/06 в 22:16       Ответить с цитатойцитата 

Оффтопик:
pashtet писал:
Да нет у меня особой задачи-то :-)
Разве что сигнатурку поспамить :-)

0
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 17/10/06 в 23:16       Ответить с цитатойцитата 

pashtet писал:

Да нет у меня особой задачи-то :-) Просто скрипт написал и решил поделиться, а тут вот что поднялось :-) Но если уж тебя задело file($file),

про поделится я уже написал и про "поднялось" косвенно тоже icon_smile.gif
и меня ничего особо не задело - просто оставил свой комментарий ;)
pashtet писал:
то вот как средствами ПХП обратиться к произвольной строке файла подсказать можешь :-)

средствами ПХП не скажу, да и нет смысла - т.к. не "зная" файл - на произвольную строку не "перейдешь", но один из вариантов - проиндексировать строки файла - т.е. создать например файл с индексами на строки. как ни крути он полюбому в разы и разы будет меньши ориганльного файла и ускорит выбор строк.

2
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »