顯示廣告
隱藏 ✕
※ 本文為 terievv 轉寄自 ptt.cc 更新時間: 2017-10-05 18:51:51
看板 Ajax
作者 eight0 (人類)
標題 Re: [js] chrome 的 Math.random() 好固定的感覺
時間 Mon Jun 26 20:41:44 2017


這是演算法問題,和 JS 無關。這個做法是完全錯誤的,即使改成了 1 : -1 也一樣。

你給的比較方法為「比較兩元素,有 50% 機率左邊比較大,50% 機率右邊比較大」

就來試試,用在簡單的排序法上(兩兩互相比較)︰


若你有兩個元素 [A, B],A 在第一個位置的機率是 50% 嗎?

畫成樹狀圖(A:B 意思是 A, B 相比較)︰

           A:B
          ↙ ↘
        A大   B大

   位置  1     2

每次分岔都是各 50% 的機率。用你的函式,的確是可以達成
「50% 的機率 A 會在第一個」


但是若有三個元素 [A, B, C]︰

                    A:B
                   ↙ ↘
                 A大   B大
                ↙       ↘
              A:C         A:C
             ↙ ↘       ↙ ↘
           A大   C大   A大   C大

   位置     1     2     2     3

A 有 25% 的機率是第排在一個、50% 的機率是第二個、25% 的機率是第三個。

這結果應該不能稱作「夠隨機」吧?明明資料才 3 個而已。


根據排序方法的不同,畫出來的樹狀圖也不同,上面畫的樹狀圖只是直覺的把三樣元素
比較後排序,而瀏覽器所選擇的排序法也許不同,產生的結果可能更「不夠隨機」了。

如果想找更深入的討論或數學證明,可以 google: sort with random comparator


※ 引述《art1 (人,原來不是人)》之銘言:
:   google 後有看到 google 宣稱已經修復不夠隨機的問題了,不知道問題出在哪
這是指什麼不夠隨機?連結?

:   難道會是 portable 版本的問題嗎?
為什麼會覺得這問題和 portable 版本有關?是 portable 版才有的現象嗎?


另外,推文提到的「不可預料」是指「無法預料會得到什麼結果」,
換句話說,就算程式沒有按照你預想的方向走也是正常狀況(甚至當機)。

--
                                      ▏                                      
                                      ▏                                      
                                   ◣                                  
                                  ▄▆                                
                                  ◥    ◤                                
                                   ▄                                         

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.58.78
※ 文章代碼(AID): #1PKG4Bed (Ajax)
※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1498480907.A.A27.html
art1: 我都是用portable版的,沒裝過安裝版,所以懷疑是否因此影響1F 06/26 22:30
art1: https://goo.gl/jgScjd
oToToT: 大多應該都是merge或quick吧,你亂搞大小感覺他也會亂搞3F 06/26 23:49
oToToT: 順序,而且隨機性不高

--
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 53 
作者 eight0 的最新發文:
  • +4 Re: [問題] 請問new Date有辦法指定時區嗎? - Ajax 板
    作者: 36.225.186.4 (台灣) 2018-12-17 02:36:15
    timestamp 的值,是從 1970-01-01 00:00:00 (UTC) 開始計算, 每過 1ms 就增加 1。也可以說是從 1970-01-01 開始,到取得該 timestamp 的時間 …
    4F 4推
  • +10 Re: [問題] 關於setTimeout寫法 - Ajax 板
    作者: 111.250.158.95 (台灣) 2018-09-16 00:42:34
    setTimeout 接受兩種參數︰ var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]); var tim …
    11F 10推
  • +3 Re: [ js ] chrome 的 Math.random() 好固定的感覺 - Ajax 板
    作者: 36.225.58.78 (台灣) 2017-06-26 20:41:44
    這是演算法問題,和 JS 無關。這個做法是完全錯誤的,即使改成了 1 : -1 也一樣。 你給的比較方法為「比較兩元素,有 50% 機率左邊比較大,50% 機率右邊比較大」 就來試試,用在簡單的排序法 …
    4F 3推
  • +3 Re: [問題] 同步變數接異步函數返回值 callback/promise - Ajax 板
    作者: 118.166.131.180 (台灣) 2017-03-12 21:19:44
    Promise 無法解決你的問題,就如一樓所說,你必須把賦值的動作移到 callback 函數內。Promise 是一種用來解決多層 callback 的工具。 先瞭解 JavaScript 的 ca …
    15F 3推
  • +44 [ANSI] Fate/Grand Order - 間桐櫻 - C_Chat 板
    作者: 118.169.188.47 (台灣) 2017-03-02 22:08:44
    ▃▃▂▃▄▅▅▃▂ ▂▂▅▅︻︻▂ ◥ ▅▅▂ ◤ ◤◤ ▇▇ ︻︻◥▁▃▆ ▂▄▆▆▃▃ ▂▂▆▆ ▇▄▄▃︻︻ ▆▃▃ ◣ ▆▆▂▂ ▅▅ ◢◢ ◤◤ ◣ ▆▆ ▇▇ ︼︼ ◣ ▎◢ ] ▋ ▏▃ …
    49F 44推
點此顯示更多發文記錄
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