算法图解 - 第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( ...
随机推荐
- 十进制转化十六进制 && 各类进制转换问题详解
问题描述 十六进制数是在程序设计时经常要使用到的一种整数的表示方式.它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15.十六进制的计数方法是满1 ...
- C++实现顺序栈相关操作代码
#include<iostream>#include<cstdlib>using namespace std;#define MAXSIZE 100#define OK 1#d ...
- Excel之VLOOKUP()函数的基本用法
语法: VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup]) 规则: 注意: 查找的值:内容需要完全一样 查找范围:查找范围的 ...
- SpringBoot 自定义启动的logo(即banner)
1.自定义输出banner样式 推荐生成网站 http://patorjk.com/software/taag/ https://www.bootschool.net/ascii-art 2.配置 A ...
- Experience Cloud
通过Apex的方式上传 Topic: String communityId = [Select Id from Network where Name = 'MobileMNOCS'].Id; Inte ...
- mysql5.7 不兼容问题
通过navicat工具导入psc数据库备份文件,报错如下,mysql版本5.7 执行如下语句不通过 DROP TABLE IF EXISTS `guard_user`; CREATE TABLE `g ...
- Cygwin64静默安装办法
下载地址: http://www.cygwin.com/setup-x86_64.exe 静默安装办法: .\setup-x86_64.exe --no-shortcuts --root D:\\Cy ...
- 遇到bug怎么分析,这篇文章值得一看
博主总结的非常到位:https://mp.weixin.qq.com/s/UpaLWjix2tnfTqybx9dmoQ 为什么定位问题如此重要? 可以明确一个问题是不是真的"bug" ...
- IDEA中常见问题
idea中不存在.iml文件项目主目录下执行命令行mvn idea:module
- groupByKey、reduceByKey、aggregateByKey、foldByKey、combineByKey的联系和区别
groupByKey根据key对value进行分组,默认没有预聚合 combineByKeyWithClassTag[CompactBuffer[V]]( createCombiner, mergeV ...