【问题标题】:How to calculate the k-th smallest number of a linear congruential generator如何计算线性同余生成器的第 k 个最小数
【发布时间】:2013-10-11 13:07:42
【问题描述】:

根据Wikipedia,线性同余生成器由以下递归关系定义:

X(n) = {a.X(n-1) + c} mod m

其中0 < m、0 <= a < m、0 <= c < m、0 <= X(0) < m 是指定生成器的整数常量。

如果给定a、c、m、X(0)和n的值,我可以确定k的最小值(1 <= k <= n)集合@ 987654334@非常快? (比O(n) 快——基于排序算法)

【问题讨论】:

  • 如果LCG设计正确,它的范围是{0..m},所以k-smallest X(i)大概是k-1。
  • 这个问题也适合 math.stackexchange.com。
  • @RBarryYoung:对于给定的n 不小于期间。
  • 是否允许预先计算任何东西,给定固定参数?
  • @YvesDaoust 你可能会认为a,c,m,n <= 10^9,因为它足够大..

标签: algorithm math


【解决方案1】:

假设您在生成过程中没有存储k 最低的项目...

如果(n >= m) 和常量满足整个周期的条件 (ref here),那么k-th 最小的项将是k-1。

如果(n >= m) 和常量不符合条件或(n < m),那么您需要进行线性搜索,如果k-迄今为止最低的k-1 可以终止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2013-10-09
    • 1970-01-01
    • 2014-05-17
    • 2019-11-20
    • 2016-09-25
    • 1970-01-01
    相关资源
    最近更新 更多