Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 生成排除范围的随机数_Language Agnostic_Random - Fatal编程技术网

Language agnostic 生成排除范围的随机数

Language agnostic 生成排除范围的随机数,language-agnostic,random,Language Agnostic,Random,如何在排除特定范围的同时,在一定范围内生成随机数。例如,范围1-10,但不是2-4或7。 到目前为止我使用的解决方案: 生成一个随机测试,如果 在dis允许的范围内。 根据结果,输出 请拨打电话或再试一次 允许映射 范围到一个统一的范围。得到 在1和6之间随机,然后映射 返回(即6变为10) 创造 允许范围(1-1,5-6,8-10)。 随机选择一个范围(可选) 使用权重)和选定区域中的数字 射程 您的解决方案是什么?(b)使用单个范围并映射到允许的值。 (a) 速度较慢且运行时间不确定,因

如何在排除特定范围的同时,在一定范围内生成随机数。例如,范围1-10,但不是2-4或7。 到目前为止我使用的解决方案:

  • 生成一个随机测试,如果 在dis允许的范围内。 根据结果,输出 请拨打电话或再试一次
  • 允许映射 范围到一个统一的范围。得到 在1和6之间随机,然后映射 返回(即6变为10)
  • 创造 允许范围(1-1,5-6,8-10)。 随机选择一个范围(可选) 使用权重)和选定区域中的数字 射程
您的解决方案是什么?

(b)使用单个范围并映射到允许的值。

(a) 速度较慢且运行时间不确定,因为您必须等待,直到获得正确范围内的数字。如果你跳过一个大范围,你会被用水管冲洗


(c) 比(b)更复杂;如果不需要,不要增加复杂性。

这取决于排除范围的数量/大小。测试dis允许范围(您的选项1)对于小集合来说很好;不需要把简单问题的解决复杂化。解决方案3适用于更多的排除集。解决方案2是最多的工作,但可能是最正确的理论解决方案。

我通常使用上面第二号项目符号描述的技术,尤其是当允许的数字集相当小时。从统计学的角度来看,这很容易破坏结果的随机性,或者使结果偏离平坦分布


它还有一个额外的优点,即允许一次挑选(如交易卡或挑选宾果球)。。。您只需从映射中删除已选择的值。

听起来您的算法可以从轻微的重新设计中获益,这将使创建随机数隐式化,而不是使用随机数生成器显式地查找它们


例如,若你们想得到一个从1到10的随机数列,最好从一个有序数列开始,以某种方式混合,例如通过交换(我认为这是一个问题),然后一个接一个地取这些数字。

将它们映射到你们期望的总范围。然后将它们分配到各个范围

例如,如果您需要一个介于0..10和100..110之间的随机值

生成一个介于20之间的随机数。较低的10被分配到0..10范围,其余的被分配到另一个区间(或者类似的东西-我可能会偏离1..interval算术是我第一次尝试时永远不会正确的事情之一)

这背后的原因是您经常处理非完美随机生成器。如果将连续的随机数变量分布在多个维度上(例如,首先选择一个随机区间,然后在所选区间内选择一个随机区间),则这些变量的行为开始变得奇怪。这会导致非常明显的非随机行为


如果你从一个更好的随机数生成器开始,它从真正的随机源获取数据,那么你可能会浪费宝贵的随机位。如果你每秒只做一次,这可能不是问题。如果您经常这样做,尽管您的程序可能会停止,因为纯随机源必须赶上您的随机位消耗

我担心,在两个范围中的每一个范围中都会有一个值(范围0..10中的11个值;同样,范围100..110)。(c)也必须使用加权范围。否则,考虑:0..10,20..80,90..100;有三个范围,但如果选择范围的可能性相同,那么您将看到非常偏斜的结果。是的,如果分布很重要(因此我声明可以选择使用权重)。我也知道每种方法的缺点——我想知道是否有更优雅的解决方案:)