Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.04.2012, 14:07
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 1  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Цитата:
А еще эта функция дает довольно некачественное распределение.
Добавь туда возврат -1,0,1 и будет тебе счастье.
Например так:
Код AS3:
public static function sortArrayByRandom(...params):int {
	return [-1,0,1][int(Math.random()*3)];
}
//...
array.sort(ArrayTool.sortArrayByRandom);


Последний раз редактировалось toFL; 06.04.2012 в 14:20.
Старый 06.04.2012, 15:25
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 2  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Ответ неверный.
http://dl.************/u/71391385/Arr...zerTestApp.swf
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.


Последний раз редактировалось ChuwY; 06.04.2012 в 16:05.
Старый 06.04.2012, 15:45
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 3  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Цитата:
Ответ неверный.
Шо? Ссылка не работает.

Старый 06.04.2012, 16:05
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 4  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
фикс.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 06.04.2012, 16:39
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Кстати, а с чего вы решили, что если вставить рандом в функцию сортировки, то он вам равномерно перемешает массив? Ну т.е. почему у каждого эл-та с номером i шанс попасть на место j одинаковый?
Почему блин по нему просто не пройтись подряд и текущий эл-т поменять местами с рандомным?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 06.04.2012, 16:50
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 6  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Цитата:
фикс.
Исходники в студию.

Старый 06.04.2012, 17:03
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 7  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Исходники в студии
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 07.04.2012, 13:59
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 8  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Так какая сортировка лучше?
1)
Код AS3:
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;
}
2)
Код AS3:
public static function sortArrayByRandom(array:Array):Array {
	function run (a:*, b:*) {return Math.random() > 0.5 ? -1 : 1;}
	return array.sort(run);
}
3)
Код AS3:
public static function sortArrayByRandom(...params):int {
	return [-1,0,1][int(Math.random()*3)];
}
//...
array.sort(ArrayTool.sortArrayByRandom);
4)
Код AS3:
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;
		}
Добавлено через 11 минут
По тестам ChuwY я понял, что самый лучший и быстрый - FisherYatesRandomizer.

Старый 07.04.2012, 14:16
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 9  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
В этом вашем FisherYatesRandomizer надо вместо len + 1 просто len и n неплохо бы uint сделать.
UPD: нет, с len всё нормально, см. ниже почему.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 08.04.2012 в 00:09.
Старый 07.04.2012, 16:16
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 10  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Цитата:
Сообщение от -De- Посмотреть сообщение
n неплохо бы uint сделать.
Спасибо. Исправил. Бес попутал.

Цитата:
Сообщение от -De- Посмотреть сообщение
В этом вашем FisherYatesRandomizer надо вместо len + 1 просто len
А вот тут вас бес попутал.

len при первом же вхождении в цикл на самом деле (_currentArray.length - 1), а Math.random() единицу не возвращает.
Поэтому, чтобы захватить крайний элемент, прибавляем единицу.

Добавлено через 45 часов 21 минуту
Тк тоже сел писать свой твин, решил посмотреть все, что под руку попадутся.

Первым же делом нарвался на неприятную ошибку вот здесь:

Код AS3:
*
* CALL
*/
private function callFunction(func:String):void {
  var arr:Array=this['on'+func+'Params'];
  if(arr){
    if(arr[1].length>0)
      if(arr[2]==true) arr[0](arr[1], this);
      else arr[0](arr[1]);
    else
      if(arr[2]==true) arr[0](this);
      else arr[0]();
  }
}
Кроме того, что прочитать невозможно, неверно вызываете коллбеки.
Советую почитать про apply/call.

А если вы и собираетесь передавать массив, то лучше об этом сообщить в документации.
"дополнительный параметр" тоже невнятный.
Кстати, вот список тегов для асдоков.
Примеры лучше оформлять с тегом code хотя бы. Или атрибутом example.

Добавлено через 46 часов 19 минут
К чести создателя, работает довольно шустро.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.


Последний раз редактировалось ChuwY; 09.04.2012 в 13:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:49.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.