タグ付けされた質問 「abstract-data-types」

8
すべてのデータ型は、ポインターを持つノードに要約されますか?
配列またはベクトルは単なる値のシーケンスです。リンクリストを使用して確実に実装できます。これは、次のノードへのポインタを持つ単なるノードの集まりです。 スタックとキューは、Intro CSコースで一般的に教えられる2つの抽象的なデータタイプです。クラスのどこかで、学生はリンクされたリストを基礎となるデータ構造として使用してスタックとキューを実装する必要があります。つまり、同じ「ノードのコレクション」の考え方に戻ります。 優先キューは、ヒープを使用して作成できます。ヒープは、ルートに最小値を持つツリーと考えることができます。BST、AVL、ヒープを含むあらゆる種類のツリーは、エッジで接続されたノードのコレクションと考えることができます。これらのノードは、1つのノードが別のノードを指すようにリンクされています。 すべてのデータ概念は、他の適切なノードへのポインターを持つノードのみに常に要約できるようです。そうですか?これが単純な場合、教科書は、データが単なるポインターを持つノードの集まりであると説明していないのはなぜですか?ノードからバイナリコードへの移行方法

2
抽象データ構造と具象データ構造の違いは何ですか?
私は中Iソーまで、連想配列(すなわちマップ、または辞書)とハッシュテーブルは同じ概念だと思っていたウィキペディアこと バインディングの数が非常に少ないディクショナリの場合、バインディングのリンクリストであるアソシエーションリストを使用してディクショナリを実装することは理にかなっています。... 連想配列の最も頻繁に使用される汎用実装は、ハッシュテーブルを使用したものです。バインディングの配列と、考えられる各キーを配列インデックスにマッピングするハッシュ関数を使用します。... 辞書は、バイナリ検索ツリー、または基数ツリー、試行、Judy配列、van Emde Boasツリーなどの特定のタイプのキーに特化したデータ構造に格納することもできます。... だから、私の問題は、連想配列(マップや辞書など)が抽象データ型であり、ハッシュテーブルが具体的なデータ構造であり、異なる具体的なデータ構造を使用して実装できることを知らないことだと思う同じ抽象データ型。 私の質問は 抽象データ構造と具体的なデータ構造の違いと関係は何ですか? それぞれの例(抽象および具体的なデータ構造)は何ですか?より良い。 どのような抽象データ構造を実装するためにどの具体的なデータ構造を使用できるかというリストはありますか?持っているといいでしょう。

3
Insert、Delete、MostFrequentをサポートする効率的なデータ構造
セットあり、各メンバーがデータとキーのペアであると仮定します。次の操作をサポートするデータ構造が必要です。DDDDDDD にを挿入し、D(d,k)(d,k)(d,k)DDD メンバー削除します(を見つけるために検索する必要はありません。たとえば、はメンバーを指します)。e e DeeeeeeeeeDDD MostFrequentは、が最も頻度の高いキーの1つであるようなメンバーを返します(最も頻度の高いキーは一意である必要はありません)。E 。k e y De∈De∈De \in De.keye.keye.keyDDD このデータ構造の効率的な実装は何でしょうか? 私の解決策は、キーとその周波数によって優先順位付けされた周波数のヒープと、ハッシュ関数が同じキーを持つメンバーをハッシュテーブルの同じスロットにマップするハッシュテーブルです(各部分から他へのポインターを使用)。 これにより、最初の2つの操作にが、3番目の操作(最悪の場合の実行時間)にられます。Θ (1 )Θ(lgn)Θ(lg⁡n)\Theta(\lg n)Θ(1)Θ(1)\Theta(1) より効率的な解決策があるのだろうか?(または同じ効率のよりシンプルなソリューション?)

3
抽象データ型とオブジェクトの違いは何ですか?
Programmers.SEの答えは、クック(エッセイ特徴づけるオブジェクトはのADTではありませんが言うように) オブジェクトは、代数としてではなく、型の値に対する特性関数のように動作します。オブジェクトは型の抽象化ではなく手続き型の抽​​象化を使用します ADTは通常、プログラム内で固有の実装を持っています。言語にモジュールがある場合、ADTの複数の実装を持つことは可能ですが、それらは通常相互運用できません。 クックのエッセイでは、クックの論文で使用されているセットの特定の例では、オブジェクトは特徴的な関数と見なすことができるように思えます。オブジェクトは、一般的に特徴的な機能と見なすことはできないと思います。 また、Aldritchの論文相互運用性の力:なぜオブジェクトが避けられないのか ¹が示唆する クックの定義は、本質的に動的ディスパッチをオブジェクトの最も重要な特性として識別します これとアランケイが彼が言ったときに同意する 私にとってのOOPとは、メッセージング、ローカルでの保持と状態プロセスの保護と非表示、およびすべてのものの極端な遅延バインディングのみを意味します。 ただし、Aldritchの論文に対するこれらの関連する講義スライドでは、Java クラスはADTであり、Javaインターフェースはオブジェクトであることが示唆されています。実際、インターフェース「オブジェクト」を使用すると相互運用できます(上記の箇条書きのいずれかで示されるOOPの主要機能の1つ) )。 私の質問は 特徴的な関数はオブジェクトの主要な特徴ではなく、フランクシアラーは誤解していると私は言いますか? 動的ディスパッチを使用していなくても、Javaインターフェースを介して互いに通信するデータはオブジェクトの例ですか?どうして?(私の理解は、動的ディスパッチの方がより柔軟であり、そのインターフェースは、objective-C / smalltalk / erlangスタイルのメッセージングに向けたステップであることです。) 依存関係の逆転の原則の考え方は、ADTとオブジェクトの区別に関連していますか?(WikipediaのページまたはThe Talking Objects:A Tale About Message-Oriented Programmingを参照してください)私はこの概念に不慣れですが、プログラムの「レイヤー」間にインターフェースを追加することを含むことを理解しています(Wikipediaのページ図を参照)。 必要に応じて、オブジェクトとADTの違いの他の例/説明を提供してください。 ¹ (2013年発行)本論文では、読みやすいですし、Javaの例でクックの2009年の論文をまとめたものです。この質問に答えるのではなく、少なくともそれを流し読みすることを強くお勧めします。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.