网络信息安全概述-上海大学

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

def find2D(matrix,row,col,x): for i in range(row):
for j in range(col):
if matrix[i][j] == x: return (i+1,j+1)
return -1
6
上海大学
Shanghai University
算法2:二分查找
指令是良定义的,能行的
算法设计是创造性的智力活动
计 算 中 心 编 制
3
但有一些行之有效的设计方法
算法有好坏之分
时间复杂度 空间复杂度
3
上海大学
Shanghai University
查找问题和算法
查找是指在一个集合里找到一个特定值的过程 简单的查找函数search()
def search(x,nums): #x是一个数字,nums是一个列表
比目标大的值而仍未找到,就可以退出查找,平均节约一 半的工作时间
上海大学
Shanghai University
二维搜索空间的枚举
如何查找矩阵元素?
a11 a 21 a31 a12 a13 a 22 a32 a 23 a33 a14 a 24 a34
嵌套循环
计 算 中 心 编 制
end_time=clock()
total_time=total_time+end_time-start_time avg_time=total_time/T print “Searching time in binary search is %f”%avg_time
上海大学
Shanghai University
if x==item:
return mid elif x<item: high=mid-1
#找到目标值,返回索引位置
#目标值可能在低半部分
else:
#目标值可能在高半部分
上海大学
Shanghai University
算法比较
上述两种查找算法比较:线性查找算法容易理解和实现;
二分查找更高效
问题数据规模不大,算法容易实现更重要;规模很大,效
第七章 算法设计与实现
上海大学
Shanghai University
本章重点
1.
分析算法有效性的基本方法
2. 查找、排序问题的基本解决方法 3. 算法设计中的计算思维 计
算 中 心 编 制
上海大学
Shanghai University
算法
回顾:算法是解决问题的一步一步的过程 .
有限的指令序列
#测试集规模
计 算 中 心 编 制
start_time=clock() search_linear(randint(0,N),nums)
end_time=clock()
total_time=total_time+end_time-start_time avg_time=total_time/T print “Searching time in linear search is %f”%avg_time
def search_linear(x,nums):
for I in range(len(nums)): if nums[i]==x: #找到目标值,返回值的索引 #循环结束,目标值不在索引中
return i
计 算 中 心 编 制
return -1
线性查找算法简单,对小规模无序列表效率较高
若列表有序(如从低到高排列),查找过程中只要遇到
另一种评价算法的方法是通过抽象算法的数学特性,分析
上海大学
Shanghai University
算法比较
假设一个北京市人口电话本按拼音顺序排列了20000000名
字和对应的电话号码。随便给出一个名字,采用二分查找
最多需要log220000000次查找,约为25次;而采用线性查找, 平均需要10000000次,二分查找效率更高。
上海大学
Shanghai University
算法比较
测试二分查找算法运行时间的代码
N=1024*1024
T=100 nums=range(N) total_timቤተ መጻሕፍቲ ባይዱ=0.0 for i in range(T):
#测试集规模
计 算 中 心 编 制
start_time=clock() search_binary(randint(0,N),nums)
二分查找的对象是一个有序列表,从整个列表范围开始,
将目标值与查找范围的中间值比较,根据查找结果,将查 找范围折半,直到目标被找到或者已经没有查找空间
def search_binary(x,nums): low=0
high=len(nums)-1
计 算 中 心 编 制
while low<=high: mid=(low+high)//2 item=nums[mid] #中间项位置
#如果x在nums中,则返回nums中x的位置;否则返回-1
计 算 中 心 编 制

>>>search(4,[3,1,4,2,5]) 2
>>>search(7,[3,1,4,2,5])
-1
上海大学
Shanghai University
算法1:线性查找
线性查找:在列表项中逐项查找,直到找到目标值的位置
计 算 证。对于任意给定的列表,若想使用二分查找算法,首先 中 心 需要对其进行排序。 编 制
但是二分查找需要列表是有序的,这在很多情况下很难保
上海大学
Shanghai University
例:求解不定方程
所有可能解构成的搜索空间可以是各种各样的 .
百钱买百鸡:公鸡每只5元钱,母鸡每只3元钱,鸡雏
算法比较
通过修改代码中的测试集规模,可以得到算法的运行速度,
对算法的效率进行比较。例如:对百万个元素的列表,线
性查找方法平均用时2.5秒,二分查找方法平均用时只有 0.0003秒。
计 算 算法效率。例如,在大小为n的列表中找到一个值,线性方 中 心 法所需时间正比于n,二分查找正比于log2n 编 制
率是主要问题
计 对两种方法的直观比较:输入不同大小的列表,统计查找 算 时间,观察数据规模与算法效率的关系 中 心 编 制
上海大学
Shanghai University
算法比较
测试线性查找算法运行时间的代码
N=1024*1024
T=100 nums=range(N) total_time=0.0 for i in range(T):
相关文档
最新文档