この章の質問
1.辞書の定義は何ですか
辞書は、その名前が示すように、キーコードによって照会される構造です。二分探索木も辞書として使用できますが、AVLツリー、Bツリー、赤黒木、ストレッチツリーなどのさまざまなBSTは複雑な構造と操作を持ち、理論的には挿入と削除にはO(logn)の複雑さが必要です。
ディクショナリでは、キーと値のステータスは同じであり、値による新しい呼び出しメソッドがサポートされています。辞書へのアクセスではキーコードのサイズの順序が強調されなくなったため、CBAアルゴリズムのカテゴリに属していないため、アルゴリズムの複雑さがCBAアルゴリズムの境界を破る可能性があります。値ベースのアクセスには、データオブジェクトの値とディクショナリ内の物理アドレスとの間に特定の関連付けが必要です。もちろん、アルゴリズムの時間計算量の減少は、空間計算量の増加を意味します。スキップ可能とハッシュテーブルの2つの典型的な辞書を紹介します。これは、操作の複雑さからはっきりとわかります。
CBAアルゴリズム-アソシエーションルールに基づく分類アルゴリズム
9.1.1ADTインターフェース
オペレーティング | 特徴 |
---|---|
get(key) | キーコードとしてkeyを含むエントリを検索し、成功した場合はtrueを返し、それ以外の場合はfalseを返します。 |
put(key、value) | エントリを挿入し、成功した場合はtrueを返し、それ以外の場合はfalseを返します |
remove(key) | キーコードとしてkeyを含むエントリを削除し、成功した場合はtrueを返し、それ以外の場合はfalseを返します。 |
9.1.2 Entry.h
#ifndef ENTRY_H_INCLUDED
#define ENTRY_H_INCLUDED
template<typename K, typename V> struct Entry
{
K key; //关键码
V value; //数据项
//构造函数
Entry(K k = K(), V v = V()) :key(k), value(v) {
}
Entry(const Entry<K, V>& e) :key(e.key), value(value) {
}
bool operator<(const Entry<K, V>& e);
bool operator>(const Entry<K, V>& e);
bool operator==(const Entry<K, V>& e);
bool operator!=(const Entry<K, V>& e);
};
#endif // ENTRY_H_INCLUDED
9.1.3 Dictionary.h(バランスの取れた二分探索木で実装できます)
template<typename K, typename V> struct Dictionary
{
virtual int size() const=0;//当前词条总数
virtual bool put(K,V)=0;//插入词条
virtual V*get(K k)=0;//读取词条
virtual bool remove(K k)=0;//删除词条
};