构成排序二叉树需满足:做子树比根节点小,根节点比右子树节点小。
哈希表法查找最快
顺序查找法适用于存储结构为顺序或链接存储的线性表
TRIE树,单词查找树,是一种哈希树的变种,典型应用是用于统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计。优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。
分块查找的平均长度不仅与索引表的长度有关,而且与快的长度有关。
平均查找速度从慢至快排序:顺序、分块、折半、哈希
顺序查找的时间复杂度为o(n) 分块查找的时间复杂度为o(log2n)到o(n)之间 二分查找的时间复杂度为o(log2n) 哈希查找的时间复杂度为o(1) 二分查找:表必须有序,且表只能以顺序方式存储 二分查找满足2个条件:顺序存储和序列有序 B+树:有序数组链表+平衡多叉树,查找时间为O(log(1.44)n) B树:有序数组+平衡多叉树 当采用分块查找时,数据的组织方式为;数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块 对于静态表的顺序查找法,若在表头设置监视哨,则正确的查找方法为:从第n个元素往开始前查找该数据元素监视哨是最后需要比较的元素,减少了越界判断 图的遍历分为递归和非递归,即为深度遍历和广度遍历
存储在顺序介质如磁带上,无法随机读写自然无法二分与分块
kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和 m,判断f是否在O中出现,如果出现则返回出现的位置。常规方法是遍历O的每一个位置,然后从该位置开始和f进行匹配,但是这种方法的复杂度是 O(nm)。kmp算法通过一个O(m)的预处理,使匹配的复杂度降为O(n+m)。
二分查找首先要求数据是有序的,同时要求能随机访问数据元素,有序数组可以,链表不行,
二分查找因为每次都是从中间点开始查找,所以最坏情况是目标元素存在于最边缘的情况,最坏为O(LogN)
回溯算法是一种试探法,基本思路是:从一条路往前走,能进则进,不能进则退回来,换一条路再试,符合辛弃疾《青玉案》的笔意。
利用二分查找法查找数据元素的最多笔记哦啊次数不超过log2n+1
2 AVL树是最先发明的自平衡二叉查 找树。在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An algorithm for the organization of information" 中发表了它。
引入二叉树的目的是为了提高二叉树的搜索的效率,减少树的平均搜索长度.为此,就必须每向二叉树插入一个结点时调整树的结构,使得二叉树搜索保持平衡,从而可能降低树的高度,减少的平均树的搜索长度.
AVL树的定义:
一棵AVL树满足以下的条件:
1>它的左子树和右子树都是AVL树
2>左子树和右子树的高度差不能超过1
从条件1可能看出是个递归定义,如GNU一样.
红黑树是平衡二叉树,也就是左右子树是平衡的,高度大概相等。等价于一块完全二叉树,查找的时间复杂度是树的高度,为logn
二叉查找树的查询速度取决于树的深度,相同结点树深度最小的是平衡二叉树,所以查找效率最高。
深度优先搜索要借助栈,广度优先搜索要借助队列
顺序查找的平均时间是n/2
静态查找:仅做查询和检索操作的查找表
动态查找
在查询之后,还需要将查询结果为不在查找表中的数据元素插入到查找表中;或者,从查找表中删除其查询结果为在查找表中的数据元素; 简而言之,动态查找表的结构是可以随时修改或变化的,表结构本身在查找过程中动态生成,一般而言链式结构有这个特征,比如二叉查找树、三棵B树等,另外,基于顺序存储的Hash查找应该也算动态查找表;而静态查找表的结构一次性生成后就不再允许改变,就像在有序数组上使用折半查找那样。