xi123的个人博客分享 http://blog.sciencenet.cn/u/xi123

博文

数据结构之搜索(pyhon实现)

已有 1475 次阅读 2018-1-9 14:05 |个人分类:数据结构|系统分类:科研笔记

简单起见,每个函数处理一个整数序列,列表以参数的形式传递给函数。

一、搜索最小值

   给定一个列表,不为空,其中项的顺序是任意的,找到其最小值,并返回其索引。(该函数为python中min的代替版本)该函数的需要的比较的次数为n-1.(n为列表的长度)

#搜索最小值
def indexOfMin(lyst):
minIndex=0
currentIndex=1
while currentIndex<len(lyst):
       if lyst[currentIndex]<lyst[minIndex]:
minIndex=currentIndex
currentIndex += 1
return minIndex

二、顺序搜索一个列表

   该方法在列表(无序)中搜索一个特定的项,从第一个项的位置开始,将其与目标项进行比较,如果两个项相同则返回true,否则移到下一个位置进行比较返回,直到最后一个位置,若仍然没找到目标项则返回false。这种搜索成为顺序搜索。

#顺序搜索
def sequentialSearch(target,lyst):
position=0
while position < len(lyst):
       if target == lyst[position]:
           return 1
position += 1
return -1

算法的性能取决于所处理数据的放置方式,通常考虑算法的平均性能和最坏情况的性能

1、最坏情况,目标项位于列表末尾,或者不在列表中,需要迭代n次;

2、最好情况,目标项位于列表第一个位置,只需一次迭代;

3、平均情况,目标项出现在每个位置的概率相同,则平均需要(n+1)/2次迭代;

三、二分查找

   对于无序列表顺序搜索是必要的,当搜索有序列表时,可以使用二分查找。其思路为:首先假设列表中的项都是升序排列,然后直接找到列表中间位置,并将该位置的项与目标项进行比较,如果一致则返回该位置;否则目标小于当前项则搜索列表中间位置以前的部分;如果目标大于当前项则搜索列表中间位置以后的部分。当找到目标或当前的开始位置比当前结束位置要大时,停止搜索。

(python3以上版本,“/”为浮点数除法,返回浮点数;“//”为整数除法,返回整数)

#二分查找
def binarySearch(target,sortedLyst):
left=0
right=len(sortedLyst)-1
while left<right:
mid=(left+right)//2
if target == sortedLyst[mid]:
           return mid
elif target<sortedLyst[mid]:
right=mid - 1
else:
left=mid + 1
return -1

当目标不在该列表中该算法出现最坏的情况,此时列表长度n/2/2/2/……=1时迭代停止,迭代次数为k,k满足2的k次方等于n,所以最坏的情况是log(n)。

二分搜索可能比顺序搜索更为高效,选取何种算法,取决于列表中的数据组织形式。对于二叉树有一个额外的整体性代价,就是必须保持列表有序。






https://blog.sciencenet.cn/blog-3360373-1093919.html

上一篇:window7下anaconda安装
下一篇:数据结构之排序一(python实现)
收藏 IP: 218.30.113.*| 热度|

1 杨锦忠

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-21 20:17

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部