c - 任意概率分布方式的随机数生成器

标签 c algorithm random

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;
}

谁能解释一下正在做什么。

最佳答案

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

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

关于c - 任意概率分布方式的随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27847584/

相关文章:

关于c中的free(指针)的困惑

c - 如何在 environ 中使用 execvp/execlp

你能在堆栈上定义一个数组并将指针传递给全局变量吗?

C header : compiler specific vs library specific?

c++ - 搜索排序数组中出现次数超过一半的元素所需的最少比较

algorithm - 范围查询 - 树不包含上限和/或下限

c++ - 对于给定的n个数字序列,尽可能以最低的计算复杂度找到总和最大的子串

c++ - 在 .h 文件中声明正态分布生成器

python - 如何使这个随机文本生成器在 Python 中更高效?

java - 帮助创建随机字符串