二分查找及其应用.pptVIP

  • 15
  • 0
  • 约2.67千字
  • 约 21页
  • 2017-05-26 发布于河南
  • 举报
二分查找及其应用

二分查找及其应用 — By ElemenT 刷题太无聊?我们玩游戏吧! 相信大家都玩过猜数字的 游戏。两人游戏,A同学在心 里默念一个整数n (1 = n = 1000)。 B同学猜n是多少。 同时如果B没有猜对,A告诉 他这个数比默念的数高了还 是低了。 看起来好厉害的样子 其实并不是,下面将引入“二分搜索”的概念。 如上述的游戏中,第一次应该取多少呢? 500! 很不巧并不是500,而是一个比500大的数。 虽然运气不好,但是B将区间的范围砍掉了一半! 那么下一次B该猜什么。。。 大家已经发现,问题变成了501-1000之间猜一个数,那么应该猜 (501+1000)/2 = 750! 如果运气还是不好,,又猜小了. 没关系!只猜了仅仅两次,我们就将区间缩小为 751--1000. 那么继续下去... 我们发现,每次可以将区间缩小为原来的一半。递减速度显然就是log级别的。 log(1000)向上取整只有10. 那么我们一定可以在10次之内猜出这个数。 给定一个有序序列a0,a1,a2...aN,给出一个目标值tg,在序列中查找是否存在tg,如果存在,返回tg的下标。 如何快速查找? 我们必须看到数列是有序的 充分利用有序的条件,类似猜数一样查找tg。 复杂度为log(n)。 那么我们来看看如何实现二分查找。 int bs(int *a, int n, int tg) {

文档评论(0)

1亿VIP精品文档

相关文档