かなりシンプルだと思いますが、私は自分自身を悩ますようです。2つのネストされたループの単純なアルゴリズムの複雑さ
次のどれが複雑ですか?
// let's say that Q has M initial items
while Q not empty
v <- Q.getFirst
for each z in v // here, every v cannot have more than 3 z's
...
O(1) operations here
...
Q.insert(z)
end
end
この現象が発生する回数、ある時点でVのは持っていない場合、依存するよりZの
が複雑Oです(のはこの数Nを呼びましょう)(M×N個^ 2)またはI 「間違ってる?これは、M個の親ノードを持つツリーを持つようなものであり、各ノードは最大でも3個の子を持つことができます。 Nはノードの総数です。
あなた 'Q.getFirst'とあなたの' Q.insert(Z) 'の複雑さとは何かを理解して助けましたか? –
アレイ、キュー、またはスタックの場合はそれほど重要ではないので、配列を選択します。 O(1)を挿入し、O(n)を挿入する場合 – foxTox
hm ..スタックの最後に何かを挿入して最初に何かを取得すれば、FIFO関数に似ています。複雑さはO(1)とみなされるか、例えば両方の配列にあるC++実装は、O(n)の複雑さとみなされますか? – foxTox