Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 26.12.2015, 14:33
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Ув. рони,
Ув. Deff,
объясните пожалуйста чем плох код, предложенный Ruslan_xDD в этом посте?
То, что он предложил легко читается и очевидное решение. А ваши решения выглядят со стороны как навороты. Только без обид. Просто любопытно
Ответить с цитированием
  #12 (permalink)  
Старый 26.12.2015, 14:59
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от EmperioAf
Просто любопытно
1. Есть некая соревновательсть в решениях, типично в топиках коротких скриптов и кодов, и достаточно нередко используемых
Автор уже доволен, но применяемый код мон вылизать.
Где-то был даж спец. топик с такими скриптами-задачками
==================================
К примеру у нас с Рони как то была задача протестить код на миллионе повторов. При неотлизанном коде - это часы...
К примеру тот жа Math.random() на массиве в 10 элементов вызывается средне=статистически при таких функциях неповторяющейся выборки 29 раз - на 20 - 70 при дальнейшем увеличении массива растёт в какой-то степени(посколь попадает в уже выбранные значения)
Т.е. время на коротких массивах растёт вдвое-втрое

Последний раз редактировалось Deff, 27.12.2015 в 00:22.
Ответить с цитированием
  #13 (permalink)  
Старый 26.12.2015, 15:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Deff
Или ты не об этом ?
посмотри что выдаёт функция indRand
Ответить с цитированием
  #14 (permalink)  
Старый 26.12.2015, 15:19
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от рони
посмотри что выдаёт функция indRand
Тещу в Опере и Мозилле - всё в норме... (Сделай красивый скриншот плиз.. мож я не выспался...
======================
Ответить с цитированием
  #15 (permalink)  
Старый 26.12.2015, 15:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

EmperioAf,
код Ruslan_xDD генерирует числа Math.random более 20 раз чтоб избежать повторов, мой код генерирует только 20 раз и без повторов.
Ответить с цитированием
  #16 (permalink)  
Старый 26.12.2015, 15:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Deff,
в консоли посмотри
Ответить с цитированием
  #17 (permalink)  
Старый 26.12.2015, 15:57
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

рони,
Ок
================
// Тест средне-статистического числа повторов Math.random() на создание неповторяющегося массива из 1000 элементов
function indexRandom(lng){
    var numRnd = 0;
     var a = {},i,out=[],n=0; 
     while (n!=lng){
       i = Math.floor(lng*Math.random()); numRnd++;
       if(typeof(a[i])=='undefined'){
         a[i]=i; out.push(i);
         n++;
       }
     }
    return numRnd;
  }
function repeat(n){
  var N=0;n2=n
  while (--n2){
     N+= indexRandom(1000);
  }
  return N/n;
}
alert('N='+repeat(10000))


// Тест средне-статистического числа повторов Math.random() на создание неповторяющегося массива из 20 элементов
function indexRandom(lng){
    var numRnd = 0;
     var a = {},i,out=[],n=0; 
     while (n!=lng){
       i = Math.floor(lng*Math.random()); numRnd++;
       if(typeof(a[i])=='undefined'){
         a[i]=i; out.push(i);
         n++;
       }
     }
    return numRnd;
  }
function repeat(n){
  var N=0;n2=n
  while (--n2){
     N+= indexRandom(20);
  }
  return N/n;
}
alert('N='+repeat(10000))


// Тест средне-статистического числа повторов Math.random() на создание неповторяющегося массива из 10 элементов
function indexRandom(lng){
    var numRnd = 0;
     var a = {},i,out=[],n=0; 
     while (n!=lng){
       i = Math.floor(lng*Math.random()); numRnd++;
       if(typeof(a[i])=='undefined'){
         a[i]=i; out.push(i);
         n++;
       }
     }
    return numRnd;
  }
function repeat(n){
  var N=0;n2=n
  while (--n2){
     N+= indexRandom(10);
  }
  return N/n;
}
alert('N='+repeat(10000))

=======================
Зы: Примерная апроксимация кол-ва обращений к Math.random() по четырём точкам:
n - длина массива
x = n+n^1.26

Последний раз редактировалось Deff, 26.12.2015 в 20:20.
Ответить с цитированием
  #18 (permalink)  
Старый 26.12.2015, 16:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Deff
while (n--) out.push(a.splice(Math.floor((n+1)*Math.random()), 1)[0]);
Ответить с цитированием
  #19 (permalink)  
Старый 26.12.2015, 16:21
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

рони,
СПС, - я понял, тут отвлекают(отхожу от компа + возгорелся протестить: А скок реально рандомов лишних ? ) поэтому долго с правкой того поста
Ответить с цитированием
  #20 (permalink)  
Старый 26.12.2015, 16:31
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

рони,
А эту феньку видел ?
function abc(arr){
  var a = arr.splice(0,3);
}

var arr = [1,2,3];
abc(arr);
alert('>'+arr+'<')


function abc(arr){
  function abcd(ar2){
     var a = ar2.splice(0,3);
  }
  abcd(arr)
}

var arr = [1,2,3];
abc(arr);
alert('>'+arr+'<')


function abc(arr){
  arr=[];
}

var arr = [1,2,3];
abc(arr);
alert('>'+arr+'<')

Последний раз редактировалось Deff, 26.12.2015 в 16:49.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор случайных чисел (помогите с задачкой) GentleGoose Общие вопросы Javascript 2 28.07.2014 12:53
НОД более чем 2-х чисел Demath Общие вопросы Javascript 4 06.01.2013 05:27
Проблема с отбором чисел из массива mindkilla Общие вопросы Javascript 10 05.11.2012 12:03
Генератор случайных чисел с возможностью ввода диапазона. Как сделать? Sovereign Общие вопросы Javascript 3 10.06.2011 08:34
Работа с последовательностью натуральных чисел Stillife Общие вопросы Javascript 1 18.05.2011 20:03