6:算法基础--6.1:线性结构 ,6.2:查找算法

转上一节:

http://t.csdnimg.cn/ql5Cdicon-default.png?t=N7T8http://t.csdnimg.cn/ql5Cd

课程内容提要:

6:知识点考点详解  

6.1:线性结构 

        通常分析时间复杂度的方法是从算法中选取-种对于所研究的问题来说是基本运算的操作,以

该操作重复执行的次数作为算法的时间度量。一般来说, 算法中原操作重复执行的次数是规模n的

某个函数T(n)。

        空间复杂度是指对一个算法在运行过程中临时占用存储空间大小的度量。一个算法的空间复

杂度只考虑在运行过程中为局部变量分配的存储空间的大小。

思考:求1+2+... +100的哪个算法更快?占用空间更少?

算法1:inti= (1+100)*100/2。只要运算1次。需要1个变量。

算法2: for循环执行100次。要运算n次。需要多个变量。

由于许多情况下要精确计算T(n)是困难的,因此引入了渐进时间复杂度在数量上估计一个算法的执

行时间。其定义如下:

如果存在两个常数c和m,对于所有的n,当n≥m时有f(n)≤Cg(n), 则有f(n)=O(g(n))。 也就是说,随着n

的增大, f(n)渐进地不大于g(n)。例如:一个程序的实际执行时间为T(n)=3n^{2}+2n^{2}+n,求其渐

进时间复杂度。随着n不断增加,2n^{2}+n的影响很小。时间主要由n^{3}决定,则T(n)的渐进时间复杂

度就是O(n^{3}),把常量值去掉。

常见的对算法执行所需

时间的度量:

O(1)<O(log_{2}n)< O(n)< O(nlog_{2}n)< O(n^{2})< O(n^{3})< O(2^{n})< O(n!)
技巧:把n=10代入即可。

(1)常数级时间复杂度0(1)

1)单个语句

如: K=0;

2)整个程序都没有循环语句,或复杂函数的调用

(2)时间复杂度O(n)

(3)时间复杂度O(n2) 

思考: O (n^{3}) ?依此类推

(4)时复杂度O(log_{2}n)

(5)时间复杂度O(nlog_{2}n)

典型代表:堆排序,每次重建堆的时间复杂度是log2n, n个元基本上就是nlog2n.

(6)时间复杂度O(2^{n})

典型代表:判断是否包含指定子序列,LCS最长公共子序列、钢管切割问题,动态规划法自顶向  

下,时间复杂度为O(2^{n})。

6.2:查找算法

考点1:顺序查找

顺序查找的思想:将待查找的关键字为key的元素从头到尾与表中元素进行比较,如果中间存在关健

字为key的元素,.则返回查找成功;否则,返回查找失败。

查找成功时,顺序查找的平均查找长度为(等概率情况下) :

考点2:二分查找

二分法查找的基本思想是:R[Iow,......,high]是当前的查找区)

(1)确定该区间的中点位置:mid=[(low+high)/2];

(2)将待查的k值与R[mid].key比较,若相等,则查找成功并返回此位置,否则需确定新的查找区

间,继续二分查找,具体方法如下:

若R[mid].key > k,则由表的有序性可知R[mid,…,n].key均大于k,因此若表中存在关键字等于k的

结点,则该结点必定是在位置mid左边的子表R[low,…,mid-1]中。因此,新的查找区间是左子表

R[low,…,high],其中high=mid-1。

若R[mid].key<k,则要查找的k必在mid的右子表R[mid+1,…,high]中,即新的查找区间是右子表

R[low,…,high],其中low=mid+1。

若R[mid].key=k,则查找成功,算法结束。

(3)下一次查找是针对新的查找区间进行,重复步骤(1) 和(2)。

(4)在查找过程中,low逐步增加,而high逐步减少。如果high<low, 则查找失败,算法结束。

【示例】请给出在含有12个元素的有序表{1,4,10,16,17,18,23,29,33,40,50,51}中二分查找关健

字17的过程。

折半查找在查找成功时关键字的比较次数最多为log_{2}n+1次。

折半查找的时间复杂度为O(log_{2}n)次。

折半查找的前提:有序、顺序存储。

考点3:哈希表查找

1.散列表

散列表查找的基本思想是:已知关键字集合U,最大关键字为m,设计一个函数Hash,它以关健

字为自变量,关键字的存储地址为因变量,将关键字映射到一个有限的、地址连续的区间T[0...n-1]

