如何优化在降序模式集合中查找数字?
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
的因式分解来计算任何其他条目,但我认为这不适合实际使用。
我不确定如何最好地命名它,因为除了我自己的探索之外,我不知道它的名字。假设有一些数字序列趋向于 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
的因式分解来计算任何其他条目,但我认为这不适合实际使用。