查找的数据结构与算法

Jun 23, 2015

版权声明:本文为博主原创,未经作者许可谢绝转载。
如有任何疑问或者建议,请联系 xiangchen.cs@gmail.com

顺序查找 $ASL=\frac{N+1}{2}$

折半查找 $ASL=\lfloor \log_2 N \rfloor +1$

斐波那契查找 $ASL=O(\log_2 N)$。平均性能比折半查找好,最坏性能比折半查找差。

索引查找:划分子表。

二叉搜索树 BST:

  • 插入:执行搜索操作,失败后插入。
  • 删除:叶子节点直接删除;只有一个子节点,直接接上;左右子节点都存在时,可用中序前驱或中序后继替换。
  • 旋转

中序遍历二叉搜索树得到有序序列。

AVL树:左子树和右子树都是 AVL 树,且高度之差的绝对值不超过 1。

  • 插入:从插入位置向根回溯,检查各点的平衡性,进行旋转操作。
  • 删除

高度为 $h$ 的 AVL 树,最少的节点数为斐波那契数列中 $f_{h+2}-1$。

另有 B-树、2-3-4树、红黑树。

散列:

  • 散列函数:简单,近似随机。例:乘法,取模,折叠,平方取中。
  • 冲突处理:链地址法,开放地址法(线性探测,双重散列)
  • 冗余度和冲突是一对矛盾,不可直接删除元素
  • 冲突处理:链地址,开放地址(线性探测、双重散列)
  • 应用:字符串匹配,搜索引擎,信息安全,内容鉴别
  • 缺陷:动态性能差、最坏性能差、忽略逻辑关系

安全的哈希函数:

  • H能够应用到大小不一的数据上
  • H能够生成大小固定的输出
  • 对干任意给定的x,H(x)的计算相对简单
  • 对于任意给定的h,要发现满足H(x)=h的x在计算上不可行
  • 对于任意给定的块x,要发现满足H(y)=H(x)且y!=x在计算上不可行
  • 要发现满足H(x)=H(y) 的(x,y)对在计算上不可行

常用的有

  • MD2/MD4/MD5算法
  • SHA/SHA-1算法
  • 生日攻击