查找与哈希算法

本文介绍了三种常见的查找算法:顺序查找、二分查找和插值查找,并通过Python代码示例展示了每种方法的实现过程。同时,讨论了哈希法的基本原理,包括除留余数法、平方取中法、折叠法,并提到了处理碰撞和溢出问题的线性探测法、平方探测法和再哈希法。
摘要由CSDN通过智能技术生成

常见查找算法
影响查找时间长短的主要因素有算法,数据存储和方式及结构。如果是以查找过程中被查找的表格或数据是否变动来分类,则可以分为静态查找(Static Search)和动态查找(Dynamic Search)

静态查找是指数据在查找过程中,该查找数据不会有添加,删除或更新等操作。动态查找则是指所查找的数据,在查找过程中会经常性添加,删除或更新

一.顺序查找法
1原理简介
顺序查找法又称线性查找法,是一种最简单的查找法。它的方法是将数据一项一项地按顺序逐个查找,所以不管数据顺序如何,都得从头到尾遍历一次。此法的优点是文件在查找前不需要进行任何的处理与排序,缺点为查找速度较慢

2.例子说明
3.程序说明
3.1功能要求
以随机数生成1–150之间的80个整数,然后实现顺序查找法的过程

3.2源程序

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author LQ6H

import random

val = 0
data = [0]*80

for i in range(80):
    data[i] = random.randint(1,150)

while val!=-1:
    find = 0
    val = int(input("请输入查找键值(1-150),输入-1离开:"))

    for i in range(80):
        if data[i] == val:
            print("在第%3d个位置找到键值[%3d]" %(i+1,data[i]))
            find +=1
    if find==0 and val!=-1:
        print("-----没有找到[%3d]-----" %val)

print("数据内容为:")
for i in range(10):
    for j in range(8):
        print("%2d[%3d]" %(i*8+j+1,data[i*8+j]),end=" ")
    print("")

3.3运行说明

请输入查找键值(1-150),输入-1离开:36
-----没有找到[ 36]-----
请输入查找键值(1-150),输入-1离开:12
-----没有找到[ 12]-----
请输入查找键值(1-150),输入-1离开:58
-----没有找到[ 58]-----
请输入查找键值(1-150),输入-1离开:69
-----没有找到[ 69]-----
请输入查找键值(1-150),输入-1离开:1
在第 70个位置找到键值[  1]
请输入查找键值(1-150),输入-1离开:-1
数据内容为:
1[138]  2[100]  3[ 54]  4[ 89]  5[ 70]  6[ 79]  7[121]  8[120] 
9[ 50] 10[135] 11[ 87] 12[143] 13[128] 14[ 74] 15[122] 16[150] 
17[ 25] 18[100] 19[141] 20[ 72] 21[  5] 22[123] 23[150] 24[ 64] 
25[130] 26[141] 27[ 27] 28[ 71] 29[ 87] 30[ 60] 31[121] 32[143] 
33[ 23] 34[148] 35[  2] 36[ 91] 37[105] 38[ 90] 39[144] 40[132] 
41[ 68] 42[ 29] 43[ 30] 44[ 51] 45[104] 46[  6] 47[111] 48[ 75] 
49[ 50] 50[ 95] 51[ 85] 52[ 72] 53[ 94] 54[ 41] 55[ 72] 56[112] 
57[ 38] 58[ 16] 59[102] 60[ 97] 61[134] 62[ 48] 63[ 56] 64[110] 
65[  6] 66[116] 67[105] 68[147] 69[ 17] 70[  1] 71[ 60] 72[ 56] 
73[ 97] 74[ 82] 75[135] 76[125] 77[117] 78[ 61] 79[ 47] 80[ 38] 

二.二分查找法
1.原理简介
如果要查找的数据已经事先排好序了,则可使用二分查找法来进行查找。二分查找是将数据分割成两等份,再比较键值与中间值的大小,如果键值小于中间值,可确定要查找的数据在前半段,否则在后半部分。如此分割数次直到找到或确定不存在为止

2.例子说明
3.程序说明
3.1功能要求
随机数生成1–150间的80个整数,然后实现二分查找法的过程与步骤

3.2源程序

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author LQ6H

import random

def bin_search(data,val):
    low = 0
    high = 49<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值