ITPub博客

首页 > 数据库 > > DB 从算法理解 DB 原理 --- 内存中找数据的方法 1

DB 从算法理解 DB 原理 --- 内存中找数据的方法 1

作者:liuaustin 时间:2020-04-25 17:23:42 0 删除 编辑

今天的任务是写一个模拟在内存中找数据的算法(之一),在内存中寻找数据中还是通过指针的方式进行查找对应的值。


下图有一组值,需要找到值为8 的值,当然给定这一列值也是有要求的就是需要这个组值是有顺序的,无须的查找这里不进行讨论。值也是从大到小的来进行查找。这里通过两个指针(python 里面的list 的角标)来模拟整个过程。


在查找中整体分为六个步骤

1  确定指针的定位,初始化时两个指针位置在 list 的两端,0 和 7+1 位置(list的值最低端的角标,和值最大位置的+1)

2   通过两个角标的值相加/2 得到 角标移动的位置点,首先移动的点在角标四,值为9 ,则与要想找的值8进行比较后, 目前指针移动后的位置并不是要找的数值,并且值大于要找的值,则后面的指针进行移动。


3   再次进行角标的运算(0+4)/2 = 2 ,角标为2的位置值为7 ,7 小于要找的值8 则第一个指针进行移动


4  两个指针一个在角标 2  一个在角标 4  ,则 (2+4)/2,下一次的角标要挪到3,根据角标3的值是8 对比我们要找到的数值 8 ,则我们要找的数据找到。


下面是这段程序


但实际上这样的程序在某些特殊情况下就会出现问题

1 当list 只有一个元素的时候,整体程序会无法运行

2 当list 只有两个元素的时候,整体程序会报错,index out of range


所以必须根据当列表中的元素只有1 个 和两个的时候,进行特殊的处理,避免程序出错。

整体的程序会进行更多的判断,对于列表中只有一个元素的时候,直接判断查找的值和拥有的值,是否一致,并给出结果,对于2个元素的时候,也直接进行判断,并给出结果。

所以看似这个程序已经没有问题了,但实际上还是有问题,有漏洞。

漏洞的问题点,在于输入的数字如果大于或者小于列表已经存在的值,则系统会崩溃。

则添加一条判断值是否包含在已存在列表的判断后,这个程序基本上的漏洞就补齐了



实际上,这段程序也就是实现了二分查找的一个python程序的实例。

#!/usr/bin/python3
arry_t = [1,3,5,7,10]
head_p = 0
head_e = len(arry_t) + 1
print (head_p + head_e)
value_t = int(input("输入你要找的值:"))
if value_t in arry_t:

if len(arry_t) > 2:
while head_e - head_p > 1:
mid = (head_e + head_p)//2
if value_t < arry_t[mid]:
head_e = mid
if value_t > arry_t[mid]:
head_p = mid
print(mid)
if value_t == arry_t[mid]:
print("结果找到了")
break
else:
if value_t == arry_t[head_e]:
print('结果找到')
else:
print("没有你要的结果")
else:
if len(arry_t) == 1 and arry_t[0] == value_t:
print("结果找到了")
else:
if len(arry_t) == 1:
print("没有你要的结果")
else:
if len(arry_t) == 2:
if arry_t[0] == value_t or arry_t[1] == value_t:
print("结果找到了")
else:
if len(arry_t) == 2:
print("结果没有找到")
else:
print("超过2个元素")
else:
print("结果没有找到")


原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2018-11-13

  • 博文量
    1980
  • 访问量
    518008