顯示廣告
隱藏 ✕
※ 本文為 terievv 轉寄自 ptt.cc 更新時間: 2017-10-05 18:49:56
看板 Ajax
作者 art1 (人,原來不是人)
標題 [js] chrome 的 Math.random() 好固定的感覺
時間 Sun Jun 25 16:08:55 2017


  不確定這問題該在哪一板問

  同樣的程式碼在 firefox 上跑,還沒遇過兩次都一樣的結果
  今天第一次用 chrome portable 測試,不管怎麼重新整理第一筆資料永遠都是同一筆
  第二筆到第四筆則都是那幾筆資料在那邊輪流,更後面的就懶得觀察了

  function rdm () {
    return (Math.random() > 0.5 ? 1 : 0)
  }

  dataArray.sort(rdm)

  google 後有看到 google 宣稱已經修復不夠隨機的問題了,不知道問題出在哪
  把中斷點設在這兩個地方,也看不出來為什麼結果會不夠隨機
  明明資料才 125 個而已,難道會是 portable 版本的問題嗎?

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.172.203.48
※ 文章代碼(AID): #1PJs-QCT (Ajax)
※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1498378138.A.31D.html
s25g5d4: sort 不是這樣用的...1F 06/25 17:56
eight0: 我猜你想找的東西是 array shuffle2F 06/25 19:12
bibo9901: 去讀sorting的演算法 這做法是錯的3F 06/25 22:26
cybelia: 這段程式說的是... dataArray要有大約一半排在前面,4F 06/26 00:34
art1: 看了別人對 -1、0、1的解釋,改成 1: -1 就正常了5F 06/26 00:34
cybelia: 大約一半排在後面,但沒有要求這一半裡面要怎麼排啊 ?_?6F 06/26 00:35
cybelia: 這樣跟文中描述的用途好像不太一樣...
art1: 是想讓陣列裡面的資料順序不要一直重複,是不太懂為什麼在8F 06/26 00:39
art1: chrome 的結果跟 firefox 有明顯差距,只好當成sort的實作不
art1: 一樣,在找到改成 -1 的解法之前,也用了另一個打散順序的方
art1: 式,雖然那個方式的程式碼比較多一些
cybelia: js的排序沒有定義相同時怎麼辦,這樣寫如果遇到sort實作12F 06/26 00:57
cybelia: 是stable時,會蠻重覆的...
cybelia: 當然ff跟chrome當前版本(印象中)都unstable啦,但依賴實
cybelia: 作的特性不會感覺毛毛的嗎... O_O
LPH66: 用 sort 洗牌只有一個方法是正確的16F 06/26 05:40
LPH66: 就是給每個元素一個亂數值, 然後依照那個亂數值排序
LPH66: 用隨機傳比較結果的問題在於回傳結果是不一致的
LPH66: 同樣兩個元素可能這一次是 1 下一次是 -1
LPH66: 也就是不符合所謂的「全序性」, 會排出什麼是不可預料的
art1: 就是想要那個不可預料,但chrome卻一直變成可預料...21F 06/26 07:22
cybelia: 我想LPH大大的不可預料指的不是隨機吧....XD22F 06/26 19:07
xdraculax: 只有我覺得原PO的隨機想法其實沒問題嗎 @@23F 06/26 21:13
s25g5d4: 只有你24F 06/26 21:21
ssccg: 用sort不會是隨機分布,每個元素的最終位置分布的機率會受25F 06/26 21:31
ssccg: 開始位置影響,而且用sort複雜度還比較高,大有問題
ssccg: 更不用說實際上還會受到不同瀏覽器的sort實作影響
ssccg: https://bost.ocks.org/mike/shuffle/compare.html
ssccg: https://goo.gl/p0Mo Firefox也一樣不均,只是沒那麼明顯
Doing the Microsoft Shuffle: Algorithm Fail in Browser Ballot How Microsoft’s browser choice ballot fails due to a bug in their random shuffle algorithm. I show how to fix it using the Fisher-Yates shuffle. ...

 

--
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 80 
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