例子:猜一个1到100之间的数,最多猜几次?

# 最糟糕的猜法:一个一个的猜

  - 最多查找次数: n 
  - 运行时间: O(n)

# 二分查找:在有序的一组数中猜一个数,对半猜。找到返回其位置(索引),否则返回null

  - 最多查找次数: log₂n 
  - 运行时间:O(logn)

  eg:从1到100找一个数,最多查找 log₂100次。 2的7次方大于等于128,所以最多查找7次

# 理解:每次从中间找

代码:

 /**
* @method: test
* @des: 二分查找 - 在有序的一组数中猜一个数,对半猜
* @param {list} - 一组数
* @param {item} - 要猜的数
* @return:
*/
function test(list, item) {
var low = 0;
var high = '';
var mid = '';//中间数 ---找到后的索引
var guess = '';
if (Object.prototype.toString.call(list) == "[object Array]") {
high = list.length - 1;
}
while (low <= high) {
mid = Math.floor((low + high)/2);
guess = list[mid];
if (guess == item) {//找到了数
console.log('找到',mid);
}
if (guess > item) {//猜的数大了
high = mid - 1;
console.log('大了',high);
} else {
low = mid + 1;
console.log('小了',low);//猜的数小了
}
console.log('none');
}
} var o_list = [1,3,5,7,9,11];
test(o_list,7);

# 大O运行时间
- O(n) 线性时间
- O(logn) 对数时间 - 二分查找
- O(n*logn) 速度较快 - 快速排序
- O(n²) 速度较慢 -选择排序
- O(n!) 非常慢 - 旅行商问题

算法图解 - 第1章 二分查找 与大O的更多相关文章

  1. 递归分治算法之二维数组二分查找(Java版本)

    [java] /** * 递归分治算法学习之二维二分查找 * @author Sking 问题描述: 存在一个二维数组T[m][n],每一行元素从左到右递增, 每一列元素从上到下递增,现在需要查找元素 ...

  2. 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素

    [算法训练营day1]LeetCode704. 二分查找 LeetCode27. 移除元素 LeetCode704. 二分查找 题目链接:704. 二分查找 初次尝试 看到题目标题是二分查找,所以尝试 ...

  3. 【算法】二分查找法&大O表示法

    二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...

  4. 常见的排序算法(直接插入&选择排序&二分查找排序)

    1.直接插入排序算法 源码: package com.DiYiZhang;/* 插入排序算法 * 如下进行的是插入,排序算法*/ public class InsertionSort {    pub ...

  5. 集训第四周(高效算法设计)N题 (二分查找优化题)

    原题:poj3061 题意:给你一个数s,再给出一个数组,要求你从中选出m个连续的数,m越小越好,且这m个数之和不小于s 这是一个二分查找优化题,那么区间是什么呢?当然是从1到数组长度了.比如数组长度 ...

  6. 集训第四周(高效算法设计)B题 (二分查找优化题)

    ---恢复内容开始--- Description   Before the invention of book-printing, it was very hard to make a copy of ...

  7. 【Java数据结构与算法】简单排序、二分查找和异或运算

    简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...

  8. 二分查找法&大O表示法

    二分查找法的输入是一个有序的元素列表,如果要查找的元素包含在列表中,二分查找返回其位置,否则返回null Python代码(来源于<算法图解>一书): def binary_search( ...

  9. 【算法模板】Binary Search 二分查找

    模板:(通用模板,推荐) 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1. ...

  10. 集训第四周(高效算法设计)C题 (二分查找优化题)

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

随机推荐

  1. 十进制转化十六进制 && 各类进制转换问题详解

    问题描述 十六进制数是在程序设计时经常要使用到的一种整数的表示方式.它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15.十六进制的计数方法是满1 ...

  2. C++实现顺序栈相关操作代码

    #include<iostream>#include<cstdlib>using namespace std;#define MAXSIZE 100#define OK 1#d ...

  3. Excel之VLOOKUP()函数的基本用法

    语法: VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup]) 规则:  注意: 查找的值:内容需要完全一样 查找范围:查找范围的 ...

  4. SpringBoot 自定义启动的logo(即banner)

    1.自定义输出banner样式 推荐生成网站 http://patorjk.com/software/taag/ https://www.bootschool.net/ascii-art 2.配置 A ...

  5. Experience Cloud

    通过Apex的方式上传 Topic: String communityId = [Select Id from Network where Name = 'MobileMNOCS'].Id; Inte ...

  6. mysql5.7 不兼容问题

    通过navicat工具导入psc数据库备份文件,报错如下,mysql版本5.7 执行如下语句不通过 DROP TABLE IF EXISTS `guard_user`; CREATE TABLE `g ...

  7. Cygwin64静默安装办法

    下载地址: http://www.cygwin.com/setup-x86_64.exe 静默安装办法: .\setup-x86_64.exe --no-shortcuts --root D:\\Cy ...

  8. 遇到bug怎么分析,这篇文章值得一看

    博主总结的非常到位:https://mp.weixin.qq.com/s/UpaLWjix2tnfTqybx9dmoQ 为什么定位问题如此重要? 可以明确一个问题是不是真的"bug" ...

  9. IDEA中常见问题

    idea中不存在.iml文件项目主目录下执行命令行mvn idea:module

  10. groupByKey、reduceByKey、aggregateByKey、foldByKey、combineByKey的联系和区别

    groupByKey根据key对value进行分组,默认没有预聚合 combineByKeyWithClassTag[CompactBuffer[V]]( createCombiner, mergeV ...