9. 搜索
搜索方法有:顺序搜索法(即链表搜索法)、二分搜索法、二叉树搜索法、哈希表搜索法、TRIE树搜索法。
其中,链表搜索法的搜索速度为
可见,按时间复杂度来衡量各种搜索方法的搜索速度,则可以得到如下搜索速度排序:
哈希表 > TRIE树 > 二叉搜索树 > 二分搜索法 > 链表搜索法。
但是,时间复杂度仅仅是搜索速度的一种衡量标准而已,并不一定能真正体现各种搜索法对应于特征词库下的搜索速度排序。例如,如果具有很小的系数的时间复杂度为
二叉搜索树之所以优于二分搜索法,是因为前者可以解决后者不适用的情况,例如:二分搜索法不适用于那些数据值在运行时才能确定的场合(如编辑器符号表),因为有序数组对于表的插入和删除操作是一种低效工具。
另外,TRIE的搜索过程如下图所示:
其中,层数I不易被确定,根据不同的词库,同一个单词对应的层数可能不同;而且长的单词对应的层数不一定多。这也是为什么这里用一个参数I来代替层数,而没有一个具体的公式的原因了。
TRIE树查找一个字符串的最差的时间复杂度是O(I),这时未必就比二分搜索法好。