有关键字递增的数组A【30】,按折半查找进行查找,查找程度为5的元素个数为15,对不对?这类题怎么做。
2个回答
展开全部
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
算法的思想:
序列排序顺序(升序或降序),跳转到在搜索过程中发现,这是第一个比较有序的系列中点,如果你正在寻找的元素值小于比元素的中点,不明来历的序列减少,或的右侧部分的左侧部分。通过比较会发现的时间间隔减少一半。
二进制搜索是一个高效的搜索方法。它可以大大减少比较次数,提高搜索效率。但是,前提是在查找表中的数据元素必须是有序的二进制搜索。
步骤算法描述:
第一步首先确定查找区间的中间位置
中旬=(左+右)/ 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如果找到的话,否则输出信息没有找到。
序列排序顺序(升序或降序),跳转到在搜索过程中发现,这是第一个比较有序的系列中点,如果你正在寻找的元素值小于比元素的中点,不明来历的序列减少,或的右侧部分的左侧部分。通过比较会发现的时间间隔减少一半。
二进制搜索是一个高效的搜索方法。它可以大大减少比较次数,提高搜索效率。但是,前提是在查找表中的数据元素必须是有序的二进制搜索。
步骤算法描述:
第一步首先确定查找区间的中间位置
中旬=(左+右)/ 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如果找到的话,否则输出信息没有找到。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询