当前位置: 首页 > news >正文

算法与数据结构(2)--- 绪论(下)

第一部分 --- 基本概念和术语

1.数据类型和抽象数据类型

 

 将对变量的取值范围的约束和对变量的可进行操作的约束封装为数据类型,可以极大的方便人们进行编码

 

 

 

基本操作不就是函数吗 

 其实抽象数据类型就相当于C++中的 类


第二部分 --- 抽象数据类型的表示与实现

 

 抽象数据类型其实就相当于c++中的 类


第三部分 --- 算法和算法分析

1.算法的基本定义和性质

 一言以蔽之,算法就是我们解决问题的方法

1.所谓的二义性:既可以是a也可以是是b,这就称为二义性

2.一个算法可以没有输入,但是一定要有输出

 

 健壮性又称为鲁棒性

 

 

 


 2.算法分析之时间复杂度

算法分析的目的:1.分析一个算法是否可行;2.当一个问题可以通过多种算法解决的时候,通过算法分析找到最优算法去解决 

 1.所谓的矛盾是当我们想节省时间时会导致空间的消耗增加,节省空间时又会导致时间消耗增加

 我们常常采用事前分析法来估算算法消耗的时间和空间 

 

 注意有个求和符号

 

1.由于每个语句执行所需的时间与算法本身无关,所以我们可以将每个语句执行所需的时间视为单位时间,即为1,也就是说一个算法的效率只由它执行的语句总频率来进行估算和判断

上面这个n+1次:每执行一次循环都要先进行 i是否<=n 的判断然后再进行循环,判断语句执行n次后,i变为n+1,此时还要进行一次判断来终止循环,所以最终判断执行语句的执行次数为 n+1 次

 1.上面T1的算法的数量级是2次方,而T2是3次方,而时间数量级越小算法效率越高,所以我们选择T1算法  

2.上面那个辅助函数的通俗解释就是:f(n) = n的 t 次方(不一定,需要我们视具体情况来进行分析),n是问题规模n,即我们的算法要处理的元素个数,t是算法中执行次数最多(数量级最大)的语句的数量级

到底什么是基本语句 --- 基本语句就是算法中执行次数最多(数量级最大)的语句

 到底什么是问题规模n ---  问题规模n其实就是我们的算法要处理的元素个数

第三部分 --- 算法分析之如何找到时间复杂度对应的基础语句

1.基础语句基本都出现在最深层的循环嵌套中。

 时间复杂度算出来多少就是多少,不要随意更改符号

 

 有时候基础语句的语句频段并不是那么好求得比如上面这个,此时我们常常用下面那个级数求和的方式来求解语句频度:

1.j个1现加 = j

2. j从1开始,相加 = 等差数列求和

3. i从1开始相加 = 级数求和结果

各类级数收敛结果在这

根据具体情况分析时间复杂度(上面的处理方法是直接取对数) 

对数运算法则

有时候算法的时间复杂度还会因为问题的输入数据集不同而不同,此时我们取用的是时间复杂度是平均时间复杂度 

平均时间复杂度比较难求,所以我们一般考虑最坏时间复杂度

 

 指数爆炸

尽量设计复杂度低的算法


第四部分 --- 空间复杂度

 

在第一个算法中只需要一临时数组元素的辅助空间,所以空间复杂度为 1

而 在第二个算法中则需要一个临时数组的辅助空间。此时空间复杂度为 n*1(n个元素的空间)

 

相关文章:

  • 基于AAEncode编码的解密经历
  • 设定目标(1)- 为什么你每天感觉很忙却没什么拿得出手的成果?
  • 《大数据之路:阿里巴巴大数据实践》-第2篇 数据模型篇 -第9章 阿里巴巴数据整合及管理体系
  • 懂这些套路,开发到大客户不是什么难题
  • 市政管理学试题及答案
  • 第6章 - 多无人车系统的协同控制 --> 无人车运动原理
  • jmeter-11-Ant接口自动化及持续集成整合
  • 目标检测---以制作yolov5的数据集为例,利用labelimg制作自己的深度学习目标检测数据集(正确方法)
  • zookeeper的leader选举原理和底层源码实现超级详解
  • STM32——485通信实验
  • 市政管理学考试试题及答案
  • C++基础(2022.9.3)
  • C语言·对文件的输入输出(万字详解)
  • 本地FTP服务器快速搭建(windows)
  • 基于MATLAB的语音信号处理系统的设计
  • 【Leetcode】101. 对称二叉树
  • 【前端学习】-粗谈选择器
  • classpath对获取配置文件的影响
  • JDK9: 集成 Jshell 和 Maven 项目.
  • learning koa2.x
  • PHP CLI应用的调试原理
  • Redis 懒删除(lazy free)简史
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SpringBoot 实战 (三) | 配置文件详解
  • Web标准制定过程
  • 初识 webpack
  • 第十八天-企业应用架构模式-基本模式
  • 分布式事物理论与实践
  • 复杂数据处理
  • 给新手的新浪微博 SDK 集成教程【一】
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 坑!为什么View.startAnimation不起作用?
  • 如何优雅地使用 Sublime Text
  • 详解移动APP与web APP的区别
  • 学习HTTP相关知识笔记
  • ​io --- 处理流的核心工具​
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​queue --- 一个同步的队列类​
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ###项目技术发展史
  • #define用法
  • #etcd#安装时出错
  • #pragma once
  • #pragma预处理命令
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (4)STL算法之比较
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (差分)胡桃爱原石
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三) diretfbrc详解
  • (转)树状数组
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • *p++,*(p++),*++p,(*p)++区别?