算法图解 - 第1章 二分查找 与大O
例子:猜一个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的更多相关文章
- 递归分治算法之二维数组二分查找(Java版本)
[java] /** * 递归分治算法学习之二维二分查找 * @author Sking 问题描述: 存在一个二维数组T[m][n],每一行元素从左到右递增, 每一列元素从上到下递增,现在需要查找元素 ...
- 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素
[算法训练营day1]LeetCode704. 二分查找 LeetCode27. 移除元素 LeetCode704. 二分查找 题目链接:704. 二分查找 初次尝试 看到题目标题是二分查找,所以尝试 ...
- 【算法】二分查找法&大O表示法
二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...
- 常见的排序算法(直接插入&选择排序&二分查找排序)
1.直接插入排序算法 源码: package com.DiYiZhang;/* 插入排序算法 * 如下进行的是插入,排序算法*/ public class InsertionSort { pub ...
- 集训第四周(高效算法设计)N题 (二分查找优化题)
原题:poj3061 题意:给你一个数s,再给出一个数组,要求你从中选出m个连续的数,m越小越好,且这m个数之和不小于s 这是一个二分查找优化题,那么区间是什么呢?当然是从1到数组长度了.比如数组长度 ...
- 集训第四周(高效算法设计)B题 (二分查找优化题)
---恢复内容开始--- Description Before the invention of book-printing, it was very hard to make a copy of ...
- 【Java数据结构与算法】简单排序、二分查找和异或运算
简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...
- 二分查找法&大O表示法
二分查找法的输入是一个有序的元素列表,如果要查找的元素包含在列表中,二分查找返回其位置,否则返回null Python代码(来源于<算法图解>一书): def binary_search( ...
- 【算法模板】Binary Search 二分查找
模板:(通用模板,推荐) 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1. ...
- 集训第四周(高效算法设计)C题 (二分查找优化题)
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
随机推荐
- javascript的属性描述符
什么是属性描述对象(attributes object)? 顾名思义,就是用来描述对象属性的对象.javascript内部提供了一个数据结构,用来描述对象的属性以及控制属性的行为. 比如该对象的某属性 ...
- netstate查找端口占用
netstat -nao 列出本机端口占用信息加上|findstr 筛选 各个字段的意思: 协议 本地地址:端口 外部地址:端口 状态 PID 这 ...
- TensorFlow中的Session
这一次我们会讲到 Tensorflow 中的 Session, Session 是 Tensorflow 为了控制,和输出文件的执行的语句. 运行 session.run() 可以获得你要得知的运算结 ...
- python 自动化 代码操作数据库
import pymysql from pymysql import connect con=pymysql.connect(host='localhost',port=3306,database=' ...
- CodeGym自学笔记06——内存寻址和变量
内存寻址和变量 print() print() 函数用于在屏幕上逐个字符显示文本.当屏幕上某一行没有足够空间时,文本开始在下一行显示. println() 可以使用 println() 函数停止在当前 ...
- 30分钟熟练使用最常用的ES6,还不学是等着被卷死?
一. 关于ES6 了解一门技术或者语言,最好的方法就是知道它能做些什么 ES6 , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范 那么它为什么会出现呢? 每一次标准的诞生都意味着语 ...
- 关于我在安装2.6.9版本bochs虚拟机时遇到的问题以及解决过程
更新于:2019.7.2 在阅读<一个64位操作系统的设计与实现>过程中,搭建实验环境遇到的诸多困难. 本人的实验环境:vmware15.0 下安装有kali-liunx虚拟机里进行的安装 ...
- API的风格
好奇怪呀,感觉所有风格不都差不多嘛 1.REST REST(REpresentational State Transfer),首次出现在 2000 年 Roy Thomas Fielding 的博士论 ...
- Symbol类型
Symbol 是ES6引入的一种新的原始数据类型,由于Symbol是一个原始类型的值,不是对象,不能添加属性.基本上 是一种类似于字符串的数据类型 概述 Symbol 可以接受一个字符串作为参数,主要 ...
- QT-groupBox组件内的组件失去交互功能
属性设置: 首先 然后 可以实现.