二分查找时间复杂度及其Python实现
二分查找假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
- 优点:比较次数少,查找速度快,平均性能好;
- 缺点:要求待查表为有序顺序表,且插入删除困难。
- 二分查找方法适用于不经常变动而查找频繁的有序列表。
- 二分查找最优时间复杂度是 O ( 1 ) O(1) O(1),最坏时间复杂度为 O ( l o g 2 n ) O(log_2n) O(log2n)。
假设总共有 n n n个元素,查找操作次数为 k k k,则每次查找的区间大小就是 n , n 2 , n 4 , … , n 2 k n,\frac{n}{2},\frac{n}{4},…,\frac{n}{2^k} n,2n,4n,…,2kn(接下来操作元素的剩余个数)。最好第一次操作就找到元素,时间复杂度为 O ( n ) O(n) O(n),最坏最后剩余的一个元素才是要查找的元素,即 n 2 k = 1 ⟹ k = l o g 2 n \frac{n}{2^k}=1\Longrightarrow k=log_2n 2kn=1⟹k=log2n(假设是整数),时间复杂度为 O ( l o g 2 n ) O(log_2n) O(log2n)
递归实现二分查找
# 返回 x 在 arr 中的索引,如果不存在返回 -1
def binarySearch (arr, l, r, x): # 基本判断if l <= r: mid = (l+r)//2# 元素整好的中间位置if arr[mid] == x: return mid # 元素小于中间位置的元素,只需要再比较左边的元素elif arr[mid] > x: return binarySearch(arr, l, mid-1, x) # 元素大于中间位置的元素,只需要再比较右边的元素else: return binarySearch(arr, mid+1, r, x) else: # 不存在return -1# 函数调用
result = binarySearch(arr, 0, len(arr)-1, x)
非递归实现二分查找
def binarySearch (arr, x): n=len(arr)l,r=0,n-1while l<=r:mid=(l+r)//2if arr[mid]==x:return midelif arr[mid]>xr=mid-1else:l=mid+1return -1
二分查找时间复杂度及其Python实现相关推荐
- 二分查找时间复杂度的计算
二分查找(Binary Search) 1.使用条件: ①线性表采用顺序存储结构. ②表中元素按关键字有序排列. 2.时间复杂度:O(log2n) 3.推算过程: 假设序列里共有n个元素, 第一次,在 ...
- python二分查找时间复杂度_时间复杂度 二分查找
时间复杂度 时间复杂度是用来估计算法运行时间的一个式子(单位). 一般来说,时间复杂度高的算法比复杂度低的算法慢. 常见的时间复杂度(按效率排序) O(1) < O(log n) < O( ...
- python二分查找时间复杂度_二分查找算法的时间复杂度计算(logN)
二分查找算法的时间复杂度计算(logN) 马富天 2019-08-10 20:25:24 54 [摘要]二分查找算法是对顺序查找算法的优化,二分查找算法的前提是数列是一个有序数列,递增或者递减,本文就 ...
- 递归二分查找时间复杂度、空间复杂度和稳定性
递归 递归条件 自己调用自己 有结束条件 二分查找 二分查找对1~100乱序数字查找 l = list(range(1,101)) def bin_search(data_set,val):low = ...
- 二分查找时间复杂度分析
主要还是从算法所占用的「时间」和「空间」两个维度去考量. 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述. 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂 ...
- 顺序查找与二分查找时间复杂度的比较
注意要点:通过System.currentTimeMills();来获取当前时间,来计算该算法运行运算时间 顺序查找的时间复杂度为O(n) 二分查找的时间复杂度为O(log(n)) 但两 ...
- 解析二分查找时间复杂度
话不多说,先来段二分查找的代码. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int BinSearch(int arr[], in ...
- 快速排序和二分查找时间复杂度详解
因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n/2两次二分剩下:n/2/2 = n/4...m次二分剩下:n/(2^m)在最坏情况下是在排除到只剩下最后一个值之后得到结 ...
- 二分查找时间复杂度计算与分析
二分查找: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是 ...
最新文章
- java中的foreach语句
- 彻底弄懂C语言数组名
- 申请英国学校最晚什么时候考出雅思呢?
- ubuntu18.04下安装中文输入法
- GCC编译过程以及对应FILE文件表
- 专家称 AI 可以在 120 年内接管人类的所有工作
- 给表中指定位置添加字段_利用VBA代码,轻松完成向工作表中添加指定图片到指定位置...
- mongodb查询的语法(大于,小于,大于或等于,小于或等于等等)
- @suppressWarnings解释
- Matlab读取TXT文本文件通用程序
- 2021 Summary
- 仅需3 小时,如何用 AI 做场景贴图,完成场景制作 ?AI创作工作流探索
- java crumb_vuex中,我在index.vue组件设置的值,为什么在另外一个组件crumb.vue获取不到...
- gif制作——电脑完全免费GIF录制工具下载
- 为什么要用Handler,怎么用Handler
- BJOI2019 奥术神杖
- Python变量与字符串操作
- 为什么我的淘宝排名会突然下降?
- 华为java面试题目
- 细分市场——电视重生 | 《商业价值》杂志