Показать сообщение отдельно
  #12 (permalink)  
Старый 24.04.2012, 10:07
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от 9xakep
Что делает функция test?
тестирует функцию сортировки массива, переданную как параметр, на предмет равномерности распределения(каждый вариант массива на выходе должен получатся примерно с той же частотой, как и любой другой вариант)
Для наглядности и простоты я этот критерий упростил, до сравнения частоты самого встречающегося и редко встречающегося результата

Если более подробно, то пожалуйста:
function test(func) {
	//сюда помещаем количество выпадений того или иного варианта результата
	test_result = {};
	for(var i = 0; i < test_count; i++) {
		var arr = array.slice();
		func(arr);
		if(test_result[arr] == undefined) {
			test_result[arr] = 0;
		}
		//увеличиваем счетчик данного результата
		test_result[arr]++;
	}
	//делаем из объекта test_result массив пар "ключ-значение", для того чтобы можно было отсортировать по ключу
	//сделано из соображений читаемости
	var test_list = [];
	for(var i in test_result) {
		test_list.push([i,test_result[i]]);//ложим пару "ключ-значение"
	}
	min = max = test_result[i];//иницииализируем минимальное и максимальное значение значением последнего элемента
	test_list.sort(function(a,b) {//сортируем test_list по "ключу"
		//попутно определяем максимальное и минимальное значение
		min = Math.min(min, a[1], b[1]);
		max = Math.max(max, a[1], b[1]);
		return a[0] < b[0] ? -1 : 1;
	});
	//выводим упорядочненный массив пар "ключ-значение"
	for(var i =0; i< test_list.length; i++) {
		console.log(test_list[i][0] + ': ' + test_list[i][1]);
	}
	//выводим минимальное и максимальное встреченное значение.
	//Чем они ближе, тем лучше данный алгоритм случайно сортировки.
	//Критерий конечно сильно упрощен, но для задач не связанных с криптографией его вполне можно взять
	console.log([min, max]);
}
Ответить с цитированием