用最少的查询找到升序序列的结尾

时间:2019-12-08 23:35:16

标签: algorithm math probability

假设存在一个递增的正整数序列,并且任意两个相邻整数之间的间隔都遵循一个分布,例如

[5,6,11,23,24,33,...],其中f1f2

(几何分布是指数分布的离散版本)

可以进行

Query(x)来检查x是否在此系列中。我们已经知道 min max p

问题在于如何找到本系列的 end (最后x个),并尽可能少地查询


例如,最小= 1,最大= 10000,p = 0.15

我想到的第一个想法是二进制搜索,但是,由于不确定相邻整数的间隔。我可以选择第99个分位数30作为我相信的最大间隔,并且在二进制搜索的每次搜索过程中,我将连续查询30个连续整数。在这种情况下,我进行的第一批查询是(query(5000),query(5001),...,query(5030))

我认为此方法效率不高(缓慢),并且间隔超过30的可能性很小,这不能保证二进制搜索可以正确找到 end


PS: 这是我第一次在StackOverflow上提问。很抱歉,如果我没有明确说明我的问题。随时给我任何建议,我将编辑问题。

1 个答案:

答案 0 :(得分:0)

考虑了将近3天之后,我认为找出序列结尾的最佳方法Deterministic是使用二进制搜索(使用第99个分位数作为最大间隔似乎是一个合理的选择)

假设您使用二进制搜索找到了该系列的end,然后对下一个2*interval_range进行了检查,以确保end是正确的。

如果我们掌握有关Probabilisticx范围内如何分布的信息,则可以采用某些[min,max]方法。