第七次日志
<查找>
列表:由同一类型的数据元素(或记录)构成的集合,可利用任意数据结构实现。
关键字:数据元素的某个数据项的值,用它可以标识列表中的一个或一组数据元素。
主关键字:惟一标识列表中的一个数据元素。
次关键字:不是主关键字,就为次关键字。
当数据元素仅有一个数据项时,数据元素的值就是关键字。
平均查找长度(ASL):为确定数据元素在列表中的位置,需和给定值进行比较的关键字个数的期望值,称为查找算法在查找成功时的平均查找长度。
假设查找每个数据元素的概率相等,即Pi=1/n
• 则顺序查找算法的平均查找长度为:
ASL=11/n+21/n+…+n1/n
=(1+2+…+n)1/n
=(n+1)/2
假设列表长度为n,从最后一个元素开始找起:
• 查找第 i 个元素,需进行(n-i+1)次比较
• 若顺序查找法从第一个元素开始找起,则平均
查找长度为((n+1)/2,一样! )
二叉排序树(二叉查找树)
定义:二叉排序树或者是一棵空树,或者是具有如下性质的二叉树:
若它的左子树非空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树非空,则右子树上所有结点的值均大于(或大于等于)它的根结点的值;
它的左、右子树也分别为二叉排序树。
结点的平衡因子--Balance Factor
• 定义:结点左子树深度与右子树深度之差。
• AVL树任一结点平衡因子只能取 -1, 0, 1
• 如果一个结点的平衡因子的绝对值大于1,则这棵二叉搜索树就失去了平衡, 不再是AVL树。
计算式查找法—哈希法
基本思想:首先在元素的关键字 k 和元素的存储位置 p 之间建立一个对应关系 f,使得 p=f(k),f 称为哈希函数。
创建哈希表时,把关键字为 k 的元素直接存入地址为 f(k) 的单元;
以后当查找关键字为 k 的元素时,再利用哈希函数计算出该元素的存储位置 p=f(k),从而达到按关键字直接存取元素的目的。
伪随机数法
采用一个伪随机函数做哈希函数,即:h(key)=random(key)。
除留取余数法
假设哈希表长为 m,p 为小于等于 m 的最大素数,则哈希函数为: H(k)=k%p 其中 % 为模 p 取余运算。
开放定址法(再散列法)
根据再散列函数形式:
Hi=(H(key)+di)% m i=1,2,…,n di的取值方式不同,相应的再散列方式主要有以下三种:
- 线性探测再散列 (线性探查法)
- 二次探测再散列
- 伪随机探测再散列