转自http://zmp1123.blog.163.com/blog/static/1193291592013314581911/

设n 个不同整数排好序后存于T[0:n-1]中,若存在一个下标i,0≤i<n,是的T[i]=i,设计一个有效地算法找到这个下标。要求算法在

最坏情况下的计算时间为O(logn)。
算法描述如下:
由于n 个整数是不同的,因此对任意0≤i<n-1 有T[i]≤T[i+1]-1。
1 对于0<i<n,当T[i]>i 时,对任意的i≤j≤n-2 有T[j]≥T[i]+j-i>i+j-i=j。
2 对于0<i<n,当T[i]<i 时,对任意的0≤j≤i 有T[j]≤T[i] -i+j <i-i +j =j。
由①和②可知,用二分搜索法可以在O(logn)时间内找到所要的下标。
算法如下:
非递归二分搜索:
Template<class T>
int binarySearch(T a[],int left,int right)
{
int middle;
while(left<=right){
middle=(left+right)/2;//middle=(left+right)>>1;
if(middle==a[middle]) return middle;
if(middle>a[middle]) left=middle+1;
else right=middle-1;
}
return 0;
}
递归二分搜索:
Template<class T>
int FindFixedPoint(T a[],int left,int right)
{
int middle;
middle=(left+right)/2;//middle=(left+right)>>1;
if(left<=right){
if(middle==a[middle]) return middle;
else if(middle>a[middle]) FindFixedPoint(a,middle+1,right);
else FindFixedPoint(a,left,middle-1);
}
return 0;
}

设n个不同的整数排好序后存于T[1..n]中,若存在一个下标i(1≤ i ≤ n),使得T[i]=i。试设计一个有效算法找到这个下标,要求算法在最坏情形下的计算时间为O(log n)相关推荐

  1. 数据结构:试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域ILink把所有结点按照其值从小到大的顺序连接起来

    题目 试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域ILink把所有结点按照其值从小到大的顺序连接起来 分析 Template < ...

  2. 问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底

    问题描述 给定一个由n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径 ...

  3. 问题描述: 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。 试设计一个算法,计算出将n堆石子

    问题描述: 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆. 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 试设计一个算法,计算出将n堆石子 ...

  4. 设单链表中存放n个字符,试设计一个算法,使用栈推断该字符串是否中心对称...

    版权声明:本文为博主原创文章.未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/28281631 转载请注明出 ...

  5. 数据结构例16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序。

    /* 16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序. */ # include <iostream> # include <stdlib.h> # i ...

  6. 有一个顺序表L,其元素为整形数据,设计一个算法,将L中的所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分

    题目 有一个顺序表L,其元素为整形数据,设计一个算法,将L中的所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分 解答(天勤) /*************************** ...

  7. 离散数学试设计一个算法,对给定的集合A和集合A上的一个二元关 系R,判断R是否具有对称性

    题解: 通过标记来判断集合A上的元素,如果输入的数组内的数不存在于集合A,则会被标记不是集合内(ff[]或fff[]=-1,如果存在于集合A中则ff[]或fff[]=0)当ff和fff数组内元素均为0 ...

  8. AcWing 算法基础课第一节基础算法1排序、二分

    1.该系列为ACWing中算法基础课,已购买正版,课程作者为yxc 2.y总培训真的是业界良心,大家有时间可以报一下 3.为啥写在这儿,问就是oneNote的内存不够了QAQ ACwing C++ 算 ...

  9. Leapfrog Triejoin:最坏情况下的最优连接算法

    介绍 leapfrog triejoin是商业数据记录系统 LogicBlox® 采用的一种新颖的连接算法,在不同的基准测试中表现出色.leapfrog triejoin论文的写作者认为这个算法,即使 ...

最新文章

  1. 中国式姥姥上热搜感动无数人:有妈妈在,我才敢生娃
  2. ASP.NET Button控件的UseSubmitBehavior属性引发的血案
  3. php网页论坛制作教程,PHP开发 小型论坛教程之登录HTML页面
  4. python shell下载很慢_Python踩坑之旅其一杀不死的Shell子进程
  5. python汉诺塔问题_Python汉诺塔问题
  6. 相机添加多张图片css布局
  7. JupyterNotebook设置并切换不同Python启动环境
  8. [FFmpeg] CMake 单独编译 ffplay 之基础篇
  9. 什么情况下使用 if()后面的else可以省略不写
  10. JavaScript高级编程之树节点搜索过滤的设计和实现
  11. 银行如何构建反欺诈模型
  12. 支付宝支付时提示“长时间没操作,请重新发起请求”的错误处理
  13. [专利与论文-12]:高级职称评定的面试和答辩注意事项
  14. oracle分析函数用途,深入探讨:oracle中row_number() over()分析函数用法
  15. 2019版云计算大数据学习路线图(含大纲+视频+工具+书籍+面试)
  16. 去雾模块dehaze.py(可直接调用)
  17. 第三阶段---python基础---抽签点名案例
  18. 图像缩放--双线性内插法及其python实现(图文代码)
  19. CPU的频率、外频、倍频与超频
  20. Jetson Xavier NX相关安装

热门文章

  1. Thymeleaf文本连接和文字替换
  2. 6-2 线性表元素的区间删除
  3. [DeepLearning4j学习日记]-ND4J矩阵的基本操作
  4. Dedecms移动站静态化实操分享 - 堪称完美(附文件)
  5. C语言怎样提取一个数的十位个位百位千位?
  6. AQF、CIIA、CFA、FRM、CPA之间的区别
  7. TFBoys语音包上线导航深度娱乐化 高德地图语音导航功能实测
  8. 基于ansible role实现LAMP平台批量部署 - 推酷
  9. 公司乔迁新址了。。。
  10. 第一课:ASIC设计基本流程