反復アルゴリズム (モンテカルロ法) を作成しています。アルゴリズムは反復ごとに値を返し、値のストリームを作成します。
これらの値を分析し、1000
返された値がepsilon
.
最後の値のmax
との値の計算を実装してから、この式を使用して を計算し、:と比較することにしました。そして、この条件に達したら、反復を停止して結果を返します。min
1000
error
(max-min)/min
epsilon
error<=epsilon
最初の頭脳明晰なアイデアは、それに新しい値を使用し、
list
追加append
するたびに最後の値のmax
and値を計算することでした。min
1000
1000
次に、最後の値をこれ以上保持しても意味がないと判断しました。を思い出しましたdeque
。deque
オブジェクトの両端での追加と削除の複雑さはO(1)
.min
しかし、各反復で最後の 1000 個の値をすべて調べてとを計算する必要があるという問題は解決しませんでしたmax
。heapq
それから、モジュールがあることを思い出しました。常に最小のものを効率的に返すようにデータを保持します。しかし、最小のものと最大のものの両方が必要です。さらに1000
、アルゴリズムの最後に返された要素を保持できるように、要素の順序を保持する必要がありheapq
ます。
これらすべての考えを念頭に置いて、私はここで質問することにしました:
このタスクを最も効率的に解決するにはどうすればよいですか?