9.1 词典

本章问题

1.词典的定义是什么

词典,顾名思义,就是通过关键码来查询的结构。二叉搜索树也可以作为词典,不过各种BST,如AVL树、B-树、红黑树、伸展树,结构和操作比较复杂,而且理论上插入和删除都需要O(logn)的复杂度。
在词典中,key和value的地位相同,支持新的循值访问(call by value)的方式。因为词典的访问不再强调关键码的大小次序,因此不属于CBA式算法的范畴,因而算法的复杂度可以突破CBA算法的界限。循值访问要求在词典的内部,数据对象的数值和物理地址建立某种关联。当然,算法时间复杂度的降低,意味着空间复杂度的上升。介绍两种典型的词典,跳转表(skiptable)和哈希表(hashtable),通过他们的操作复杂度,可以清晰地看到这一点。
CBA算法—基于关联规则进行分类的算法

9.1.1 ADT接口

操作 功能
get(key ) 寻找以key为关键码的词条, 成功返回ture,否则返回false
put(key,value) 插入词条,成功返回ture,否则返回false
remove(key ) 删除以key为关键码的词条, 成功返回ture,否则返回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;//删除词条
};

猜你喜欢

转载自blog.csdn.net/ZXG20000/article/details/114769713
9.1