任意概率分布方式的随机数发生器

时间:2015-01-08 18:59:32

标签: 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;
}

有人可以解释一下正在做什么。

1 个答案:

答案 0 :(得分:1)

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

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