如何优化在降序模式集合中查找数字?

How can I optimize the finding of a number in a collection of descending patterns?

我不确定如何最好地命名它,因为除了我自己的探索之外,我不知道它的名字。假设有一些数字序列趋向于 0,如下所示:

111、102、93、84、75(减少 9 秒)

110, 100, 90, 80, 70(减少 10 秒)

109、100、91、82、73(下降 11 秒)

当下降率也降低时,左边的起始数字增加一个。

119(下降1秒)

118(下降2秒)

117(下降 3 秒)

116(下降4秒)

115(下降5秒)

114(下降 6 秒)

113(减少 7 秒)

112(下降 8 秒)

111(减少 9 秒)

110(下降 10s)

109(下降 11s)

108(下降 12s)

107(下降 13 秒)

我的问题是:给定一个数字 n,知道递减率永远不会超过,找到该数字最早出现在序列中的位置的最佳方法是什么? 13.

因此,如果 n 为 104,则答案将是 112 行,因为在 109 之前有 104 x 11s、110 x 10s、111 x 9s 等

到目前为止我尝试过的:

到目前为止,我一直在计算从开始到第一个小于零的数字的每一行,检查每一行是否出现该数字,但这似乎比它应该需要的要慢得多。同样清楚的是 119(下降 1 秒)即使不是最佳答案也总是有答案。

有没有人有任何其他想法可以使它变得更好?谢谢。

当起始编号始终为 119 并且您应该使用不同的 n 进行多次查询时,最快的方法是制作大小为 119 的 table。填写一次,您将获得一个序列起始编号步骤

table = [0]*120
for diff in range(1, 14): 
    head = 120 - diff
    for i in range(head, 0, -diff):
        table[i] = head

print(table(104))

你可以准备好了tablehere

请注意,table 值为 119 的条目与 120 有素差,我们也许可以使用 120 - n 的因式分解来计算任何其他条目,但我认为这不适合实际使用。