Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 24.04.2012, 15:43
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Gvozd,
Если я все правильно понял, то ты немного неправильно сравниваешь алгоритмы, точнее специально для таких случаев, и я создал ф-ию doCheck()
===============
Если я не так понял, то вот другой ответ: по-мойму если выпадают такие числа: Math.random()*1000|0: 21,123,765, это лучше чем: 345,376,401
===============
Я правильно понимаю, что у тебя алгоритм более лучше из-за этого:
Math.random()*(s-i) // то есть, те что уже пересортировались трогаться не будут?

===============
Никак не могу понять, что значит эта цифра:
1,2,3: 25654
??
__________________
оляля, ололо

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

Сообщение от 9xakep
Если я все правильно понял, то ты немного неправильно сравниваешь алгоритмы, точнее специально для таких случаев, и я создал ф-ию doCheck()
скорее наоборот: ты превратно понимаешь идею генерации случайного перемешивания.
из-за твоей функции doCheck() ты заведомо отсеиваешь целый класс перестановок "похожих" на исходный массив.
То есть из массива [1,2] может получится только [2,1], а [1,2] ты считаешь "неслучайным" и отбрасываешь.
Это неправильно.
Случайным является перемешивание, если вероятность любой перестановки одинакова, то есть из [1,2] должны получатся [1,2] и [2,1] каждый с вероятностью 50%
Вот именно с этой позиции я и сравниваю алгоритмы.
Сообщение от 9xakep
по-мойму если выпадают такие числа: Math.random()*1000|0: 21,123,765, это лучше чем: 345,376,401
На такой маленькой выборе нельзя характеризовать качество ГПСЧ
Сообщение от 9xakep
Я правильно понимаю, что у тебя алгоритм более лучше из-за этого:
Нет не правильно, так как ты не понял принципе моего алгоритма.
Мой алгоритм следующий:
1) берем случайное число(точнее на случайной позиции) из исходного массива, вырезая его из массива(массив при этом сдвигается чтобы заполнить пропуск)
2)вставляем это число в конец нового массива
3)возвращаемся к шаге 1, пока в исходном массиве есть хотя бы 1 элемент
4) копируем новый массив в исходный массив(просто поддержал стиль остальных функций)

Сообщение от 9xakep
Никак не могу понять, что значит эта цифра:
1,2,3: 25654
Это означает что перестановка [1,2,3] была получена 25654 раз за время теста
То есть если тестировалось 100000раз, то получается что данный результат получался в 26% случаев, что явно больше чем у остальных.
Это плохо - это свидетельствует о неравномерном распределении результата
Ответить с цитированием
  #23 (permalink)  
Старый 25.04.2012, 16:33
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

var m = [1,2,3,4,5,6,7,8,9,0], l = m.length, i = 0, x, j;
for(;i<l; i+=1) {
	j = Math.floor(Math.random()*l)%l;

	x = m[i];
	m[i] = m[j];
	m[j] = x;
};

alert(m);
__________________
лучшая rss читалка zzreader.com
Ответить с цитированием
  #24 (permalink)  
Старый 25.04.2012, 17:23
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

vflash, не используйте переменную l, она же абсолютна неотличима от единицы) Я три минуты втыкал, зачем вы умножаете на единицу.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #25 (permalink)  
Старый 25.04.2012, 20:21
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от trikadin
не используйте переменную l
Ну и если уж на то пошло, то лучше заюзать while:
while (i++ < l) {}
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #26 (permalink)  
Старый 25.04.2012, 20:44
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от B~Vladi
Ну и если уж на то пошло, то лучше заюзать while:
Дело не в этом, дело в шрифтах. В вашем цикле, например, тоже кажется, что условие - i++ меньше единицы.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #27 (permalink)  
Старый 25.04.2012, 21:35
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Ну дк я типо его код правил
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #28 (permalink)  
Старый 25.04.2012, 22:35
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Извращению нет границ!!!
Я перевел весь свой код в php(какой же он все-таки мудае*ский, js - просто ангел!!) Ну так вот:
Что принимаем:

Что должны получить:
2,5,3,1,6,4

<div id='div'></div>
<script src='data/aj_post3.js'></script>
<script>
 // отправляем запрос
function a() {
ajax_post('test-3.php', null, function (data) { document.getElementById('div').innerHTML =  data; })

}
// ответ от сервера(см. скриншот) заполняем в div.innerHTML
// редактируем запрос под наше усмотрение
function check() {



setTimeout(function () {

alert(document.getElementById('div').innerHTML)
with(document.getElementById('div')) {
innerHTML = innerHTML.replace(/\n/gim, '').replace(/Array/gim, '').replace(/\[\d+\]/gim, '').replace(/\)\d+/gim, '').replace(/\(|&gt;|=|\s+/gi, '').split('')
alert(document.getElementById('div').innerHTML)
}
},1500)

}

a()
check()


</script>

Единственный минус, который для меня даже кажется дибилизмом, так это:
setTimeout, то есть мы надеемся на то, что сервер быстро ответит, а иногда, надежды счетны, что можно сделать?
__________________
оляля, ололо
Ответить с цитированием
  #29 (permalink)  
Старый 25.04.2012, 22:46
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

9xakep,
У XMLHttpRequest'а вообще то onreadystatechange есть.
http://xmlhttprequest.ru - для начала полезно
Ответить с цитированием
  #30 (permalink)  
Старый 25.04.2012, 22:47
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от Раед
У XMLHttpRequest'а вообще то onreadystatechange есть.
А у новых версий есть onload, кстати)

9xakep, читайте Резига)
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из массива в строку Smoke332 Javascript под браузер 4 06.08.2019 08:57
как найти и удалить массив из массива? FRIE Общие вопросы Javascript 8 14.03.2011 15:48
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53
вставка элементов массива в текстовую форму по клику olezyk Общие вопросы Javascript 3 21.03.2009 22:01