顺序查找

顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法,顺序查找是最简单的搜索算法,其实现如下:

def sequential_search(items, item):for i in items:if i == item:return ielse:return False

适用于线性表的顺序存储结构和链式存储结构,该算法的时间复杂度为O(n)。

缺点:是当n 很大时,平均查找长度较大,效率低;

优点:是对表中数据元素的存储没有要求。另外,对于线性链表,只能进行顺序查找。

哈希查找算法

哈希查找算法,依赖哈希表这种数据结构,它是以键值对的形式存储数据,对于哈希查找算法来说,其时间复杂度为O(1),Redis数据表中也有哈希存储,储存形式是键值对。

python实现哈希数据结构及其哈希查找算法:

class HashTable:def __init__(self, size):self.elem = [None for i in range(size)]  # 使用list数据结构作为哈希表元素保存方法self.count = size  # 最大表长

def hash(self, key):return key % self.count  # 散列函数采用除留余数法

def insert_hash(self, key):"""插入关键字到哈希表内"""address = self.hash(key)  # 求散列地址while self.elem[address]:  # 当前位置已经有数据了,发生冲突。address = (address + 1) % self.count  # 线性探测下一地址是否可用self.elem[address] = key  # 没有冲突则直接保存。

def search_hash(self, key):"""查找关键字,返回布尔值"""star = address = self.hash(key)while self.elem[address] != key:address = (address + 1) % self.countif not self.elem[address] or address == star:  # 说明没找到或者循环到了开始的位置return Falsereturn True

源码来自:https://www.cnblogs.com/lsqin/p/9342929.html

哈希查找的产生有这样一种背景——有些数据本身是无法排序的(如图像),有些数据是很难比较的(如图像)。如果数据本身是无法排序的,就不能对它们进行比较查找。

如果数据是很难比较的,即使采用折半查找,要比较的次数也是非常多的。因此,哈希查找并不查找数据本身,而是先将数据映射为一个整数(它的哈希值),并将哈希值相同的数据存放在同一个位置一即以哈希值为索引构造一个数组。

在哈希查找的过程中,只需先将要查找的数据映射为它的哈希值,然后查找具有这个哈希值的数据,这就大大减少了查找次数。

如果构造哈希函数的参数经过精心设计,内存空间也足以存放哈希表,查找一个数据元素所需的比较次数基本上就接近于一次。

python实现顺序查找和哈希查找算法相关推荐

  1. 数据结构和算法系列13 五大查找之哈希查找

    原文地址 http://www.cnblogs.com/mcgrady/p/3294871.html 数据结构和算法系列13 五大查找之哈希查找 这一篇要总结的是五天查找的最后一篇,哈希查找,也称为散 ...

  2. C/C++折半查找与哈希查找[2023-05-11]

    C/C++折半查找与哈希查找[2023-05-11] 4.折半查找与哈希查找(难度等级 A) [问题描述] 查找是通过在查找表中做比较来完成的操作.折半查找与哈希查找都是利用数组实现的查找算法.通过本 ...

  3. python实现顺序查找和哈希查找

    顺序查找非常简单,只是个开胃菜,今天主要练习的是哈希查找 先上顺序查找代码: def sequence_search(array, num):for i in range(len(array)):if ...

  4. C++实现查找 - 顺序、二分和哈希查找

    数据结构与算法专栏 -- C++实现 写在前面: 前面我们其实已经涉及到了查找算法,比如二叉排序树和平衡二叉树等.这一讲我们来补充一下其它常见的查找算法,下面我会依次讲解并实现顺序查找.二分查找和哈希 ...

  5. 数据结构哈希查找的C语言实现

           大家好,我是练习编程时长两年半的昆工第一ikun,今天我们来分享查找算法中的一个--哈希查找,哈希查找适用于有庞大的数据量时的查找,是一种很好用的查找算法,话不多说,开团!!! 一.六种 ...

  6. 第四周python笔记 Python封装结构 哈希查找 杨辉三角 冒泡排序

    知识点:浅拷贝 字符串  封装解构 集合 ipython 哈希查找与线性查找  代码实现:杨辉三角 冒泡排序 list复制 是浅拷贝 简单类型 新开地址 拷贝数值 引用类型 只拷贝引用 直接拷贝地址 ...

  7. python中顺序查找法例子_Python查找算法(一)------ 顺序查找

    查找算法  --  简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由用一类型的数据元素构成的集合 关健字( ...

  8. python实现顺序查找

    1.顺序查找也成为线性查找,其核心思想是遍历列表挨个查找元素: def linear_search(li,val):for ind, v in enumerate(li):# print(ind)# ...

  9. 查找 之 散列表查找(哈希表)

    基础概念 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key).这里对应关系f称为散列函数,又称为哈希(Hash)函数. 采用散列技术将 ...

最新文章

  1. jsp和servlet开发过程中参数传递乱码问题总结
  2. 冒泡排序(O(n^2))
  3. android按钮点击事件(多种方法实现)
  4. HTTPS 原理详解
  5. 分布式ID业界解决方案
  6. linux之通过tail命令动态跟踪日志文件里面的末尾信息
  7. gulp+PC前端静态页面项目开发
  8. 汉语诗词 LaTeX 排版样式
  9. UE4官方文档链接记录
  10. 40行代码爬取金庸所有武侠小说
  11. visio 模板_Mac软件推荐:免费的流程图软件,完美替代Visio
  12. eeupdate使用说明_UNRAID中文插件分享以及部分问题解决方案
  13. nginx常用伪静态设置
  14. return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Replacing columns cSerDe may be incompati
  15. MYSQL 判断一个时间段是否在另一个时间段内。
  16. 用vs20008生成MFC项目,测试wince
  17. Python之文件的读写
  18. Asp.Net Newtonsoft.Json使用教程
  19. 利用Java线程及JFrame面板制作一个随机摇号小程序
  20. 罗技MX Keys从蓝牙连接切换为优联(无线接收器)连接

热门文章

  1. gradle 修改java代码_Gradle 插件
  2. React17事件委托的变更
  3. 8个JavaScript题目
  4. win7计算机找不到脚本文件夹,win7系统开机出现无法找到脚本文件怎么办
  5. 在linux系统下java实现pdf导出汉字无法显示_Linux环境下iText生成pdf中文不显示问题...
  6. 计算机考研哈理工好吗,哈尔滨理工大学考研难吗?一般要什么水平才可以进入?...
  7. 20200505:力扣151周周赛上
  8. 达梦数据库查看某个表的字段类型、常用数据库驱动类名以及URL
  9. ueditor 覆盖下拉框问题解决
  10. SCPPO(八):登录实现逻辑