我正在使用一种速率限制我的API,如果我频繁地点击网址,则迫使我等待并重试我的请求。让我们说为了论证,我不知道具体的速率限制阈值是什么(并且即使我知道也不想将其中的一个硬编码到我的应用程序中)。
我可以进行API调用并观察它是否成功,或者回复说我已经受到速率限制的响应,然后很快再次尝试,我可以记录所有尝试之前经过的总时间,然后才能成功完成API调用。
哪些算法非常适合预测在达到速率限制后重试API调用之前需要等待的最短时间?
答案 0 :(得分:0)
使用像单面二进制搜索这样的东西。
请参阅page 134 of The Algorithm Design Manual:
现在假设我们有一个数组 A ,包含0的运行,然后是 一个无限的1的运行,并想确定的确切点 他们之间的过渡。二进制搜索阵列将提供 ⌈lgn⌉测试中的转换点,如果我们有一个绑定的 n 数组中的元素数量。在没有这样的约束的情况下,我们可以 以较大的间隔重复测试(A [1],A [2],A [4],A [8],A [16],......) 直到我们找到第一个非零值。现在我们有一个包含的窗口 目标,可以进行二进制搜索。这个单边二进制 搜索最多使用2⌈lg(p)⌉查找转换点 p 比较,无论阵列有多大。片面 每当我们查找密钥时,二进制搜索最有用 可能接近我们现在的位置。