Skip to content

Latest commit

 

History

History
65 lines (37 loc) · 1.96 KB

查找技术.md

File metadata and controls

65 lines (37 loc) · 1.96 KB

数据结构决定遍历次序;

  • 无序
    • find()
    • 目标对象与向量存放对象逐个比对;
  • 有序
    • search()
    • 利用二分查找策略;

向量

线性序列结构。

各数据项的物理存放位置与逻辑次序完全对应,可通过秩直接访问对应的元素,即循秩访问 (call-by-rank)。

向量中的秩同时对应于逻辑、物理次序。

列表

线性序列结构。

为保证元素访问的可行性,逻辑上互为前驱和后继的元素之间,应维护某种索引关系,可抽象地理解为被索引元素的位置 (position),故列表元素是循位置访问 (call-by-position)。

也可形象地理解为通往被索引元素的链接 (link),亦称循链接访问 (call-by-link)。

位置对应于逻辑次序。

栈、队列

线性序列结构。

基于向量或列表实现,一般不提供对任意成员的查找接口。

二叉树

以上数据结构,由实现方式,可以分为如下。

  • 基于数组的实现
    • 允许通过下标或秩,在常数时间内找到对象;
    • 对结构进行修改,插入、删除均需要耗费线性时间;
  • 基于链表的实现
    • 线性时间内对整个结构进行便利查找获得特定次序的元素;
    • 在常数时间内插入或删除元素;

树结构将 2 类结构的优点结合起来,回避其不足。

树中的元素之间不存在天然的直接后继或直接前驱关系,附加某种约束(比如遍历),也可以在树中的元素之间确定某种线性次序,树属于半线性结构 (semi-linear structure)。

树是一种分层结构。

二叉树是树的一种特例,不失其一般性。

无论就逻辑结构还是算法功能而言,任何有根有序的多叉树,都可等价的转化为二叉树。

非线性关系。

通过遍历将一般性的二元关系转化为半线性结构,进而借助树结构已有的处理方法和技巧,最终解决问题。

搜索树

半线性结构。