【问题标题】:Random number generator in arbitrary probability distribution fashion任意概率分布方式的随机数生成器
【发布时间】:2015-03-07 00:11:26
【问题描述】:

HERE 是 geeksforgeeks 解决方案。我无法理解 findCeil() 部分。 步骤 4. 在前缀数组中找到步骤 #3 中生成的随机数 Ceil 的索引。设索引为 indexc。

// Utility function to find ceiling of r in arr[l..h]
int findCeil(int arr[], int r, int l, int h)
{
    int mid;
    while (l < h)
    {
         mid = l + ((h - l) >> 1);  // Same as mid = (l+h)/2
        (r > arr[mid]) ? (l = mid + 1) : (h = mid);
    }
    return (arr[l] >= r) ? l : -1;
}

谁能解释一下正在做的事情。

【问题讨论】:

  • 您有什么特别不明白的地方吗?也许是“>>”或“?”。在不缩小查询范围的情况下,您将得到诸如“首先,它声明了一个名称为 mid... 的整数”之类的答案,而您只会重述您已经阅读的内容。
  • 对此感到抱歉。我的意思是问 findCeil 的目的是什么。 findCeil 在这里做什么。举个例子

标签: c algorithm random


【解决方案1】:

它正在执行数组的binary search 以查找数组中值大于r 的第一个元素。 wiki 文章应该很好地解释了这项技术。

编辑:Here's an animation of an example search

【讨论】:

  • 嗨,凯蒂。谢谢。你也在准备面试和/或工作吗?
  • 我今天有很多十分钟的编译,所以我在这之间花了太多时间,只是碰巧看到你的问题过去了。但我认为我们不应该用这个空间聊天。 :-)
猜你喜欢
  • 2012-04-14
  • 2011-03-07
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 2014-10-06
  • 2017-12-20
  • 2020-07-02
  • 1970-01-01
相关资源
最近更新 更多