我正在创建一个迭代算法(蒙特卡洛方法)。该算法在每次迭代时都会返回一个值,从而创建一个值流。
我需要分析这些值并在说1000
返回值有一些时停止算法epsilon
。
我决定实现它计算最后一个值的max
和值,然后使用这个公式计算并将它与:进行比较。如果达到此条件,则停止迭代并返回结果。min
1000
error
(max-min)/min
epsilon
error<=epsilon
第一个愚蠢的想法是对它使用 a
list
和append
新值,在每次附加后计算它的最后一个值的max
和值。min
1000
1000
然后我决定保留更多的最后一个值是没有用的。于是我想起了deque
。deque
这是一个非常好的主意,因为在对象两端添加和删除的复杂性是O(1)
. 但它并没有解决每次迭代都需要遍历所有最后 1000 个值来计算min
和的问题max
。然后我记得有
heapq
模块。它以这样一种方式保存数据,以便在每一刻都有效地返回最小的一个。但我需要最小的和最大的。此外,我需要保留元素的顺序,以便我可以保留1000
算法的最后返回元素,我不知道如何使用heapq
.
考虑到所有这些想法,我决定在这里问:
我怎样才能最有效地解决这个任务?