有关键字递增的数组A【30】,按折半查找进行查找,查找程度为5的元素个数为15,对不对?这类题怎么做。

如题所述

第1个回答  2013-01-03
构造折半查找的判定树就可以了
第1层1个结点
第2层2个结点
第3层4个结点
第4层8个结点,共计1+2 + 4 + 8 = 15
剩余30-15 = 15在第5层,也就是说比较次数为5次,因此答案正确本回答被提问者采纳
第2个回答  2013-04-06
算法的思想:

序列排序顺序(升序或降序),跳转到在搜索过程中发现,这是第一个比较有序的系列中点,如果你正在寻找的元素值小于比元素的中点,不明来历的序列减少,或的右侧部分的左侧部分。通过比较会发现的时间间隔减少一半。

二进制搜索是一个高效的搜索方法。它可以大大减少比较次数,提高搜索效率。但是,前提是在查找表中的数据元素必须是有序的二进制搜索。

步骤算法描述:

第一步首先确定查找区间的中间位置

中旬=(左+右)/ 2 STEP2关键字值?检查和关键字值的中间?相比

如果他们是平等的,然后找到成功

过半后(右)的领域继续折半查找

小于第一个(左侧)上半年全区继续二进制搜索

(3)对确定区域按减少一半的公式,重复上述步骤。最后,结果:要么找到成功或查找失败。 />二进制搜索的存储结构用一个一维数组存储。

例如对于一个给定的系列(有序){3,5,11,17,21,23,28,30,32,50}二进制二进制搜索算法搜索算法找到的关键字的值的30个数据元素。

二进制搜索算法讨论:

优点:翔升≤log2n,即比较后,找到的范围内减少了一半。通过log2n护理完成搜索过程。

缺点:需要有序地寻问您必须订购和列数,按大小排序的所有数据元素是非常耗时的操作。此外,顺序存储结构插入,删除操作不方便。

考虑:无论是通过放弃部分(即,通过比较,看看收缩变小),以达到提高效率的目的。 ......?

考虑两种方法可以结合(顺序搜索和二进制搜索),这需要以便找到简单和高效的二进制搜索之所长,以达到提高效率的目的?这实际上是一个块搜索算法思想。

例如:[]由于升序中的数据,用最高效的二进制搜索。

程序binsearch的;

常量最大= 10;

VAR数:数组[1 ..最大整数;

I,N:整数;

程序的搜索(X,A,B:整数);

VAR中旬:整数;

如果开始A = B然后

如果x = NUM [],然后writeln是('发现',),否则writeln是('号没有发现')

其他

中旬开始:=(A + B)2格;

当x> NUM [中],然后搜索(X,中旬,B);

如果x <NUM [中期],然后搜索(X,A,中旬);
>如果x = NUM [中],然后writeln是('发现',中旬);

结束;

结束;

开始写(“请输入10个数字,以: ');

对于i = 1到最大读取(NUM);

写的(“请输入号码搜索:”); readln(N);

搜索(N,1,最大值);结束

Java风格的代码示例:

/ /使用二进制的方法查找

诠释的getIndex(INT [] n清单, nCount,维尔胜){

参数nIndex = -1;

jMin = 0;

JMAX = nCount - 1;

jCur =(jMin + JMAX)/ 2;

{

(n清单[jCur]>维尔胜){

JMAX -

的} else if(n清单[jCur] <维尔胜){ BR /> jMin + +;

的} else if(n清单[jCur] ==维尔胜){

参数nIndex = jCur

休息

}

jCur =( jMin + JMAX)/ 2;

}(jMin <JMAX);

返回参数nIndex;

}

>

尽管二进制文件搜索效率高,但关键的表进行排序。排序方式本身是一个非常耗时的操作。即使是有效的排序方法也需要O(N LG N)的时间。

二进制搜索只适用于顺序存储结构。为了维持表的有序性,插入和删除必须被移动到大量的节点序列中的结构。因此,特别适合那种二进制搜索已建立的一些变化,但常常需要找到线性表。

对于那些谁找到少,往往需要改变线性表,链表,可作为存储结构,顺序查找。链表无法实现二进制搜索

二进制搜索C#实现代码如下:

使用系统;

使用等级

使用系统。文字;

命名空间BinschDemo

{

公共类BinschDemo

{

公共静态Binsch(INT [],int键生成)

{
>低= 1;

高=则为a.length;

(低<=高)

{

中旬=(低+高)/ 2; (键== A [中])

{

返回中旬; / /返回索引值

}

其他

{

(键<A [中旬])

高= MID - 1;

否则

低=中旬+ 1;

}

}

返回-1 ; / /查找故障

}

静态无效的主要(字串[] args)

{

了Console.Writeline(“请输入10个增量的数字:”); BR /> []列表=新的诠释[10];

(INT I = 0; <10; i + +)

{

Console.Write(“数字: i)条;

LIST的= Convert.ToInt32(Console.ReadLine());

} Console.Write(“请输入你要找的数字:”); BR /> INT发现= Convert.ToInt32(Console.ReadLine());

结果= Binsch(列表中,找到);

了Console.Writeline(结果);

} }

}

块搜索和索引查找,它主要是用于块有序表查找,所谓的“分块有序”,是指以线性形式L(一二维数组)被分成m个子表(每个子表的长度要求等于),#i和#i +1的子表中的每个项目都大于子表中的所有项目。“块有序表应包括线性形式L本身和表的索引块。块搜索的关键在于建立索引表A.

(1)分度表(二维数组)

索引表由两部分组成:在子表中的关键字项(最大值)的指针项目(子表第一在线表L位置)

索引表中的关键字和有序。

例如:线性表L(按顺序):1 2 3 4 5 6 7 8 9 10 11 12

分为M = 3子表:{1234} {5 6 7 8} {9 10 11 12}

指数表阿:两维阵列的第一列的各子表中的最大值,第二列是:40 8 4

12 8

(2),确定一套完整的X索引表子表(块)。
(3)可以用在定义的子表“二进制搜索”搜索来历不明的物品X;输出X如果找到的话,否则输出信息没有找到。
相似回答