第九章 查找

合集下载

数据结构第九章--查找-习题及答案

数据结构第九章--查找-习题及答案

第九章查找一、选择题1•若查找每个记录的概率均等,则在具有n 个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL 为()。

A .(n-1)/2B.n/2C.(n+1)/2D.n 2. 下面关于二分查找的叙述正确的是()A. 表必须有序,表可以顺序方式存储,也可以链表方式存储C.表必须有序,而且只能从小到大排列B. 表必须有序且表中数据必须是整型,实型或字符型D.表必须有序,且表只 能以顺序方式存储3. 用二分(对半)查找表的元素的速度比用顺序法() A. 必然快B.必然慢C.相等D.不能确定4. 具有12个关键字的有序表,折半查找的平均查找长度()A.3.1B.4C.2.5D.55.当采用分块查找时,数据的组织方式为()A. 数据分成若干块,每块内数据有序B. 数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块C. 数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D. 数据分成若干块,每块(除最后一块外)中数据个数需相同6. 二叉查找树的查找效率与二叉树的((1))有关,在((2))时其查找效率最低(1) :A.高度B.结点的多少C.树型D.结点的位置(2) :A.结点太多B.完全二叉树C.呈单枝树D.结点太复杂。

7. 对大小均为n 的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找失败,它们的平均查找长度是((1)),对于查找成功,他们的平均查找长度是((2))供选择的答案:A.相同的B.不同的9.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是()A .(100,80,90,60,120,110,130)B.(100,120,110,130,80,60,90) C. (100,60,80,90,120,110,130)D.(100,80,60,90,120,130,110)10. 在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A 的左孩子的平衡因子为0右孩子的平衡因子为1,则应作()型调整以使其平衡。

第九章 查找

第九章 查找

} // Search_Seq

例:在顺序查找表中查找key=8的关键字 ST.elem
0 8 1 100 2 10 3 0 4 8 i 5 1 6 3 7 7
查找成功 i=4
9.1.1 顺序表的查找性能分析

等概率下查找成功的平均查找长度:Pi=1/n;Ci=n-i+1,
1 ASLSS n
(n i 1)
9.1.2 有序表的查找的性能分析
•判定树:用二叉树描述折半查找过程,树中每个结点表示一个 记录,结点值为该记录在表中的位臵,结点所在的层次表示查找 该值需要进行的比较次数。则有如下的表:
位臵 0 1 2 3 4 5 6 7 8 9 10 11
05 13 19 21 37 56 64 75 80 88 92
} // Search_Seq

例:在顺序查找表中查找key=8的关键字 ST.elem
0 8 1 100 2 10 3 0 4 8 5 1 6 3 i 7 7
9.1.1 顺序表的查找

