Если не сочтёте за "не в тему"...
Знает кто, как алгоритм случайной выборки файлов осуществляется в проигрывателях, например, XMMS? Т.е. есть список файлов, нужно проиграть их (я это делаю Mplayer) в случайном порядке, не повторяясь. Вот, какой алгоритм, пооптимальней, Вы предложете/знаете?
Спасибо.
[snapback]7058[/snapback]
Самое первое, что приходит на ум. Брать случайную песню из списка, проигрывать её, брать следующую, а предыдущую удалять из списка.
А вообще то-ли в мплеере, толи в хммс1 есть финкция перемешать плейлист случайным образом.
Удаление обуславливает пустые иттерации... Поэтому, не "the best". :)
[snapback]7138[/snapback]
пустые чего??
все последующие смещаются на место предыдущих..
можно, конечно, завести БД, куда будут складываться уже проигранные песни, но это, имхо, не лучший вариант.. потому, как повторов таким способом не избежать, и не факт, что хть раз выпадет одна из последних песен в течение короткого промежутка времени.
Хотя проще всего перемешать список сразу, а потом уже слушать его последовательно.
http://www.google.ru/search?hl=ru&q=shuffle+programming (http://www.google.ru/search?hl=ru&q=shuffle+programming)
вот хотя-бы: http://www.cs.sunysb.edu/~skiena/214/lectu...ect8/lect8.html (http://www.cs.sunysb.edu/~skiena/214/lectures/lect8/lect8.html)
не гуглите ни хера... :angry:
А я наино полагал, что этот форум - место для общения... :)
Не гневитесь, жизнь - замечательна, даже елси люди "не гуглите ни хера..."
Кстати, "ни хера..." - не приличное слово, и употреблять на публике по-крайней мере неэтично.
+ у xmms есть исходники...
[snapback]7177[/snapback]
Да что Вы, правда? Какой он! - А я думал только операционная ОС Линукс такое прелоставляет... :)
В общем, будьте здоровы! :) Как говорил один мой американский друг: "Улыбайтесь!"
К stranger: Спасибо, хэш, используемый так - тоже какой-то вариант! Я тоже думал о хэше - если всё запихить в него и потом запросто удалать из него, но не придумал как их "перемешать"... Однако, хотелось бы от пустых итерраций уйти. А "походы" взад-вперёд по списку в задачи пока не ставились.
[snapback]7205[/snapback]
От пустых итераций уйти... Хм... Достаточно сложно, хотя для перемешивания списка. В приципе можно сделать например, следующее.
Список номеров хранить в контейнере со случайным доступом.
1. Разыгрываем случайное число, например, N (диаппазон его значений лучше сделать зависимым от количества мелодий в листе где-то 90-120% от n, где n количество мелодий в списке). Это число будет определять количество перестановок в списке.
2. Потом N раз разыгрываем по два случайных числа в диаппазоне от 1 до n и переставляем между собой элементы стоящие на этих позициях.
В приципе после этой операции мы получим более или менее перемешенные намера мелодий. Качество перемешивания будет зависить от того с каким процентом от n мы будем разыгрывать число перестановок (его можно в принципе задать жестко простой формулой)
Ну а потом просто выбираем по одному последовательно номера мелодий и играем их...
Да еще нужно как-то задать начальное значение счетчика, что бы при запуске одного и того же списка на воспроизведение при новом запуске программы эта последовательность не повторялась.
З.Ы. Каков был вопрос - таков был и ответ
[snapback]7238[/snapback]
OK! Принимается! :)
Теперь мыслим в перловом направлении. :)
File::Random - мы уже с Вами об этом говорили в самом начале. Смысла от него мало здесь.
OK! Принимается! :)
Теперь мыслим в перловом направлении. :)
File::Random - мы уже с Вами об этом говорили в самом начале. Смысла от него мало здесь.
[snapback]7241[/snapback]
Если уж речь зашла о перле :) Влезу и я со своим советом....
...
use List::Util qw(shuffle);
@array = shuffle(@array);
Перемешает элементы массива.
Perl Cookbook (2nd ed). Рецепт 4.18. Там же сказано, что сделать плохой алгоритм случайной перестановки просто, а хороший сложнее... :)
Причины там же объясняются.
Если уж речь зашла о перле :) Влезу и я со своим советом....
...
use List::Util qw(shuffle);
@array = shuffle(@array);
Перемешает элементы массива.
Perl Cookbook (2nd ed). Рецепт 4.18. Там же сказано, что сделать плохой алгоритм случайной перестановки просто, а хороший сложнее... :)
Причины там же объясняются.
[snapback]7254[/snapback]
Э... Точно. У меня же есть эта книга - из головы совсем вылетоло это описание :(