3
最大のものを見つけることの複雑さ
以下は、私がそうであると信じるものでこれを行うための私のアルゴリズムです O(n)O(n)O(n)時間、そしてそれに対する私の証拠。私の教授はそれが実行されることに同意しませんO(n)O(n)O(n) 代わりにそれが実行されると考えています Ω(n2)Ω(n2)\Omega(n^2)時間。証明自体またはスタイルに関するコメント(つまり、私のアイデアは明確かもしれませんが、プレゼンテーションは明確ではありません)。 元の質問: 与えられた nnn 数、最大を見つける m≤nm≤nm \leq n そのうちに o(nlogn)o(nlogn)o(n \log n)。あなたは他に何も想定しないmmm。 私の答え: 最初に並べ替え mmm配列の要素。これにはO(1)O(1)O(1) 時間、これは完全に依存しているため mmmではなく nnn。 それらをリンクされたリストに格納します(ソートされた順序を維持します)。これもかかりますO(1)O(1)O(1) 時間と同じ理由で。 配列内の他のすべての要素について、リンクリストの最小要素より大きいかどうかをテストします。これにはO(n)O(n)O(n) 時間として nnn 比較を行う必要があります。 数値が実際に大きい場合は、リンクされたリストの最初の要素(最小のもの)を削除し、リストを並べ替えられた順序で保持する場所に新しい数値を挿入します。これにはO(1)O(1)O(1) それは定数(mmm)上記のリストは拡大しません。 したがって、アルゴリズムの全体的な複雑さは O(n)O(n)O(n)。 リンクされたリストとは対照的に赤黒ツリーを使用すると、定数の点でより効率的であることを知っています(定数の上限が O(m⋅log2(m))O(m⋅log2(m))O(m\cdot \log_2(m)) とは対照的に mmm (比較を容易にするために)ツリーの最下部の要素へのポインタを保持するという問題は非常に実行可能ですが、そのときは私には起こりませんでした。 私の証拠は何ですか?それを提示するより標準的な方法はありますか?