计算机程序设计

二进制搜索 - 最简单的方法之一,找到一个数组中的元素

很多时候,程序员,即使是初学者,面对事实,那就是一组数字,它必须找到一个具体的数字。 正是这种集合称为数组。 并找到它的项目,也有无数种方法。 但他们最简单的可以考虑在合适的二进制搜索。 这是什么方法? 以及如何实现二进制搜索? 帕斯卡尔是这样一个程序的组织最简单的环境,所以我们会利用它来研究。

首先,分析一下,什么是这种方法的优点,更是让我们可以理解, 什么是在专题研究的点。 所以,让我们有至少亿元素,这就需要找到一些维数组。 当然,这个问题可以容易地通过简单的线性搜索,在此我们使用的是周期将所需要的元件比较所有那些阵列中解决。 问题是,这个想法的实施将花费太多时间。 在一个简单的Pascal程序分为几个疗程,三线的主要文字,你不会注意到它,但是当我们来到了大量分支机构和良好的功能的一个或大或小的项目,该项目将随时被加载时间过长。 特别是,如果计算机是一个薄弱的表现。 因此,存在一个二进制搜索,这减少了搜索时间的至少两倍。

那么,什么是这种方法的工作原理? 立即将其应该说,二进制搜索的工作原理是不以任何阵列,但只能在一个有序组数字。 在阵列中的每个步骤中取出中间元件(意味着该元素的数量)。 如果所需的 数量大于 平均值,那么所有剩下的,也就是低于平均电池,可以被丢弃,而不是放在那儿。 反之,如果低于这个平均水平 - 这些数字向右之中,你不能搜索。 然后选择一个新的搜索区,其中第一个元素将是整个阵列的中间元素,最后一个和最后的意志。 新字段的平均数量将是所有的段,即,(最后一个元素+整个阵列的中间元件)/ 2的1/4。 再次,进行相同的操作 - 与平均编号的数组的比较。 如果目标值小于平均值,我们拒绝右侧,也做下一个,到现在为止这中间元素不会期望。

当然,最好是看看如何编写二进制搜索的例子。 帕斯卡尔这里将适合任何人 - 版本并不重要。 让我们写一个简单的程序。

它是1以名称“马西沃”的阵列到h,变量指示搜索的下边界,被称为“NIZ”,上限,被称为“verh”,平均搜索术语 - “sredn”; 和所需数量 - “ISK”。

所以,首先我们指定搜索范围的上限和下限:

NIZ:= 1;
verh:= H + 1;

然后组织循环“直到底部低于上限”:

虽然NIZ 开始

在每一步中,我们把段2:

sredn:=(NIZ + verh)DIV 2; {使用函数div,因为没有剩余的鸿沟}

回顾每一次。 因为如果介质所需的项目已经被发现,中断周期:

іfsredn = ISK然后打破;

如果超过所希望的该阵列的中间元件,丢弃左侧,即,平均的上边界指定元素:

如果马西沃[sredn]> ISK然后verh:= sredn;

而如果相反,它使下边界:

否则NIZ:= sredn;
结束;

这一切都将在节目中。

让我们考虑如何将它看二进制方法在实践中。 考虑这个阵列:1,3,5,7,10,12,18,它会寻求数字12。

我们总共有7个元素,因此将第四介质,值7。

1 3 7 10 12 18

由于超过12,如图7所示,1.3和5的元件,就可以丢弃。 然后,我们已经拿到了4号,4/2无残留为2。于是,新元素将是10的平均水平。

7 10 12 18

由于图12是大于10,我们丢弃7.仅保持在10,12和18。

在这里,中间元素已经是12,这是必需的号码。 在完成此任务 - 12号发现。

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 zhcn.atomiyme.com. Theme powered by WordPress.