[DS+Algo] 008 查找
1. 常见搜索方法
- 顺序查找
- 最优时间复杂度:O(1)
- 最坏时间复杂度:O(n)
- 二分法
- 最优时间复杂度:O(1)
- 最坏时间复杂度:O(logn)
- 二叉树
- 若是“二叉搜索树”
- 最优时间复杂度:O(1)
- 最坏时间复杂度:O(logn)
- 若是“二叉搜索树”
- 哈希
- 时间复杂度:O(1)
2. 二分查找的代码实现
- 顺序查找,就是一个循环遍历
- BST,其实和二分换汤不换药
- 哈希,暂且按下不表
代码实现
from random import randrange
def binary_search_1(lst, item):
first = 0
last = len(lst) - 1
while first <= last:
mid = (first + last) // 2
if lst[mid] == item:
return True
elif item < lst[mid]:
last = mid - 1
else:
first = mid + 1
return False
def binary_search_2(lst, item):
n = len(lst)
if n == 0:
return False
mid = n // 2
if lst[mid] == item:
return True
elif item < lst[mid]:
return binary_search_2(lst[:mid], item)
else:
return binary_search_2(lst[mid+1:], item)
if __name__ == "__main__":
lst = [i+randrange(0, 5) for i in range(0, 100, 5)]
r_num = randrange(0, 100)
print("lst =", lst)
print(f"binary_search_1(lst, {r_num}):", binary_search_1(lst, r_num))
print(f"binary_search_2(lst, {r_num}):", binary_search_2(lst, r_num))
[DS+Algo] 008 查找的更多相关文章
- DS哈希查找--线性探测再散列
题目描述 定义哈希函数为H(key) = key%11.输入表长(大于.等于11),输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字. --程序要求-- 若使用C++只能include一个 ...
- [DS+Algo] 002 一维表结构
目录 1. 顺序表 1.1 分类 1.2 实现方式 1.3 扩容问题 1.4 操作 2. 链表 2.1 分类 2.2 链表相关操作 2.3 链表 VS 顺序表 3. 关于代码实现 1. 顺序表 1.1 ...
- [DS+Algo] 011 哈希
目录 1. hash 函数 2. 哈希表 3. 密码存储 1. hash 函数 关键词 任意长度输入 固定长度输出 特征 理论上输入跟输出并不是一对一 实际使用假定不会出现碰撞或者冲突 常用算法 (M ...
- [DS+Algo] 010 二叉树的遍历
二叉树遍历 深度优先 一般用递归 一些名词 遍历方式 英文 先序 Preorder 中序 Inorder 后序 Postorder 广度优先 一般用队列 Python 代码示例 class Node( ...
- [DS+Algo] 009 树的介绍
目录 1. 树的概念 2. 树的术语 3. 树的种类 4. 常见应用场景 5. 二叉树 1. 树的概念 每个结点(节点)有 0 个或多个子结点 没有父结点的结点称为根结点 每一个非根结点有且只有一个父 ...
- [DS+Algo] 007 希尔排序及其代码实现
步骤 将数组列在一个表(一行多列)中,按特定的步长进行插入排序 步长从 length/2 到 1,每次除 2 将数组转换至表是为了更好地理解这算法,算法本身还是使用数组进行排序 算法性能 (根据步长序 ...
- [DS+Algo] 006 两种简单排序及其代码实现
目录 1. 快速排序 QuickSort 1.1 步骤 1.2 性能分析 1.3 Python 代码示例 2. 归并排序 MergeSort 2.1 步骤 2.2 性能分析 2.3 Python 代码 ...
- [DS+Algo] 005 三种简单排序及其代码实现
目录 1. 冒泡排序 BubbleSort 1.1 算法描述 1.2 性能分析 1.3 Python 代码实现 2. 选择排序 SelectionSort 2.1 算法描述 2.2 选择排序的主要优点 ...
- [DS+Algo] 004 栈、队列及其代码实现
1. Stack FILO (FirstInLastOut) 的链表结构 在程序编译环境上使用较多 常用操作 push pop peek is_empty size Python 代码示例 class ...
随机推荐
- 【python基础】元组方法汇总
一.定义 用于存储一组数据的有序序列, 一旦创建, 元组中的各个元素不允许修改 二.特点 1.元组有序; 2.元组是不可变的数据类型;不可修改; 3.元组中可以存储重复的数据; 4.元组中可以同时存储 ...
- Django报错 No module named 'django.templates'
前言 Django 模板报错了 修改方法: 将你的工程文件下(my_site)的settings.py中的TEMPLATES中的templates字段全部改为template, 亲测可用~^~
- Gym-100923H-Por Costel and the Match(带权并查集)
链接: https://vjudge.net/problem/Gym-100923H 题意: Oberyn Martell and Gregor Clegane are dueling in a tr ...
- mysql 8.0.16 单主 mgr搭建
mysql 8.0.16 单主 mgr搭建 环境介绍: 192.168.142.142 db142192.168.142.143 db143192.168.142.145 db145 1.安装依赖包 ...
- Python:查看解释器的位置
以前学Python时,有时出现这样的情况:明明记得装了scipy包,怎么打import scipy报错说我没这个包? 问题出在,你的电脑上安装了不止一个Python... 而每安装一个包,仅仅在这个P ...
- 使用net命令启动MongoDB服务发生系统错误,返回值为5
使用net命令启动MongoDB服务发生系统错误,返回值为5 错误的截图如下: 解决的方案是以管理员的身份运行命令窗口,参考如下: https://www.cnblogs.com/fanblogs/p ...
- 类型xxx 无法反序列化。缺乏对应的数据成员。
WebApi——json返回多了 k_BackingField 产生原因: model类添加了 [System.Serializable] 返回json的时候会出现.
- case 函数两种格式
1.简单case函数 CASE sex WHEN '0' THEN '男' WHEN '1' THEN '女' ELSE '其他' END 2.case搜索函数 CASE WHEN sex = '0' ...
- new 做了什么
var a=function(){ this.che1 = function () { console.log(1) } this.che2 = function () { console.log(2 ...
- BZOJ 3197: [Sdoi2013]assassin 树形DP + 最小费用流 + 树的同构
Description Input Output 其实就是给出两颗树,求一种两种树同构的方式,使得不同颜色个数最少$.$树的重新构建,其实就是指定不同的点为根节点$.$ 好在树的重心有一个重要的性质: ...