【问题标题】:Which method ensures every picture has a equal probability of being shown哪种方法可以确保每张图片都有相同的显示概率
【发布时间】:2014-05-04 07:28:01
【问题描述】:

我创建了一个程序,每次按下按钮时都会显示随机图片。每张图片都是不同的,并被分配了一个唯一的整数 ID。尽管之前已向用户显示过图片,但可以重新显示该图片。

以下代码行生成要选择的随机卡片 ID:

picCount 是唯一图片的数量。

newPic是要选择的图片ID。

var newPic = Math.floor((Math.random()*this.100)+1) % this.picCount; 

我想知道我是否应该改变

var newPic = Math.floor((Math.random()*100)+1) % this.picCount; 

var newPic = Math.floor((Math.random()*this.picCount)+1) % this.picCount; 

为了确保卡片的平均分配,因为我目前的方法比其他方法更喜欢某些卡片。

我的分析正确吗?

如何使显示的图片更加随机?

【问题讨论】:

    标签: javascript algorithm random


    【解决方案1】:

    假设 ID 是从 0 到 picCount - 1,你应该可以放

    Math.floor(Math.random()*this.picCount);
    

    实现完全均匀的分布。 Math.random() 对于这个目的来说绰绰有余;在这种情况下,伪随机性很好。

    【讨论】:

      【解决方案2】:

      这里所有的图片都有相同的概率:

      var TotalNumberOfPics = 10;
      
      // 1 to 10
      var per = Math.floor((Math.random()*TotalNumberOfPics)+1);
      

      这里是基于 picCount:

      var TotalNumberOfPics = 10;
      
      var Chances = { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 };
      
      var TotalChances = 0;
      
      for (var i=0;i<TotalNumberOfPics; i++)
          TotalChances = TotalChances + Chances[i];
      
      // 1 to TotalChances
      var per = Math.floor((Math.random()*TotalChances)+1);
      
      var selectedPic = 0;
      
      for (var selectedPic=0;selectedPic<TotalNumberOfPics; selectedPic++)
      if (per >= Chances[selectedPic])
      per = per - Chances[selectedPic];
      
      // we end up with selectedPic index in range [0,TotalNumberOfPics)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-19
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 2015-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多