数据结构与算法笔记(王卓网课+教材+大话数据结构)
数据结构与算法笔记(王卓网课+教材+大话数据结构)
##最新整理!!!
顺序存储结构的线性表P10-P21
顺序线性表的代码实现
链式线性表笔记
串笔记
绪论、算法(P1-P9)1.4数据起源结构
数据结构是一门研究非数值计算之间的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科
学习进程:
1.4.1基本概念和术语
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号合集。而这些符号必须包括两个前提:
(1) 可以输入到计算机中
(2) 能被计算机程序处理
像声音,图像,视频等是可以通过编码的手段变成字符数据来处理
1.4.2 数据元素
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。Eg:在人类中,数据元素就是人!
数据项:一个数据项可以有若干个数据项组成。 Eg:人的眼、耳、鼻
注:数据项是数据不可分割的最小单位。
真正让讨论问题时,数据元素才是数据结构中间里数据模型的着眼点。
1.4.4数据对象
数据对象:是性质相同的数据元素的几何,是数据的子集。
1.4.5数据结构
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
研究数局结构的意义:为编写出一个“好”程序,必须分析待处理对象的特性及各处理对选哪个之间存在的关系。
1.5逻辑结构与物理结构
1.5.1逻辑结构
逻辑结构:指数据对象中数据元素之间的相互关系。
- 集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。
- 线性结构:线性结构中的数据之间是一对一的关系。
- 树形结构:一对多的层次关系
- 图形结构:多对多的关系
在用示意图表示数据的逻辑结构时,要注意两点 - 将每一个数据元素看做一个结点,用圆圈表示
- 元素指甲的逻辑关系用节点之间的连线表示,如果这个关系是有方向的。那么用有箭头的连线表示
1.5.2物理结构
定义:指数据的逻辑结构在计算机中的存储形式
数据元素的存储结构形式:顺序存储、链式存储
- 顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
2. 链式存储结构:当整个结构时刻处于变化中,顺序存储是不科学的。
则引出链式存储结构是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的也可以是不连续的。
注:
1.存储器主要是针对内存而言,像硬盘,软盘等外部存储器的数据结构组织通常用文件结构来描述。
2.如何存储数据元素之间的逻辑关系,是实现物理结构的重难点。
1.6抽象数据类型
1.6.1数据类型
:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称
在c语言中数据类型分为两类:
原子类型:是不可以再分解的基本类型,包括整形、实型、字符型
结构类型:由若干个类型组合而成,是可以再分解的。
Eg:整形数组由若干个整形组成
数据类型的作用:
1.约束变量或常量的取值范围
2.约束变量或常量的操作
1.6.2抽象数据类型(ADT)
:是指一个数学模型及定义在该模型上的一组操作
- 1.从问题中抽象出数据模型(逻辑结构)
- 2.定义在数据模型上的一组抽象运算
- 3.不考虑计算机内的存储结构与运算的具体实现算法
定义抽象数据类型格式:
ADT 抽象数据名{数据对象<数据对象的定义>数据关系<数据关系的定义>基本操作<基本操作的定义>
}ADT 抽象数据名
基本操作定义格式:基本操作名(参数表)初始条件(初始条件描述)操作结果(操作结构描述)
体现了程序设计中间问题分解、抽象和信息隐藏的特性。
##第二章 算法
第二章 算法
2.4算法定义
算法是解决待定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
简而言之:算法就是解决问题的方法和步骤
算法与程序
算法是解决问题的一个方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法。
程序使用某种程序设计语言对算法的具体实现
- 程序 = 数据结构 + 算法
- 数据结构通过算法实现操作
- 算法根据数据结构设计程序
2.5算法特性
算法具有五个基本特性:输入、输出、有穷性、确定性、可行性
2.5.1输入输出
一个算法有0个输入或多个输入
算法至少有一个或多个输出
2.5.2有穷性
指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间完成
2.5.3确定性
算法的每一步骤都具有确定的含义,不会出现二义性
2.5.4可行性
算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成
2.6算法设计的要求
2.6.1正确性
算法至少应该具有输入输出和加工处理无歧义性、能正确反映问题的需求,能够得到问题的正确答案。
算法的正确通常在用法上有很大的差别,大体为以下四个层次
- 有没有语法错误
- 对于合法的输入数据能够产生满足要求的输出结果
- 对于非法的输入数据能够得出满足规格说明的结果
- 对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果
通常第三层意义上的作为衡量一个算法是否合格的标准
2.6.2可读性
算法设计的另一目的为了便于阅读、理解和交流
2.6.3健壮性
当输入数据不合法时。算法也能做出相关处理,而不是产生异常或莫名其妙的结果
算法分析
一个好的算法首先具备正确性,然后是健壮性可读性,在几个方面都满足的情况下主要考虑算法的效率,算法的效率主要通过以下两个方面来考虑:
- 时间效率:算法所消耗的时间
- 空间效率:算法执行过程中所耗费的存储空间
- 时间效率和空间效率有时是冲突的
算法时间效率的度量
**两种度量方法:**
事后统计 将算法实现测算其时间和空间的开销。
缺点:编写程序实现算法将花费较多的时间和精力;所得实验结果依赖于计算机的软硬件等环境因素,掩盖算法本身的优劣。事前分析
对算法所消耗资源的一种估算方法。 ![每条语句执行一次所需的时间。一般是随机器而异的,取决于机器的指令性能,速度以及代码质量是由机器本身软硬件环境决定的。与算法无关。可以假设执行每条语句所需的时间均为单位时间。则算法的运算时间就为频度之和。
Eg:
循环条件语句比内部多判断一次才能退出循环
T(n) = 2n3+3n2+2n+1
为了便于比较不同算法的时间效率我们仅比较它们的数量级。
Eg: T(n) = 10n2 t(n) = 5n3
时间复杂度: 若有某个辅使得当n趋近于无穷极限值为不等于零的常数则称f(n)是T(n)的同数量级函数。记作T(n) = O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
算法时间复杂度的定义:
常见的分析算法时
分析算法时间复杂度的基本方法:
- 找出语句频度最大的那条语句作为基本语句。
- 计算基本语句的频度,得到问题规模n的某个函数。F(n)
- 取其数量及用符号“O”表
最坏情况与平均情况:
引言:有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同
最坏情况运行时间是一种保证,在应用中,这是一种最重要的需求,通常除非特别指定我们提到的运行时间,都是最坏情况的运行时间。
平均运行时间是所有情况中最有意义的,因为它是期望的运行时间。很难通过分析得到,一般都是通过运行一定数量的实验数据后转出来。
一般在没有特殊说明的情况下,都是指最坏时间复杂度
对于复杂的算法,可以将它分成几个容易估算的部分,然后利用大O加法法则和乘法法则的计算算法的时间复杂度。
空间复杂度:
算法所需存储空间的度量。记作:S(n) = O(f(n))
算法要占据的的空间:
- 算法本身要占据的空间输入输出,指令,常数,变量等
- 算法要使用的辅助空间。
对于辅助空间的理解:
后续会更新使用c语言和java版本的线性表代码实现。。。。。。。关注不迷路!
数据结构与算法笔记(王卓网课+教材+大话数据结构)相关推荐
- 数据结构与算法笔记(青岛大学王卓老师视频)
写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...
- 明翰数据结构与算法笔记V0.8(持续更新)
文章目录 前言 数据结构 `线性表` `数组` `链表` `栈与队列` [串/字符串] 树 并查集 `二叉树` [二叉排序树/二叉搜索树] `红黑树` 红黑树操作 霍夫曼树 `堆` [大/小]根堆 可 ...
- 数据结构和算法 | 第一部分第二课:小鸭子们去旅行
作者 谢恩铭,公众号「程序员联盟」. 转载请注明出处. 原文:https://www.jianshu.com/p/31d14bd080d4 内容简介 引出算法复杂度的故事 两种算法 两种算法的对比 第 ...
- 数据结构和算法 | 第一部分第一课:什么是数据结构和算法
作者 谢恩铭,公众号「程序员联盟」. 转载请注明出处. 原文:https://www.jianshu.com/p/b2f23799a5bb 内容简介 前言 什么是算法 算法无处不在 计算机的" ...
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
- 数据结构与算法笔记(十六)—— 二叉搜索树
一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...
- 数据结构与算法笔记(十五)—— 散列(哈希表)
一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...
- JS数据结构与算法 笔记
JS数据结构与算法笔记 前言:不定时更新说明 1. 栈(Stack) 1.1 基于数组实现栈 1.2 基于对象实现栈 1.3 基于链表实现栈 1.4 栈的简单应用 1.4.1 字符串中的括号匹配问题 ...
- 数据结构与算法基础-王卓
文章预览: 数据结构与算法基础-王卓 第一章绪论 **1.1.1基本概念和术语** 数据 数据元素 数据项 数据对象 1.1.2基本概念和术语 1.数据结构解释 2.数据结构包括三方面内容 3.数据结 ...
最新文章
- 复习计算机网络基础 day8--传输层
- 【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例
- 数据库课程设计结论_结论
- wordpress后台外观没有菜单和小工具的解决方法
- 配置 SQL Server 2005 以允许远程连接(服务器端)
- tween.js 中文使用指南
- 将netcat-openbsd替换成为netcat-traditional
- 无机金属专业里有计算机课吗,无机非金属材料工程专业课程有不少
- Java并发编程实战-学习总结-第一篇(概括)
- 易飞ERP PLM集成 解决方案
- jira是干什么_JIRA是什么? | 学步园
- 服务器的所有网站共用443,多个ssl证书共用443端口apache
- VirtualBox:在linux宿主机和windows虚机间设置共享目录
- K-Means聚类算法原理及实现
- 甲醇合成技术的研究进展
- 日志分析之识别真假蜘蛛与处理办法
- 神经网络从产生到现在的发展历史--科普
- 夜神模拟器和安卓连接
- gromcas 分析NAMD轨迹文件dcd
- opencv——图片找不同