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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51单片机入门:认识开发板

认识开发板 板载资源&#xff1a; 数码管模块 说明&#xff1a; 2个四位一体共阴数码管 详细&#xff1a; 2个四位一体&#xff1a;两个独立的四位数码管&#xff0c;每个四位数码管都是“一体”的设计&#xff0c;也就是说&#xff0c;每个数码管内部集成了四个独立的七段LE…

【Linux】Ubuntu 磁盘管理

准备一个U盘或者SD卡&#xff08;含读卡器&#xff09;&#xff0c;并将其格式化成 FAT32 格式&#xff0c;不要使用NTFS格式&#xff08;这是微软的专利&#xff0c;大部分Linux系统不支持&#xff09;和exFAT格式&#xff08;有的Linux系统也不支持&#xff09;。 如果Ubun…

Lafida多目数据集实测

Lafida 数据集 paper&#xff1a;J. Imaging | Free Full-Text | LaFiDa—A Laserscanner Multi-Fisheye Camera Dataset 官网数据&#xff1a;https://www.ipf.kit.edu/english/projekt_cv_szenen.php 官网&#xff1a;KIT-IPF-Software and Datasets - LaFiDa 标定数据下载&…

【蓝桥杯嵌入式】9届程序题刷题记录及反思

一、题目内容分析 二、LCD单字符高亮显示实现 本次要求显示两个字符&#xff0c;此函数高亮pos及它后面一个字符 void highlight(uint8_t *str,uint8_t pos) {int i 0;for(i 0; i < 20; i){if(i ! pos && i! (pos1))LCD_DisplayChar(Line3,(320 - (16 * i)),st…

Python输出不了中文怎么解决

在文件头加上#encoding&#xff1a;utf-8即可。 # encoding: utf-8 print helloworld print u"学习" print (unicode("学习", encoding"utf-8")) shell输出&#xff1a; helloworld 学习 学习 还可以用#-*- coding: UTF-8 -*- 来指定。

LangChain学习笔记—RAG(检索增强生成)

LangChain LangChain是一个软件开发框架&#xff0c;可以更轻松地使用大型语言模型&#xff08;LLM&#xff09;创建应用程序。它是一个具有 Python 和 JavaScript 代码库的开源工具。LangChain 允许开发人员将 GPT-4 等 LLM 与外部数据相结合&#xff0c;为聊天机器人、代码理…

C++ | Leetcode C++题解之第10题正则表达式匹配

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isMatch(string s, string p) {int m s.size();int n p.size();auto matches [&](int i, int j) {if (i 0) {return false;}if (p[j - 1] .) {return true;}return s[i - 1] p[j - 1];};vector<…

WGCAT工单系统使用指南 - 工单有哪几种状态

WGCAT工单管理系统设计的工单生命周期比较简单易懂 1、待接收 2、处理中 3、已拒绝 4、已完成 5、已关闭

CYP450综述-20年-地表最强系列-文献精读-4

Discovery and modification of cytochrome P450 for plant natural products biosynthesis 发现与改造细胞色素P450以合成植物天然产品 一篇关于植物CYP450的综述&#xff0c;地表最强&#xff0c;总结的最全面的版本之一&#xff0c;各位看官有推荐请留言评论区~ Discovery…

App.vue触发axios报错及解决方案

App.vue触发axios报错及解决方案 修改根目录下vue.config.js文件 module.exports {publicPath: ./,assetsDir: assets,configureWebpack: {devServer: {client: {overlay: false}}} }重新npm run dev 搞定

python作业

1.找出10000以内能被5或6整除&#xff0c;但不能被两者同时整除的数(函数) 2.写一个方法&#xff0c;计算列表所有偶数下标元素的和(注意返回值) 3.根据完整的路径从路径中分离文件路径、文件名及扩展名。 4.根据标点符号对字符串进行分行 5.去掉字符串数组中每个字符串的空格 …

波奇学Linux:

面向数据报&#xff1a;udp没有发送缓冲区&#xff0c;发送几次数据报&#xff0c;读取几次数据报&#xff0c;write和read一一对应 tcp通信时只管识别数据&#xff0c;在应用层才对字节进行拼接分析&#xff0c;得到完整请求 简单来说&#xff1a;udp之间传递的是报文&#x…

【打印SQL执行日志】⭐️Mybatis-Plus通过配置在控制台打印执行日志

目录 前言 一、Mybatis-Plus 开启日志的方式 二、测试 三、日志分析 章末 前言 小伙伴们大家好&#xff0c;相信大家平时在处理问题时都有各自的方式&#xff0c;最常用以及最好用的感觉还是断点调试&#xff0c;但是涉及到操作数据库的执行时&#xff0c;默认的话在控制台…

Excel、PowerQuery 和 ChatGPT 终极手册(上)

原文&#xff1a;Ultimate ChatGPT Handbook for Enterprises 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 在不断发展的数据管理和分析领域中&#xff0c;掌握 Excel 的查找功能不仅是一种技能&#xff0c;更是高效数据处理的基石。《使用 Power Query 和 Ch…

kex_exchange_identification: read: Connection reset by peer

换一台机器&#xff0c;登录到远程ip地址&#xff0c;查看ssh的日志。 sudo grep ssh /var/log/auth.log | grep 8.22(登录失败的ip) 可以看到&#xff0c;刚开始是因为登录密码不对&#xff0c;后边是直接拒绝了。应该是sshd的一种保护机制.超过多少次失败&#xff0c;后…

【热门话题】计算机视觉入门:探索数字世界中的“视觉智能”

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 计算机视觉入门&#xff1a;探索数字世界中的“视觉智能”摘要正文一、计算机视…

@RequstBody,IOC,DI,@Autowired,@Resource,lombok,

要使用Jason数据格式必须用post方法&#xff0c;因为是通过请求体传送的&#xff0c;get没有请求体 Data不包括有参构造和无参构造方法

在project模式下使用Implementation Runs窗口

要在“Implementation Runs”窗口中启动active implementation run&#xff0c;请执行以下任一操作&#xff1a; • 在Flow Navigator中选择“Run Implementation”。 • 在主菜单中选择“Flow > Run Implementation”。 • 从工具栏菜单中选择“Run Implementation”。 • …

【剑指offr--C/C++】JZ55 二叉树的深度

一、题目 求二叉树深度两个思路&#xff1a;递归、层次遍历。 二、递归思路及代码 每一个节点的深度都max{左子树深度&#xff0c;右子树深度}1。所以可以使用递归 /* struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left…

基于springboot大学生兼职平台管理系统(完整源码+数据库)

一、项目简介 本项目是一套基于springboot大学生兼职平台管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功…