给定一堆随机数,请尝试查找均匀分布的数字

时间:2019-03-20 04:01:44

标签: python arrays numbers

问题:

我有一个数字流,它们不是作为输入均匀分布的,我需要使用上面的数字找到一个数字序列,该序列会为第一个序列返回尽可能多的数字,但要均匀分布。

示例:

stream = [1,4,9,11,12,17,18,25,30,33,34,41,44,49,57,65,73,81,89,90,97,100]

我需要找到一个序列,其中包含尽可能多的均匀分隔的数字

例如,我知道我可以找到:

  

1,9,17,25,33,41,49,57,65,75,81,89,97

全部用8分隔。

一般如何解决此问题?

1 个答案:

答案 0 :(得分:0)

def find_seq(lst):
    running = []
    done = []
    so_far = []
    for element in sorted(lst):
        still_running = []
        for run in running:
            d, m = divmod(element - run[0], run[2])
            if m == 0:
                if d == run[1]:
                    run[1] += 1
                    still_running.append(run)
                else:
                    done.append(run)
            else:
                still_running.append(run)
        running = still_running + [[previous, 2, element - previous] for previous in so_far]
        so_far.append(element)
    return max(done + running, key=lambda run: run[1])

start, length, step = find_seq([1,4,9,11,12,17,18,25,30,33,34,41,44,49,57,65,73,81,89,90,97,100])

对于每对元素,我们假设它们开始一个序列(假设长度为2)。对于任何新元素,我们检查它是否适合我们正在跟踪的序列(或更多);如果可以,但是跳过了一个值,则序列结束;否则,我们将增加序列的长度。所有序列将在输入末尾完成。然后,查看哪个序列运行时间最长就很容易了。