(n<<m)中,这个区间就称为散列表,散列查找中使用的转换函数称为散列函数。

例:记录关键码为(3,8, 12, 17. 9) ,取m=10 (存储空间为1) ,p=5, 散列函数h=key%p。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/593942.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用顺序表实现通讯录

前言 这次的通讯录是基于上一篇的动态顺序表的基础上实现的&#xff0c;如果对动态顺序表不熟悉&#xff0c;可以打开这个链接阅读http://t.csdnimg.cn/9zJ5g&#xff0c;这里我们会调用动态顺序表的函数。 如果想看静态顺序表实现通讯录&#xff0c;可以打开这个链接阅读http:…

Redis缓存穿透和缓存雪崩

一、缓存穿透 1 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中&#xff0c;导致请求直接到了数据库上&#xff0c;根本没有经过缓存这一层。举个例子&#xff1a;某个黑客故意制造我们缓存中不存在的 key 发起大量请求&#xff0c;导致大量请求落到数…

1 【机器学习】统计学习的概念

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;李航统计学习笔记 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习…

如何借助Idea创建多模块的SpringBoot项目

目录 1.1、前言1.2、开发环境1.3、项目多模块结构1.4、新建父工程1.5、创建子模块1.6、编辑父工程的pom.xml文件 1.1、前言 springmvc项目&#xff0c;一般会把项目分成多个包:controler、service、dao、utl等&#xff0c;但是随着项目的复杂性提高&#xff0c;想复用其他一个模…

蓝桥-时间显示

目录 题目链接 代码 题目链接 1.时间显示 - 蓝桥云课 (lanqiao.cn) 代码 #include <bits/stdc.h> using namespace std;int main() {long long x;cin>>x;int h,m,s;x x / 1000 % (3600*24); // 毫秒化秒&#xff0c;并且保留最后一天的时间h x / 3600; //求得…

深入理解计算机系统 家庭作业 2.84

这题没有这个要求所以可以用 ? > : < 这种运算 以下代码用的是位级运算.因为我误解了题意 呜呜呜 想看用判断的代码请自行百度 ((((ux<<9>>9)<<((ux<<1>>24)-127)) - ((uy<<9>>9)<<((uy<<1>>24)-127)))>…

如何利用FLUENT计算流体力学方法解决大气与环境领域流动问题

ANSYS FLUENT是目前全球领先的商用CFD 软件&#xff0c;市场占有率达70%左右&#xff0c;是工程师和研究者不可多得的有力工具。由于采用了多种求解方法和多重网格加速收敛技术&#xff0c;因而FLUENT能达到最佳的收敛速度和求解精度。灵活的非结构化网格和基于解的自适应网格技…

学习网安(21)

第20章存在疑问&#xff0c;待开学后和老师求证改动后发布 中间件之一——apache 先说一下http协议——超文本传输协议 全称为&#xff1a;Hyper Text Transfor Protocol 用途&#xff1a;让用户通过浏览器发送请求到服务器端&#xff0c;接收客户端返回的数据&#xff0c;…

SRS 实时视频服务器搭建及使用

一、SRS 介绍 SRS是一个开源的&#xff08;MIT协议&#xff09;简单高效的实时视频服务器&#xff0c;支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用&#xff0c;提供流的接收和分发的能力&am…

独角数卡对接支付卡跳转问题解决方法

问题描述 最近在用独角数卡搭建了一个测试版的商店程序&#xff0c;结果却在对接易支付的过程中出现了卡跳转的问题&#xff0c;支付能正常完成&#xff0c;订单发卡也正常&#xff0c;就是会卡在这个弹窗页面无法正常跳转至订单查看页面。 本来这种BUG无关痛痒&#xff0c;但…

C++之函数提高(HM)

目录 1.函数默认参数&#xff08;缺省参数&#xff09; 2.占位参数 3.函数重载 4.类和对象--封装 &#xff08;1&#xff09;圆类&#xff1a; &#xff08;2&#xff09;访问权限 &#xff08;3&#xff09;struct&&class &#xff08;4&#xff09;立方体类的…

LeetCode 494. 目标和

解题思路 相关代码 class Solution {public int findTargetSumWays(int[] nums, int target) {int f[][] new int[30][2010];int offset 1000;//因为target>-1000&&target<1000,所以需要一个偏移量//f[0][0] -> f[0][0offset]1;f[0][0offset] 1;//由于存在…