这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
zhihupron

公司年会抽奖使用 Math.random()函数是否有失公平?

  •  
  •   zhihupron · Dec 19, 2019 · 22875 views
    This topic created in 2510 days ago, the information mentioned may be changed or developed.
    每个人有一张刮刮卡卡片。刮开后有编号,然后使用 javascript 生成随机数
    https://www.runoob.com/jsref/jsref-random.html
    Supplement 1  ·  Dec 21, 2019
    104 replies  •  2019-12-24 13:38:35 +08:00
    1  2  
    ❮ ❯
    piloots
    piloots
    Dec 19, 2019
    1
    没有
    wqzjk393
    wqzjk393
    Dec 19, 2019
    2
    使用 random 作为 random 种子,然后再套几层 random,这下总公平了吧
    runinhard
    runinhard
    Dec 19, 2019
    3
    楼主是想讨论技术问题还是公平问题
    malthae
    malthae
    Dec 19, 2019
    4
    LZ 想说程序随机并不是真正的随机
    NotFounder
    NotFounder
    Dec 19, 2019❤️2
    5
    比暗箱操作公平
    whp1473
    whp1473
    Dec 19, 2019
    6
    Java 中带有一个安全的 Random,采集随机因子生成,可以考虑用那个
    willxiang
    willxiang
    Dec 19, 2019❤️11
    7
    被抽到的人觉得公平,没抽到的人觉得不公平。
    TomatoYuyuko
    TomatoYuyuko
    Dec 19, 2019
    8
    没什么不?
    est
    est
    Dec 19, 2019
    9
    其实我觉得抢楼是最公平的。几乎没法作假。
    LZSZ
    LZSZ
    Dec 19, 2019
    10
    没人发一份最公平
    Bakumon
    Bakumon
    Dec 19, 2019❤️1
    11
    如果每人的刮刮卡也是随机抽取的,那就是绝对公平的
    marcong95
    marcong95
    Dec 19, 2019
    12
    random.org 如何?
    xiaocongcong
    xiaocongcong
    Dec 19, 2019
    13
    你是没见过领导在台上说 不在场抽奖作废,抽下一位。结果抽到部门领导不在场啪啪啪打脸,差那么几百块奖品吗。而且公司是就是做软件的,硬要去别人网站花 1000 买个抽奖软件。。。。
    justseemore
    justseemore
    Dec 19, 2019
    14
    人少的话 全员红包,最佳领奖啊
    pompeii
    pompeii
    Dec 19, 2019
    15
    具体不公平在哪?
    fuxiaohei
    fuxiaohei
    Dec 19, 2019
    16
    就几十几百个数值,谈啥分布平均。。随意就好
    Pastsong
    Pastsong
    Dec 19, 2019
    17
    @zpfhbyx #14 微信红包随机更不准,最后一个领的最多的概率大很多
    jojogl
    jojogl
    Dec 19, 2019
    18
    不是有用某个时间点的上证或者别的什么指数来做随机数的么....
    这个还不够随机那就比特币上?
    tangzh55
    tangzh55
    Dec 19, 2019❤️1
    19
    啥?还有年会,还有奖抽
    grimpil
    grimpil
    Dec 19, 2019 via Android
    20
    抽奖不助手不香么
    arvinsilm
    arvinsilm
    Dec 19, 2019
    21
    用当天股票开盘、最近一期彩票、当天 PM2.5、气温、风速等等等等,完全规避暗箱操作
    unixeno
    unixeno
    Dec 19, 2019 via Android
    22
    binux
    binux
    Dec 19, 2019
    23
    @xiaocongcong #13 给你一天时间能开发一个比别人网站更好的抽奖软件吗?如果不能,买一个又如何。
    xenme
    xenme
    Dec 19, 2019 via iPhone
    24
    号码牌按照到场顺序随机拿也可以
    q8164305
    q8164305
    Dec 19, 2019 via Android
    25
    @Bakumon 如果刮刮卡也是根据某个数值 random 的呢?最终还不是一样
    JJstyle
    JJstyle
    Dec 19, 2019 via iPhone
    26
    人手一个大奖就公平了
    Mutoo
    Mutoo
    Dec 19, 2019❤️1
    27
    import './utils';

    utils.js
    -------
    Math.random = () => 42; // rolled from my dices.
    zoffy
    zoffy
    Dec 19, 2019❤️21
    28
    你们公司的人是有本事预测 Math.random 的结果还是怎么滴?
    wdhwg001
    wdhwg001
    Dec 19, 2019 via iPhone
    29
    http://random.irb.hr/
    可以使用量子随机数发生器。
    chickenJuicer
    chickenJuicer
    Dec 19, 2019
    30
    我觉得楼主需要解释一下什么叫 公平
    shintendo
    shintendo
    Dec 19, 2019❤️4
    31
    每个员工自己想一个整数,写在 txt 里,压缩包加密码,上传,抽奖时每个人报出密码,现场解压,所有整数加在一起,对总人数取余,得中奖号码(狗头)
    yaapoo
    yaapoo
    Dec 19, 2019 via iPhone
    32
    @Pastsong 微信红包不是随机的,是有几个分布模型制作的
    sockpuppet9527
    sockpuppet9527
    Dec 19, 2019❤️1
    33
    可以参考下这篇论文 P. L'Ecuyer, "Maximally Equidistributed Combined Tausworthe Generators", Mathematics of Computation, 65, 213 (1996), 203--213.
    有内核工具的 random 是参考这篇文章写的,量足够大的情况下它能保证公平以及范围足够大。
    fio 实现 : https://github.com/axboe/fio/blob/master/lib/rand.c
    sockpuppet9527
    sockpuppet9527
    Dec 19, 2019
    34
    @wqzjk393 #2
    你只有保证嵌套的 random 函数每一个 random 函数都是公平的整个 random 函数才算公平。
    那么问题回来了,既然已经保证了其中每一个 random 函数都是公平的为什么还需要进行嵌套?
    chocotan
    chocotan
    Dec 19, 2019
    35
    实践是检验真理的唯一标准
    生成一百万个随机数,看是否是平均分布的
    519718366
    519718366
    Dec 19, 2019
    36
    公司其他部门 mou 同事:我不管,你们 IT 抽到大奖,就是抽奖程序做手脚。🌚
    whypool
    whypool
    Dec 19, 2019
    37
    比内定公平
    RBQMT
    RBQMT
    Dec 19, 2019
    38
    需要一个集装箱,在里面放若干数量的猫,每个猫上都有号码,然后开始薛定谔吧
    HeyWeGo
    HeyWeGo
    Dec 19, 2019
    40
    要不抽奖前,放一遍上面的视频,讲解下计算机随机的实现?觉得不公平的自己去搞个真随机去~
    missqso
    missqso
    Dec 19, 2019
    41
    哈哈哈 代码公平 程序正确 。除非用量子力学来生成(目前能够做到的)真随机。不然所有的办法都只是五十步笑百步,程度不同而已。年会就图个乐得了。有同事纠结的话,不如把 random 的种子设置为当天的一些特殊数据,比如与会人数啊之类的。或者干脆大屏直播摇骰子得了
    DelayNoMore
    DelayNoMore
    Dec 19, 2019❤️2
    42
    公平。就算 random 不是真随机,你拿刮刮卡的时候是真随机就可以了
    rizon
    rizon
    Dec 19, 2019
    43
    这得看刮刮卡的数字是哪来的,如果数字从 0 或 1 开始按顺序排下来,我觉得是有些尴尬的,所以刮刮卡的数字也是随机的,抽取刮刮卡也是随机的。

    简而言之就是避免两头冷门数字,让所有刮刮卡的值尽量集中在热区。
    比如你 1000 个人抽奖,那你觉得可能抽到 0 或 1000 吗。。。这不能单纯用概率说话,所以刮刮卡的数字至少应该都集中在 2 位数或 3 位数以上比较好吧。

    以上为个人见解,欢迎讨论
    x86
    x86
    Dec 19, 2019
    44
    有什么不公平的?
    rizon
    rizon
    Dec 19, 2019❤️2
    45
    @rizon #43 当然我说的是怎么让抽奖这件事更加有悬念和刺激,

    至于公平则是另一个复杂的问题了,

    这世界没有不公平的事情!!!!
    这世界没有不公平的事情!!!!
    这世界没有不公平的事情!!!!

    你的一生,你的命运就是这样分配给你的,你去讨论公平本来就没有意义,在想公平之前,先问一下,谁给你的公平?谁来维护公平,所谓的公平永远都是为了维护弱者权益所产生的概念而已。 强弱是大自然的自然存在,难道这也是不公平的吗?这是大自然的基本法则而已。


    让我想起另一件事情,我很小的时候这样想过,你本就是不存在的,只是上帝赋予了灵魂,才产生了你,把一个灵魂装在你的身体里,然后又装在另一个身体里,扔在不同的环境里,这个灵魂便在思考不同的事情,所以大家都是一个灵魂,都是一个人而已,我即众生,众生即我。

    当然,我半夜下班骑着自行车回家,看着路上豪车的时候就不这么想了。。。。。。活着,怪累,挺不得劲的
    shintendo
    shintendo
    Dec 19, 2019❤️4
    46
    被楼上逗笑了
    gloye
    gloye
    Dec 19, 2019 via iPhone
    47
    加个洗牌算法就行了
    jchencode
    jchencode
    Dec 19, 2019
    48
    这不很公平嘛
    xiaocongcong
    xiaocongcong
    Dec 19, 2019
    49
    @binux ????谁说一天的?现在 v2 也和知乎一样喜欢杠了?我都不想喷你,我们公司自己平时都有给客户的抽奖活动,每次放 iphone 抽中概率备注都是 0
    auin
    auin
    Dec 19, 2019
    50
    想起以前现场用箱子抽奖,不是公司领导就是部门负责人
    tantalu
    tantalu
    Dec 19, 2019
    51
    随机数种子是谁定的?
    Unclev21x
    Unclev21x
    Dec 19, 2019
    52
    @shintendo 本来我略过了,看你这么一说,我又回头看了下,然后我也笑😀了。
    yousabuk
    yousabuk
    Dec 19, 2019 via iPhone
    53
    都是公平的,真随机假随机都是公平的。
    yangzzzzzzzt1
    yangzzzzzzzt1
    Dec 19, 2019
    54
    srand(time(NULL))不就好了
    snw
    snw
    Dec 19, 2019 via Android
    55
    我们是用 Excel RAND()按住 F9 来抽的😂
    iamverylovely
    iamverylovely
    Dec 19, 2019
    56
    ```
    Math.random=function(){return "楼主中奖"};
    //这样公平了吧。
    ```
    iamverylovely
    iamverylovely
    Dec 19, 2019
    57
    ## 回复居然不支持 markdown
    wwwe
    wwwe
    Dec 19, 2019 via Android
    58
    shiltian
    shiltian
    Dec 19, 2019 via iPhone
    60
    我还记得我们当时年会的抽奖代码是 PE 现场开投影仪写的😂
    shiny
    shiny
    PRO
    Dec 19, 2019
    61
    抽奖现场 code review
    paranoiagu
    paranoiagu
    Dec 19, 2019 via Android
    62
    random 跳数字是真的,停下来的数字是指定的。以前客户要求的套路。
    SteveAlan
    SteveAlan
    Dec 19, 2019 via iPhone
    63
    比内定公平
    ZehaiZhang
    ZehaiZhang
    Dec 19, 2019
    64
    @tianshilei1992 现场写可还行,我觉得双方心理都平衡了
    JCZ2MkKb5S8ZX9pq
    JCZ2MkKb5S8ZX9pq
    Dec 19, 2019❤️1
    65
    楼主可能本来是想讨论 random 函数的随机问题,无奈好多人都歪楼了。

    不过我也要歪个楼。
    作为一个干过游戏企划的,想提提其它方案。

    比如有一个简单的模型,是主持方给出一个选项,比如黑或白,所有玩家站队,立定后揭晓。二分法几次之后出结果,这样既有参与感,也有悬念。

    然后尝试在这个模型上做扩展。比如把用户这头的纯随机,变成答题之类的更有参与感和主动性的方式,比如关于公司的问题,然后站队获奖。

    又或者把责任转嫁到开奖一方,比如让各部门 leader 做一些简单的比赛,玩家选 leader 站队。当然这样要看公司领导是不是愿意参与和拉得下脸。

    当然这里也有如何设计作弊的方法。但抽奖本质上是一种分配,认知上的公平和现场气氛的把握,和各种人情关系和玩家性格习惯,可能都要考虑。
    shuang
    shuang
    Dec 19, 2019
    66
    不要你觉得,要我觉得,公不公平我说了算!!!



    这不是一个技术问题
    adimn
    adimn
    Dec 19, 2019
    67
    取当天温度湿度, 计算 随机
    zqx
    zqx
    Dec 19, 2019 via Android
    68
    math 库的实现和宿主环境有关,random 通常与设备 cpu 中的时钟有关,在多线程语言中可能存在两个线程的随机种子一样的情况,但 javascript 是单线程的,因此是相对公平的。
    xuanbg
    xuanbg
    Dec 19, 2019
    69
    抽出来的号虽然不是真随机,但你拿到什么号却是比珍珠还真的真·随机数呀。事实上根本不需要摇号,抽卡前就直接公开 1-xx 号分别是什么奖都没问题。因为谁也不知道哪张纸片印着这几个号码,公平的很。
    binux
    binux
    Dec 20, 2019 via Android
    70
    @xiaocongcong #49 1000 块也就是一天的工资。怎么,你还想半天完成?
    Mutoo
    Mutoo
    Dec 20, 2019
    71
    最大的问题上面提到了,Math.random 可以被自定义函数覆盖掉,如果不配合 code review 的话,无法保证公平公正。
    FS1P7dJz
    FS1P7dJz
    Dec 20, 2019
    72
    @wqzjk393 你这个想法是错误的哦,如果不是真随机,这种嵌套反而会导致结果更加可以预测
    fatpower
    fatpower
    Dec 20, 2019❤️1
    73
    你们在纠结这个,我司 2 年没年会了,惨淡
    Arrowing
    Arrowing
    Dec 20, 2019 via Android
    74
    不要简单地用技术问题来衡量现实问题
    seenthewind
    seenthewind
    Dec 20, 2019
    75
    概率上的随机,和数学上的随机是两回事情。

    当然年会抽奖随机是不一样的第三件事情。

    作为过来人我和你说,我都试过,直接内部开源最好。
    vexjoe
    vexjoe
    Dec 20, 2019
    76
    @sockpuppet9527 有不少人都是这个思维,以为粗暴的方法可以"简单"的就解决问题,而没有深入去思考这个问题是不是真的被消灭了,不知道自己只是把问题给延后了或者变得更加复杂难以排查了。
    Eugene1024
    Eugene1024
    Dec 20, 2019
    77
    使用 random 产生随机数没啥值得质疑的,可能质疑的是你写的代码有缺陷导致每个人中奖率不一样,或则你在程序里故意设计某些人中奖率高
    hoythan
    hoythan
    PRO
    Dec 20, 2019
    78
    random 是能当场猜出来吗?
    kop1989
    kop1989
    Dec 20, 2019
    79
    严谨一些的话,可以尝试引入一些完全不相干的第三方参数,这个参数最好是无规律变动的。比如当前时间的上证指数,当前的空气质量,某个网站的日活人数,某个话题的百度指数等。
    expkzb
    expkzb
    Dec 20, 2019
    80
    在领取刮刮卡的时候已经是随机了,应该不用担心 random 函数不够随机的问题
    InkStone
    InkStone
    Dec 20, 2019
    81
    @binux 看楼主的意思,也就是一个简单的随机+UI,又没什么额外的业务需求。最大的成本都在 UI 上,我觉得半天都多了。
    blackywkl
    blackywkl
    Dec 20, 2019
    82
    javascript 的 Math.random 貌似不是均匀分布的
    Phariel
    Phariel
    Dec 20, 2019 via iPhone
    83
    每一年年尾都会有这种帖子出现

    random.org 包治百病!!!
    xiaocongcong
    xiaocongcong
    Dec 20, 2019 via iPhone
    84
    @binux 您时间可真值钱,像我们这种工资不高时间又多整天上班没什事情干的人真的是很廉价呢
    zxxufo008
    zxxufo008
    Dec 20, 2019
    85
    为什么我想到了让子弹飞
    Accelerant
    Accelerant
    Dec 20, 2019
    86
    RDRAND 了解一下
    atbility
    atbility
    Dec 20, 2019
    87
    从概率论与统计学角度来看,挺公平的
    sa2501
    sa2501
    Dec 20, 2019
    88
    差不多得了,都用上 Math.random 还不行,你看看人家用 excel 按上下贱抽奖的
    chenyu8674
    chenyu8674
    Dec 20, 2019
    89
    之前帮行政做了个页面随机切换员工照片,让领导用拍减压大回车来停止,场面效果非常不错
    Owenjia
    Owenjia
    Dec 20, 2019
    90
    建议使用 CSPRNG,现在主流浏览器都有对应实现了。
    lands
    lands
    Dec 20, 2019
    91
    @519718366 真实心理, 哈哈
    Kv_se7en
    Kv_se7en
    Dec 20, 2019
    92
    很简单啊,你运行十万次 Math.floor(Math.random() * 10) ,然后统计产生的 1- 10 这是个数字是否分布均匀就可以了。
    mostkia
    mostkia
    Dec 20, 2019
    93
    只要不重号就可以了,怕不随机多嵌套一下,然后加点佐料喽,比如引入时间、鼠标 XY 轴做种子。
    Hyeongo
    Hyeongo
    Dec 20, 2019
    94
    上家公司是在抽奖箱里抽刮刮卡,后面抽的人箱子里都没奖 了
    whalegao
    whalegao
    Dec 20, 2019 via iPhone
    95
    随机数不一定是均匀分布的 有很多是服从正太分布的
    KentY
    KentY
    Dec 20, 2019
    96
    至于真伪随机数, 以及分布问题这个网上大把文章. 我想说的是, 你们公司干嘛用程序来做啊?! 年会是集会对吧, 我们也有, 开会, 讲话, 聚餐等. 你们每人有个卡, 每个号码有个副券对应, 放箱子里, 抓阄多好!

    而且可以让普通员工上台露面抽奖, 比如 财务之星, 销售大王... 如果都是技术人员, "年度代码提交量最多", "注释最多", "后端王子", "前端皇后"..... 多有意思, 上场抽奖时候还能后面大屏幕播放一些他 /她的有关背景...
    songkeys
    songkeys
    Dec 20, 2019
    97
    其实从宇宙大爆炸开始,所有的粒子、物理效应、化学反应都遵循着定律,这个世界就不是随机的了。

    即使是你的思考,也只是身体里的一系列化学反应产生了脑神经中的电信号,也是要遵循定律的,可以说也是能预测的。自由意志或许都不存在。楼主提出这个问题,楼下的所有的人进行回复,我打下这一段字……其实都从宇宙大爆炸开始的那一刻决定好了。
    tzm41
    tzm41
    Dec 21, 2019
    98
    @songkeys 这个得取决于你相信的量子力学诠释了…如果你相信哥本哈根诠释,那世界确实是有真实随机性的。
    loading
    loading
    Dec 21, 2019 via Android
    99
    @est 抢楼更容易作假,服务端预设。
    crab
    crab
    Dec 21, 2019
    100
    随机公平了。怕的是抽奖界面真随机,但出结果是预先设定的就尴尬了。
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1410 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 239ms · UTC 22:53 · PVG 06:53 · LAX 14:53 · JFK 17:53
    ♥ Do have faith in what you're doing.