可能重複コンピューティング:私は数値データの(大)配列を有する
Find the min number in all contiguous subarrays of size l of a array of size n移動最大
(サイズN
を)で最大値を実行するアレイを計算したいです固定ウィンドウサイズw
。
もっと直接的には、k >= w-1
の新しい配列out[k-w+1] = max{data[k-w+1,...,k]}
を定義できます(これはC++のように0ベースの配列を前提としています)。
N log(w)
より良い方法がありますか?
[w
に依存せずにN
に線形のものがあることを望んでいますが、移動平均のようですが、それを見つけることはできません。 N log(w)
については、例えばw
の構造上でinsert()
、delete()
、extract_max()
をlog(w)
以下にするソートされたデータ構造で管理する方法があると思います。
ありがとうございました。
私はこの回答とあなたが参照した回答の両方をアップアップしなければなりませんでした。 – Andy
ここでは、2スタックキューの実装が必ずしも最良のものではないと述べる必要があります。 REAL-TIMEアプリケーションで試してみましたが、結果は致命的でした...アプリケーションによっては、deque(double-ended queue)構造も試されるかもしれませんが、全体的にO(N)結果が得られますデキュー操作のために必ずしも償却されないO(1)である必要はない。私は、配列に実装された循環デキューを行い、うまくいきました。この質問もチェックしてください:https://stackoverflow.com/questions/12329073/find-the-min-number-in-all-contiguous-subarrays-of-size-l-of-a-array-of-size -n。 – Alan