史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   理想化的 抽獎亂數如何寫? (http://forum.slime.com.tw/thread290493.html)

mini 2024-11-04 05:33 PM

理想化的 抽獎亂數如何寫?
 
最近發生財政部電腦抽獎之微乎其微重複領獎事件
就想到 如果不是作弊、後門 甚麼的話
就是亂數函式寫得太爛

一般來講每一種程式語言都有提供簡單的單一指令 亂數函式
大部分雖說是以時間來當種子成員
但每次跑 相似度其實都很近
原因如何? 可能是除了 時間因子外,還有其他參考因子 差異性不大的關係
也就是只要你是同一部機器去跑
最差的情況就是 相似度極高
又如果
電腦抽獎的軟體是以呼叫 獨立的亂數外掛去運行
那就可能發生 重複中獎的情況

那理想的亂數該如何寫呢?
除了多加混和各式的參考因子外
個人覺得應該要用 100%列表法
也就是
1. 先讓軟體跑出一份所有參賽者都至少中獎過一次的序位清單
2. 再把參賽者重複的部分清除
3. 之後再打亂清單
4. 最後再用此清單跑亂數抽出得獎者

如果要避免重複,可以每抽出一位就把序位清單那位抽離
當然也可用比對方式避免重複
甚至抽離後再打亂一次
方法很多

這種方法主要的特性就在於
兼顧人人有中獎的機會
且對不懂程式的人有個易懂的交代

================================
有人會說那不如一開始就爭對名冊跑亂數打亂
再 2 > 3 > 4
當然也是可以的
只是要知道 亂數就是一種
你跑越久就會越亂的設計
如果 做一次 1,絕對會得到比此種方式還亂的結果
越偷懶跑出來的結果會越相似

ppp0600 2024-11-06 10:50 AM

之前抓一個抽獎APP,重複選擇性就很接近


所有時間均為台北時間。現在的時間是 11:48 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1