适用场合:以顺序表表示静态查找表,表内元素无序。
思想:从表中最后一条记录起,逐个比较记录关键字与给定值, 若相等查找成功;反之,直至与第一条记录不等,查找不成功 int Search_Seq( SSTable ST, KeyType key ) { ST.elem[0]. key = key;//哨兵 for ( i = ST.length ; ! EQ(ST.elem[i]. key, key ) ; - - i ); return i;
比较次数 0 3 4 2 3 4 1 3 4 2 3 4
查找的定义和术语(2)
“特定的”数据元素 关键字(Key):数据元素中某个数据项的值,用以标识一个 数据元素 主关键字(Primary Key):可以唯一标识一个记录的关键 字 次关键字(Secondary Key):用以识别若干记录的关键 字 查找(Searching):根据给定值,在查找表中确定一个其关 键字等于给定值的数据元素或记录. 查找成功(Searching Success):若存在这一记录,给 出该记录信息或指示该记录在表中的位臵 查找不成功(Searching Failed):若查找表中不存在这 一记录,给出“空记录”或“空指针”。

(完整word版)数据结构第九章查找

(完整word版)数据结构第九章查找

第九章查找:习题习题一、选择题1.散列表查找中k个关键字具有同一散列值,若用线性探测法将这k个关键字对应的记录存入散列表中,至少要进行( )次探测。

A. k B。

k+l C. k(k+l)/2 D. l+k (k+l)/22.下述命题( )是不成立的。

A。

m阶B-树中的每一个结点的子树个数都小于或等于mB。

m阶B-树中的每一个结点的子树个数都大于或等于『m/2-1C。

m阶B-树中的每一个结点的子树高度都相等D。

m阶B—树具有k个子树的非叶子结点含有(k-l)个关键字3.如果要求一个基本线性表既能较快地查找,又能适应动态变化的要求,可以采用( )查找方法.A。

分块 B. 顺序 C. 二分 D.散列4.设有100个元素,用折半查找法进行查找时,最大比较次数是( ),最小比较次数是( ).A。

7,1 B.6,l C.5,1 D. 8,15.散列表长m=15,散列表函数H(key)=key%13。

表中已有4个结点:addr(18)=5;addr(32)=6; addr(59)=7;addr(73)=8;其余地址为空,如果用二次探测再散列处理冲突,关键字为109的结点的地址是( )。

A. 8 B。

3 C. 5 D。

46.用分块查找时,若线性表中共有729个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分( )个结点最佳。

A。

15 B. 27 C。

25 D。

307.散列函数有一个共同性质,即函数值应当以( )取其值域的每个值。

A.同等概率B。

最大概率C。

最小概率D。

平均概率8.设散列地址空间为O.。

m—1,k为关键字,假定散列函数为h(k)=k%p,为了减少冲突,一般应取p为( )。

A.小于m的最大奇数B. 小于m的最大素数C.小于m的最大偶数D.小于m的最大合数9.当向一棵m阶的B-树做插入操作时,若使一个结点中的关键字个数等于( ),则必须分裂成两个结点。

A。

m B。

m-l C.m+l D。

数据结构:第9章 查找2-二叉树和平衡二叉树

数据结构:第9章 查找2-二叉树和平衡二叉树
NODE *t; char x; {if(t==NULL)
return(NULL); else
{if(t->data==x) return(t);
if(x<(t->data) return(search(t->lchild,x));
else return(search(t->lchild,x)); } }
——这种既查找又插入的过程称为动态查找。 二叉排序树既有类似于折半查找的特性,又采用了链表存储, 它是动态查找表的一种适宜表示。
注:若数据元素的输入顺序不同,则得到的二叉排序树形态 也不同!
讨论1:二叉排序树的插入和查找操作 例:输入待查找的关键字序列=(45,24,53,45,12,24,90)
二叉排序树的建立 对于已给定一待排序的数据序列,通常采用逐步插入结点的方 法来构造二叉排序树,即只要反复调用二叉排序树的插入算法 即可,算法描述为: BiTree *Creat (int n) //建立含有n个结点的二叉排序树 { BiTree *BST= NULL;
for ( int i=1; i<=n; i++) { scanf(“%d”,&x); //输入关键字序列
– 法2:令*s代替*p
将S的左子树成为S的双亲Q的右子树,用S取代p 。 若C无右子树,用C取代p。
例:请从下面的二叉排序树中删除结点P。
F P
法1:
F
P
C
PR
C
PR
CL Q
CL QL
Q SL
S PR
QL S
SL
法2:
F
PS
C
PR
CL Q
QL SL S SL

第9章查找

第9章查找

high指向待查元素所 在区间的上界
(1) low =1,high =11 ,mid =6 ,待查范围是 [1,11]; (2) 若 ST.elem[mid].key < key,说明 key[ mid+1,high] , 则令:low =mid+1;重算 mid= (low+high)/2;. (3) 若 ST.elem[mid].key > key,说明key[low ,mid-1], 则令:high =mid–1;重算 mid ; (4)若 ST.elem[ mid ].key = key,说明查找成功,元素序号=mid; 结束条件: (1)查找成功 : ST.elem[mid].key = key (2)查找不成功 :high<low (意即区间长度小于0)
2013-12-24
2
2、对查找表常用的操作:
查询某个“特定的”数据元素是否在表中; 查询某个“特定的”数据元素的各种属性; 在查找表中插入一元素; 从查找表中删除一元素。
静态查找表(Static Search Table):对查找表只做 前两种“查找”操作 动态查找表(Dynamic Search Table) :对查找表 要进行后两种“查找”操作
2013-12-24
8 75 i
9 80 i
10 88 i
11 92 i
比较次数=5
6
不设置监视哨的顺序查找算法
int SeqSearch( SSTable ST, KeyType key) /*不用监视哨法,在顺序表中查找关键字等于key的元素*/ {
i=ST.length;
while (i>=1&&ST. elem[i].key!=key) i--;

查找-数据结构

查找-数据结构

平均查找长度:为确定记录在查找表中 的位置,需和给定值进行比较的关键字 个数的期望值称为查找算法在查找成功 时的平均查找长度,简称ASL。
对于含有n个记录的表,查找成功时的平 均查找长度为: n ASL PiCi i 1
其找到中表:中Pi为其查关找键表字中与第给i定个值记相录等的的概第率,i个C记i为 录时和给定值已进行过比较的关键字个数。
(1)若*p 为叶子结点,直接删除即可。
45
45
12
3
37
53
f
100
24
p
61
60
90
12
53
3
删除24
f->lchild = null; delete p;
37
100
61
60
90
78
78
(2)若*p结点只有左子树PL或只有右子树PR,此 时只要令PL或PR直接成为*f的左子树即可
f
F
f
F
p
P
p
二叉排序树的插入
基本思想:
若二叉排序树为空,则待插结点作为根结点插入 到空树中;
若待插结点的关键字值和根结点的关键字值相等, 则说明树中已有此结点,无需插入;
若待插结点的关键字值小于根结点的关键字值, 则将待插结点插入到根的左子树中;
若待插结点的关键字值大于根结点的关键字值, 则将待插结点插入到根的右子树中;
mid low
mid low
mid low
mid low
mid
mid
mid
mid
6
3
9
1
47
10
2
58
11
由此可见,二分查找过程恰好是走了一条从判 定树的根到被查结点的路径,比较的关键字个 数恰为该结点在判定树中的层数。

数据结构-第九章 查找

数据结构-第九章查找在计算机科学的世界里,数据结构就像是一个精心设计的仓库,用于高效地存储和管理数据。

而查找,作为数据结构中的重要一环,它的作用就如同在这个庞大的仓库中迅速找到我们需要的宝贝。

当我们面对大量的数据时,如何快速准确地找到特定的信息,这是查找要解决的核心问题。

在第九章中,我们会深入探讨几种常见的查找算法和数据结构。

首先,我们来谈谈顺序查找。

这是最简单也是最直观的查找方法。

想象一下,我们有一个长长的列表,就像一排摆放整齐的物品,要找某个特定的东西,我们只能从第一个开始,一个一个地依次检查,直到找到目标或者遍历完整个列表。

这种方法虽然简单直接,但效率并不高,特别是当数据量很大时,查找的时间会很长。

与顺序查找相对的是二分查找。

二分查找就聪明多了,它要求数据是有序的。

就好像我们知道物品是按照大小顺序摆放的,每次都可以通过比较中间的元素来判断目标在左边还是右边,然后不断缩小查找的范围。

通过这种方式,查找的效率大大提高。

比如说,在一个有 100 个元素的有序列表中,最多只需要 7 次比较就能找到目标元素。

接下来是二叉查找树。

它是一种特殊的数据结构,每个节点最多有两个子节点,左子节点的值小于父节点,右子节点的值大于父节点。

通过这种特殊的结构,我们可以快速地在树中查找目标元素。

插入和删除操作也相对方便,但要注意保持树的平衡,否则查找的效率可能会下降。

还有哈希表,这是一种非常高效的查找结构。

它通过一个哈希函数将关键字映射到一个特定的位置。

如果哈希函数设计得好,查找的时间复杂度可以接近常数级别。

但哈希表也有它的问题,比如可能会出现哈希冲突,需要通过合适的冲突解决方法来处理。

在实际应用中,选择哪种查找方法取决于具体的情况。

如果数据量较小,顺序查找可能就足够了;如果数据是有序的,二分查找是个不错的选择;如果需要频繁的插入和删除操作,二叉查找树可能更合适;而对于大规模数据且查找操作频繁的情况,哈希表往往能发挥出巨大的优势。

数据结构 C语言版(严蔚敏版)第9章 查找


若大于,查找范围的高端数据元素指针high 不变,低端数据元素指针low更新为mid+1; (4)重复步骤(2)、(3)直到查找成功或 查找范围空(low>high),即查找失败为止。 (5)如果查找成功,返回找到元素的存放位 置,即当前的中间项位置指针 mid;否则返回 查找失败标志。
折半查找的c语言算法程序: int Search_Bin( SSTable ST, int n, int key) {int low, high,mid;
查找:在数据元素集合中查找满足某种条 件的数据元素的过程称为查找。最简单且最常 用的查找条件是“关键字值等于某个给定值” ,在查找表搜索关键字等于给定值的数据元素 (或记录)。若表中存在这样的记录,则称查 找成功,此时的查找结果应给出找到记录的全 部信息或指示找到记录的存储位置;若表中不 存在关键字等于给定值的记录,则称查找不成 功,此时查找的结果可以给出一个空记录或空 指针。若按主关键字查找,查找结果是唯一的 ;若按次关键字查找,结果可能是多个记录, 即结果可能不唯一。
while(ST[i].key!=key) i- -;
return i; }
0 1 0
/*从表尾往前查*/ 找到:返回元素 的存 1 2 3 4 在线 5 性表 6 中7 10 20 40 80 储位置; 30 60 25 (a) 初态 未找到:返回0。
2 3 4 5 6 7
80
监视哨 0
10
1
20
动态查找表:若在查找过程中可以将查找 表中不存在的 数据元素插入 ,或者从查找表中 删除某个数据元素 ,则称这类查找表为动态查 找表。动态查找表在查找过程中查找表可能会 发生变化。对动态查找表进行的查找操作称为 动态查找。 关键字:是数据元素中的某个数据项。唯 一能标识数据元素(或记录)的关键字,即每 个元素的关键字值互不相同,我们称这种关键 字为主关键字;若查找表中某些元素的关键字 值相同,称这种关键字为次关键字。例如,银 行帐户中的帐号是主关键字,而姓名是次关键 字。

数据库系统l试题库及答案 第9章 查找

第9章查找9.1知识点:静态查找表一、填空题1.在数据的存放无规律而言的线性表中进行检索的最佳方法是。

2.查找表是由构成的集合。

3.若对查找表只做“查询某个特定的数据元素是否在查找表中”和“查询某个特定的数据元素的各种属性”操作,则称此类查找表为。

若在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素,则称此类查找表为。

4.在n个记录的有序顺序表中进行折半查找,最大的比较次数为。

5.是顺序查找的一种改进方法,又称索引顺序查找,具体实现为将一个主表分成n个子表,要求子表之间元素是按,而子表中元素可以无序的,用每个子表最大关键字和指示块中第一个记录在表中位置建立。

6.分块查找的时间复杂度是。

7.顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为次;当使用监视哨时,若查找失败,则比较关键字的次数为次。

8.由于查找运算的主要运算是关键字的比较,所以通常把______________作为衡量一个查找算法效率优劣的标准。

它的计算公式为________________________________________。

二、选择题1.()在表长为n的链表中进行顺序查找,它的平均查找长度为()。

A. ASL=nB. ASL=(n+1)/2C. ASL=+1D. ASL≈log2(n+1)-12.()采用折半查找方法查找长度为n的线性表时,平均时间复杂度为()。

A.O(n2)B.O(nlogn)C.O(n)D.O(logn)3.()折半查找有序表(4,6,10,12,20,30,50,70,88,100)。

若查找表中元素58,则它将依次与表中()比较大小,查找结果是失败。

A.20,70,30,50 B.30,88,70,50 C.20,50 D.30,88,504.()有序线性表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索()次。

数据结构第九章:查找


low high mid
8
1 5
2 13
3 19
4 21
5 37
6 56
7 64
8 75
9 80
10 88
11 92
high low 1 5 2 13 3 19 4 21 5 37 6 56 6 3 1 2
算法描述: 算法描述:ENTER
9
7 64
8 75
9 80
10 88
11 92
判定树: 判定树:
17
考试题型介绍: 考试题型介绍:
1. 填空题 若用链表存储一棵二叉树时,每个结点除数据域外, 若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右 孩子的两个指针。在这种存储结构中, 个结点的二叉树共有 个结点的二叉树共有________个 孩子的两个指针。在这种存储结构中,n个结点的二叉树共有 个 指针域,其中有________个指针域是存放了地址,有 指针域,其中有 个指针域是存放了地址, 个指针域是存放了地址 ________________个指针是空指针。 个指针是空指针。 个指针是空指针 2. 选择题 设有序表中有1000个元素,则用二分查找查找元素X最多需要比较( )次 个元素,则用二分查找查找元素 最多需要比较 最多需要比较( 设有序表中有 个元素 A. 25 3. 简答题 已知序列( , , , , , , , , , ) 已知序列(10,18,4,3,6,12,1,9,18,8)请用快速排序写出每一 趟排序的结果。 趟排序的结果。 4. 算法题 设计判断单链表中元素是否是递增的算法。 设计判断单链表中元素是否是递增的算法。 已知: 已知: 1. 单链表已存在,并带有头结点; 单链表已存在,并带有头结点; 2. 要求写出详细的算法步骤或画出详细的流程图; 要求写出详细的算法步骤或画出详细的流程图; B. 10 C. 7 D. 1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 若KeyValue小于Data[middle]:
判定树
折半查找的过程可以用二叉树来表示。判定树即 描述查找过程的二叉树,树中每个节点表示表中 一个记录,节点的值为该记录在表中的位置。 查找表中任一记录成功的过程就是走了一条从根 节点到与该记录相应节点的路径。 比较的次数恰好为该节点在判定树上的层次树。 由于具有n个节点的判定树的高度为log2n+1, 所以折半查找时与给定值进行比较的次数最多为 log2n+1次。
表示KeyValue可能出现在Data[middle]之后,所以查找 Data[middle+1]到Data[n]之间的数据。 这时left = middle + 1,right = right,而middle = ( left + right ) / 2
3. 若KeyValue等于Data[middle]:
表示KeyValue可能出现在Data[middle]之前,所以查找Data[0]到 Data[middle-1]之间的数据。 这时left = left,right = middle - 1,而middle = ( left + right ) / 2
2. 若KeyValue大于Data[middle]:
9.2 线性查找
查找成功时的平均查找长度 从线性查找的过程得知,对于有n个记录的查找表,Ci取决 于所查记录在表中的位置。如查找表中最后一个记录时需比 较n次,查找表中第一个记录时需比较1次。因此,线性查找 成功时的平均查找长度为 ASL=P1 + 2P2+ …… (n-1)Pn-1+nPn 假设每个记录的查找概率相等,即Pi=1/n,则在等概率 情况下线性查找成功时的平均查找长度为
int { }
Linear_Search(int Key) int Index = 0; /* 计数变量 */ while ( Index < 20 ) { if ( Key == Data[Index] ) /* 查找到数据时 */ { printf("Data[%d] = %d \n",Index,Key); return 1; } Index++; Counter++; } return 0;
9.3 折半查找(有序表的查找 )
有序表是一种记录的关键字有序(以升序 为例)的查找表。有序表也可以使用线性 查找,但折半查找用于有序表的查找,效 率更高。
9.3 折半查找(有序表的查找 )
欲查找值先与该数据(KeyValue)的中位数(middle)比较, 假设数据的内容为Data[0]到Data[n],则middle = n / 2, 左边界left = 0,右边界right = n。其原理可归纳为下列3点: 1. 若KeyValue小于Data[middle]:
} return 0;
}
if ( Key < Data[Root-1] ) /* 欲查找值较小 */ { /* 查找前半段 Root = Root - Distance_2; Temp = Distance_1; Distance_1 = Distance_2; Distance_2 = Temp - Distance_2; } else if ( Key > Data[Root-1] ) /* 欲查找值较大 */ { /* 查找后半段 Root = Root + Distance_2; Distance_1 = Distance_1 - Distance_2; Distance_2 = Distance_2 - Distance_1; } else if ( Key == Data[Root-1] ) /* 查找到数据 */ { printf ("Data[%d] = %d\n",Root-1,Data[Root-1]); return 1; } Counter++; while ( Distance_2 >= 0 );
表示已查找到数据。 重复执行上述3个步骤直到left = right或者找到欲查找数据为止。

int {
Binary_Search(int Key) int int int Left; Right; Middle; /* 左边界变量 */ /* 右边界变量 */ /* 中位数变量 */
else if ( Key > Data[Middle] ) /* 欲查找值较大 */ return Binary_Search(Middle + 1,Right,Key);/* 查找后半段 */ else if ( Key == Data[Middle] ) /* 查找到数据 */ { printf ("Data[%d] = %d\n",Middle,Data[Middle]); return 1; } } return 0; }
*/
*/
9.5 插补查找
插补查找是一种类似折半查找的查找方法, 不同于折半查找每次找出位于中间的元素 作为比较元素,插补查找是通过假设待查 找序列的元素均匀分布,以内插法按照比 例所选出来一项作为比较元素。
middle low
( keyvalue data [ low ]) ( high low ) data [ high ] data [ low ]
特性三:费氏树节点间差值的绝对值均为费氏数。 任一个非终端节点的左子节点值为该节点值减去 一个费氏数,右子节点值则为该节点值加上同样 一个费氏数。从树根起,节点间差值的排列趋势 为向叶端减小。
特性四:费氏树的左子树及右子树也是一种低阶 费氏树。设a - 1 = k , 则称根为F ( k) 的费氏 树为k 阶费氏树。其左子树根为“F (k) - F (k - 2) ”,即F (k - 1) ,称为k - 1 阶费氏树; 右子树根为“F (k) + F (k - 2) ”,称为k - 2 阶费氏树。


Left = 0; Right = Max - 1;
while ( Left <= Right ) { Middle = ( Left + Right ) / 2; if ( Key < Data[Middle] ) /* 欲查找值* 查找前半段 */ else if ( Key > Data[Middle] ) /* 欲查找值较大 */ Left = Middle + 1; /* 查找后半段 */ else if ( Key == Data[Middle] ) /* 查找到数据 */ { printf ("Data[%d] = %d\n",Middle,Data[Middle]); return 1; } Counter++; } return 0; }
运用递归方式设计折半查找法的程序
int { Binary_Search(int Left,int Right,int Key) int Middle; /* 中位数变量 */


Counter ++; if ( Left > Right ) return 0; else { Middle = ( Left + Right ) / 2; if ( Key < Data[Middle] ) /* 欲查找值较小 */ return Binary_Search(Left,Middle - 1,Key);/* 搜索前半段 */
费氏树的特性
特性一: 通常费氏树为一个包含F (a) - 1 个节点的 二叉树。根下左子树节点共有F (a - 1) - 1个;根 下右子树节点共有F (a - 2) - 1 个。F (a - 1) 为根 节点之值。其中“a - 1”表示为费氏树的高度。
特性二:费氏树的左干节点均为费氏数,由表示 根值开始的费氏数及其在费氏级数中的所有前驱 依序组成。最左叶子节点值为费氏数“1”,是费 氏树最小的节点。


ASL=
=
9.2 线性查找
查找不成功时的平均查找长度 对于线性查找,不论给定值为何值,查找不成功时和 给定值进行比较的关键字次数均为n+1。而该给定值可能 位于表中第一个元素之前,最后元素之后以及任意两个相 邻元素之间,总共n+1种可能,假设每一种查找不成功事 件发生的概率都相等,则其概率为1/(n+1)。于是,可 得到在查找不成功时的平均查找长度为



下面来介绍一下Fibonacci查找的具体过程: (1)假设数据共有n笔,则先在Fibonacci数列中找到最小的a使满足 F(a)<=n+1,然后令 root=F(a-1) distance_1=F(a-2) distance_2=F(a-3) (2)如果欲查找的数据x<data[root],表示x出现在data[root]之前,此 时令 root=root-distance_2, temp=distance_1, distance_1=distance_2, distance_2=temp-distance_2。 (3)如果x>data[root],表示x出现在data[root]之后,此时令 root=root+distance_2, distance_1=distance_1-distance_2, distance_2=distance_2-distance_1。 (4)如果x=data[root],表示已查到数据。 重复(2)(3)(4),直到找到相应数据,或直到distance_2为负则表示x 不在数据范围内。
第九章 查找
9.1 何谓查找
查找(又称检索、搜索)无论是在日常生活中, 还是在计算机的系统软件和应用软件中都会广泛 的涉及到。 这一章我们要讨论一些常用的数据查找方法。
相关文档
最新文档