![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
|
Цитата:
Например так: Последний раз редактировалось toFL; 06.04.2012 в 14:20. |
|
|||||
|
Ответ неверный.
http://dl.************/u/71391385/Arr...zerTestApp.swf
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. Последний раз редактировалось ChuwY; 06.04.2012 в 16:05. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Кстати, а с чего вы решили, что если вставить рандом в функцию сортировки, то он вам равномерно перемешает массив? Ну т.е. почему у каждого эл-та с номером i шанс попасть на место j одинаковый?
Почему блин по нему просто не пройтись подряд и текущий эл-т поменять местами с рандомным?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Так какая сортировка лучше?
1) public static function sortArrayByRandom(array:Array):Array { var arrayToRandom:Array=array; for (var i:uint = 0; i < arrayToRandom.length; i++) { var randomNumber:uint=int(Math.random()*arrayToRandom.length); arrayToRandom.push( arrayToRandom.splice( randomNumber, 1 )[0] ); } return arrayToRandom; } public static function sortArrayByRandom(array:Array):Array { function run (a:*, b:*) {return Math.random() > 0.5 ? -1 : 1;} return array.sort(run); } public static function sortArrayByRandom(...params):int { return [-1,0,1][int(Math.random()*3)]; } //... array.sort(ArrayTool.sortArrayByRandom); private var _currentArray : Array; public function FisherYatesRandomizer() { } public function getDescription():String{ return "Алгоритм Фишера-Йетса. Классический алгоритм для перемешивания массива. Довольно быстр и дает весьма приличное распределение"; } public function randomize(argArray : Array) : Array { if(!argArray){ return null; } _currentArray = argArray.slice(); startRandomize(); return _currentArray; } // private private function startRandomize():void{ var len : uint = _currentArray.length; while(len--){ var n : int = Math.random()*(len + 1); swap(len, n); } return ; } private function swap(x : uint, y : uint):void{ var temp : * = _currentArray[x]; _currentArray[x] = _currentArray[y]; _currentArray[y] = temp; } По тестам ChuwY я понял, что самый лучший и быстрый - FisherYatesRandomizer. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
В этом вашем FisherYatesRandomizer надо вместо len + 1 просто len и n неплохо бы uint сделать.
UPD: нет, с len всё нормально, см. ниже почему.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 08.04.2012 в 00:09. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|