タグ付けされた質問 「deque」

7
STLの両端キューとは実際には何ですか?
OverаэтотвопросестьответынаStack Overflowнарусском:Особенностьразмещениеэлементоввstd :: deque 私はSTLコンテナーを見て、それらが実際に何であるか(つまり、使用されるデータ構造)を理解しようとしていましたが、両端キューによって停止しました。一定の時間ですが、演算子[]が一定の時間で行われるという約束に困っています。リンクされたリストでは、任意のアクセスはO(n)であるべきですよね? そして、それが動的配列である場合、どのようにして一定の時間で要素を追加できますか?再割り当てが発生する可能性があり、O(1)はvectorの場合と同様に償却コストであることに注意してください。 したがって、一定の時間で任意のアクセスを可能にし、同時に新しい大きな場所に移動する必要がないこの構造は何なのかと思います。
192 c++  stl  deque 

8
ArrayDequeがLinkedListよりも優れている理由
どちらもDequeインターフェースを実装しているため、JavaのArrayDequeがJavaのLinkedListより優れている理由を理解しようとしています。 コードでArrayDequeを使用している人はほとんど見ません。誰かがArrayDequeの実装方法にもっと光を当てれば、それは役に立ちます。 理解できれば、もっと自信を持って使えます。ヘッドリファレンスとテールリファレンスの管理方法について、JDK実装を明確に理解できませんでした。



5
Pythonの両端キューはどのように実装され、リストよりも悪いのはいつですか?
私は最近、コードをより効率的にするために、Pythonでさまざまなデータ構造がどのように実装されているかを調査するようになりました。リストと両端キューがどのように機能するかを調査したところ、シフトとシフト解除を行うと、リストのO(n)から両端キューのO(1)に時間を短縮したいときにメリットが得られることがわかりました(リストは固定長配列として実装されています。前面に何かを挿入するたびに完全にコピーされるなど...)。私が見つけられないように見えるのは、dequeがどのように実装されているか、およびその欠点とリストの詳細です。誰かがこれらの2つの質問について私に教えてもらえますか?
85 python  deque 

2
std :: dequeは実際には最初に一定時間の挿入を持っていますか?
標準は言う: 両端キューは、ランダムアクセス反復子(27.2.7)をサポートするシーケンスコンテナーです。さらに、最初または最後の一定時間の挿入および消去操作をサポートします。途中で挿入と消去には線形時間がかかります。 ただし、同じ条項にも次のように記載されています。 この条項のすべての複雑さの要件は、含まれているオブジェクトに対する操作の数に関してのみ記述されています。[例:vector<vector<int>>含まれるそれぞれのコピーの複雑さvector<int>自体は線形であるにもかかわらず、タイプのコピーコンストラクターは線形の複雑さを持っています。—最後の例] これは、たとえば両端キューに既に存在するsと挿入される新しいオブジェクトに対して一定数以上の操作を実行しない限り、最初の挿入にdeque<int>線形時間がかかることを意味するのではありませんか?intint たとえば、「サイズKのベクターのベクター」を使用して両端キューを実装するとします。最初にK回挿入するたびに、新しいサイズKのベクトルを最初に追加する必要があるため、他のすべてのサイズKのベクトルを移動する必要があります。これは、最初の挿入の時間の複雑さが償却されたO(N / K)であることを意味します。ここで、Nは要素の総数ですが、Kは定数なので、これは単なるO(N)です。しかし、これは規格で許可されているようです。サイズKのベクトルを移動してもその要素は移動せず、「複雑さの要件」は含まれているintオブジェクトの「操作の数に関してのみ述べられている」ためです。 規格はこれを本当に許可していますか?それとも、より厳しい要件、つまり、含まれているオブジェクトに対する一定数の操作に加えて一定の追加時間があると解釈する必要がありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.