質問
に応じて Wikipedia記事のリンクリスト, 挿入のリンクリストはO(1)です。ってると思いますO(n)なお探しのノードが終わりに近です。
この分析をしていないのノードの操作が必要)の挿入か。
編集:
リンクリストしてarrays.挿入した素子では、特定のポイントのリストは一定時間操作が挿入配列が必要な移動の半分の要素です。
上記の文は誤解を招く。正しい場合は私は間違っているのは、私の結論は:
配列:
- 発見のポイント挿入-削除につO(1)
- の挿入-削除にはO(n)
リンクリスト:
- 発見のポイント挿入、削除にはO(n)
- の挿入-削除につO(1)
と思い、みんなの位置が残されているのであれば何らかのポインタでのヘッド、テールの場合).でないとか言っちゃいうリンクリストは常にビー配列を挿入、削除します。
解決
あなたは正しい、記事は<!> quot; Indexing <!> quot;個別の操作として。したがって、挿入自体はO(1)ですが、その中間ノードに到達するのはO(n)です。
他のヒント
挿入自体はO(1)です。ノード検出はO(n)です。
いいえ、挿入することを決定した場合、すでにリストを繰り返し処理している最中であるとみなされます。
リンクリストの操作は、一般的な<!> quot; list <!> quot;として実際に処理されるのではなく、ノードのコレクションとして処理されることがよくあります。ノード自体を次のように考えてください。メインループの反復子。そのため、リストをざっと見ていくと、ビジネスロジックの一部として、新しいノードを追加(または古いノードを削除)する必要があることに気づきます。 1回の反復で50個のノードを追加できます。これらの各ノードは、隣接する2つのノードのリンクを解除して新しいノードを挿入する時間であるO(1)です。
編集:男、2番目の段落を入力すると、最初の応答者である代わりに突然、5番目の応答者ではなく最初の4と同じことを言っています!
利用目的の比較と配列りますが、これはまさにこの図を見ていただきたいのですが、でO(1)などを移動すべての項目の後に新しいノードです。
そのような仮だき,誠にありがとうございポインタをノード、またはそのポインタであるようにします。つまり、問題の記述:"指定されたノードX, は、どういうコード挿入後、このノード?" きの開始に挿入します。
リンクリストへの挿入は、リスト全体での反復とは異なります。アイテムの位置を特定するのではなく、ポインターをリセットしてアイテムをそこに配置します。フロントエンドの近くに挿入するか、エンドの近くに挿入するかは関係ありませんが、挿入にはポインタの再割り当てが必要です。もちろん、それがどのように実装されたかに依存しますが、それがリストの強みです。簡単に挿入できます。インデックスを介したアクセスは、配列が輝く場所です。ただし、リストの場合、n番目のアイテムを見つけるのは通常O(n)です。少なくともそれは学校で覚えていることです。
ループを伴わないため。
挿入は次のようなものです:
- 要素を挿入
- 前へのリンク
- 次へのリンク
- 完了
これは常に一定の時間です。
その結果、n個の要素を次々に挿入するとO(n)になります。
この分析は、ノード操作の検出(必須ではありません)および挿入自体の説明ではないのですか?
わかりました。特定のポイントでの挿入では、挿入するアイテムへのポインターが既に保持されていることを前提としています。
InsertItem(item * newItem, item * afterItem)
挿入先はO(1)で、どこに配置するかがわかれば。
いいえ、検索の対象にはなりません。ただし、リストの中央にあるアイテムへのポインターを既に保持している場合、そのポイントに挿入するとO(1)になります。
検索する必要がある場合、検索時間を追加する必要があります。O(n)である必要があります。
この記事では、配列とリストの比較について説明しています。配列とリストの両方の挿入位置の検索はO(N)であるため、この記事ではそれを無視します。
O(1)は、新しいアイテムを挿入するアイテムがあるという事実に依存しています。 (前または後)。 <!>#180; tをしないと、<!>#180; s O(n)そのアイテムを見つける必要があるためです。
これは、O()表記で数えるために選択したものの単なる例だと思います。カウントする通常の操作を挿入する場合は、コピー操作です。配列の場合、真ん中に挿入すると、メモリ内の場所の上にあるすべてのものがコピーされます。リンクリストでは、これは2つのポインターの設定になります。何を挿入しても場所を見つける必要があります。
リンクリストの操作後にO(1)になった後に挿入するノードの参照がある場合。
配列の場合、すべての結果ノードを移動する必要があるため、O(n)のままです。
最も一般的なケースは、おそらくリストの先頭または末尾に挿入することです(リストの末尾を見つけるのに時間がかからない場合があります)。
配列の先頭または末尾にアイテムを挿入することとは対照的です(末尾にある場合は配列のサイズを変更し、先頭にある場合はすべての要素のサイズを変更して移動する必要があります)。