![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
ветеран форума
|
Собственно интересны разные варианты и их оптимальность.
Например есть колода карт, нужно ее перемешать, или есть некоторое количество вопросов в нужно выводить их в случайном порядке... и т.д. Я понимаю, что можно постоянно генерировать случайное число из заданного диапазона и сравнивать с уже полученными ранее, если оно уникально - вычисляем следующее. Но скорее всего уже есть более оптимальные алгоритмы, может кто сталкивался? Поделитесь линками или общим принципом, плиз.
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 1,195
|
Заводим массив, заполняем индексами в нормальном порядке. В цикле меняем пары случайно выбранных индексов нужное количество раз.
|
|
|||||
|
блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
|
{ var array:Array = ["девятка", "десятка", "валет", "дама", "король", "туз"]; array.sort(random) } function random (a:*, b:*):int { return (Math.random() - 0.5)*100; } Последний раз редактировалось Яски; 31.05.2009 в 22:05. |
|
|||||
|
ветеран форума
|
Всем спасибо
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
|
О(n^2)
![]() |
|
|||||
|
.
|
типа "O-сложность алгоритмов"
|
|
|||||
|
блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
|
неа O(n)
Добавлено через 24 минуты И еще один алгоритм до кучи, этот хорош, если есть объекты разной степени важности(приоритета) их нужно упорядочить, но при этом внести некоторую случайность. { var array:Array = [new Card("десять"), new Card("валет", 0.2), new Card("туз", 0.5)]; for each (var card:Card in array) { // Может быть любая другая функция, // все зависит от того, как сильно приоритет влияет на выбор. card.sortPriority = Math.random() + card.priority; } array.sortOn("sortPriority", Array.DESCENDING | Array.NUMERIC); } class Card { public var name:String; public var priority:Number; public var sortPriority:Number; public function Card(name:String, priority:Number = 0) { this.name = name; this.priority = priority; } } Последний раз редактировалось Яски; 01.06.2009 в 20:23. |
|
|||||
|
Только сам splice уже имеет O(n), потому все варианты со splice'ом квадратичные. Варианты с сортировкой должны быть побыстрее, но сама сортировка это O(n*log(n)). Что-то мне подсказывает что нормальный алгоритм должен иметь линейную сложность.
Добавлено через 15 минут Сам алгоритм, в принципе, очевиден. Просто нужен random, выдающий _неповторяющиеся_ числа от 0, до arr.length. |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|