Gvozd,
Если я все правильно понял, то ты немного неправильно сравниваешь алгоритмы, точнее специально для таких случаев, и я создал ф-ию doCheck() =============== Если я не так понял, то вот другой ответ: по-мойму если выпадают такие числа: Math.random()*1000|0: 21,123,765, это лучше чем: 345,376,401 =============== Я правильно понимаю, что у тебя алгоритм более лучше из-за этого: Math.random()*(s-i) // то есть, те что уже пересортировались трогаться не будут? =============== Никак не могу понять, что значит эта цифра: 1,2,3: 25654 ?? |
Цитата:
из-за твоей функции doCheck() ты заведомо отсеиваешь целый класс перестановок "похожих" на исходный массив. То есть из массива [1,2] может получится только [2,1], а [1,2] ты считаешь "неслучайным" и отбрасываешь. Это неправильно. Случайным является перемешивание, если вероятность любой перестановки одинакова, то есть из [1,2] должны получатся [1,2] и [2,1] каждый с вероятностью 50% Вот именно с этой позиции я и сравниваю алгоритмы. Цитата:
Цитата:
Мой алгоритм следующий: 1) берем случайное число(точнее на случайной позиции) из исходного массива, вырезая его из массива(массив при этом сдвигается чтобы заполнить пропуск) 2)вставляем это число в конец нового массива 3)возвращаемся к шаге 1, пока в исходном массиве есть хотя бы 1 элемент 4) копируем новый массив в исходный массив(просто поддержал стиль остальных функций) Цитата:
То есть если тестировалось 100000раз, то получается что данный результат получался в 26% случаев, что явно больше чем у остальных. Это плохо - это свидетельствует о неравномерном распределении результата |
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); |
vflash, не используйте переменную l, она же абсолютна неотличима от единицы) Я три минуты втыкал, зачем вы умножаете на единицу.
|
Цитата:
while (i++ < l) {} |
Цитата:
|
Ну дк я типо его код правил :)
|
Извращению нет границ!!!
Я перевел весь свой код в 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(/\(|>|=|\s+/gi, '').split('') alert(document.getElementById('div').innerHTML) } },1500) } a() check() </script> Единственный минус, который для меня даже кажется дибилизмом, так это: setTimeout, то есть мы надеемся на то, что сервер быстро ответит, а иногда, надежды счетны, что можно сделать? |
9xakep,
У XMLHttpRequest'а вообще то onreadystatechange есть. http://xmlhttprequest.ru - для начала полезно |
Цитата:
9xakep, читайте Резига) |
Часовой пояс GMT +3, время: 22:53. |