查找

  查找表:由同一类型的数据元素或记录构成的集合。关键字:用来标识一个数据元素某个数据项的值。主关键字:可以唯一的标识一个记录的关键字,次关键字:用以识别若干个记录的关键字是次关键字。

查找表:静态查找表:仅作查询(检索)操作。动态查找表:作插入和删除操作的查找表。顺序查找算法改进:将带查找值放入表头(哨兵):可免去查找过程中每一部都要检测是否查找完毕(i的值是否等于0)、

顺序查找的特点:算法简单,时间效率太低。折半查找的特点:效率比顺序查找高,只适用于有序表,且限于顺序存储结构。

分块查找(索引顺序查找表):将表分成几块,且表或者有序,或者分块有序;若j>i,则第j块中所有记录的关键字均大于第i块中的最大关键字。分块查找的特点:优点:插入和删除比较容易无需进行大量移动。

缺点:要增加一个索引表的存储空间并对初始索引表进行排序运算。适用情况:对线性表既要快速查找又要经常动态变化。

  树表的查找:二叉排序树:又称二叉搜素树,二叉查找树的定义:若其左子树非空,左子树上的所有结点的值均小于等于根结点的值;若其右子树非空,则右子树上所有的结点的值均大于等于根结点的值。其左子树和右子树本身又各是一颗二叉排序树。二叉排序树的性质:中序遍历非空的二叉排序树所得到的数据元素序列是一个按关键字排序的递增有序序列。二叉排序树的操作:一个无序序列可通过构造二叉排序树而变成一个有序序列,构造树的过程就是对无序序列进行排序的过程。平衡二叉树:对于一颗有n个结点的AVL树(平衡二叉排序树),其高度保持在O(log2n)的数量级,ASL(平均查找长度)也保持在O(log2n)数量级。AVL树的特点:左子树和右子树的高度之差绝对值小于等于1,左子树和右子树也是平衡二叉排序树。

  散列表:记录的存储位置与关键字之间存在对应关系,对应关系--hash函数,优点:查找效率高。缺点:空间效率低。术语:冲突:不同的关键码映射到同一个散列地址。同义词:具有相同函数值的多个关键字。

散列函数的构造方法:直接定址法:以关键字key的某个线性函数值为散列地址,不会产生冲突。缺点:要占用连续地址空间,空间效率低。除留余数法(%表长)。

  解决冲突:开放定址法:有冲突时就去寻找下一个空的散列地址,只要散列表足够大空的散列地址总能找到,并将元素存入,常用方法:线性探测法:di为1,2,3...;二次探测法:di为二次序列;伪随机探测法:di为伪随机数序列。链地址法(拉链法):相同散列地址的记录链成一单链表,然后用一个数组将这么多单链表的表头指针存储起来,形成一个动态的结构。优点:没有聚集现象。

 

posted @ 2021-08-19 19:52  smilecomzyb  阅读(243)  评论(0编辑  收藏  举报