数据结构与算法分析(一)基础部分与算法分析方法
一、基础
1.信息的表示是计算机科学的基础。
2.数据是信息载体,是描述事物的数、字符以及可输入计算机并被程序识别处理的符号的集合。
3.数据的基本单位是数据元素。(最小标识单位数据项组成了数据元素)
数据结构:某一数据元素的集合及该集合中所有数据元素间关系。Data_Structure={D,R}
D:数据元素集 R:D中所有数据元素之间关系的有限集。
线性结构:
①线性结构list:仅一个元素无前驱(表头),一个元素无后继(表尾),其余元素均有一个前驱与一个后继。
非线性结构:
②树结构tree:有且仅有一个元素(root)无前驱,可有多个后继,其余元素要有且仅有一个前驱
③图结构graph:可能有0-多个前驱或后继。(可出现孤立的点)
数据据结构涵盖:①元素间的逻辑关系即数据逻辑结构。
②元素及其关系在计算机存储中的表示即数据的存储表示,
③数据的运算即对元素的操作。
数据逻辑结构:①从逻辑上描述数据与存储无关②与元素本身形式内容无关③与元素相对存储位置无关④具体问题抽象出的数据模型
数据的存储表示:逻辑结构用语言实现。
适用内存:顺序/链式
适用外存:索引(树)、散列
数据处理前后应维持结构(逻辑关系)
数组 | 插入快,已知下标则访问快 | 搜索慢、删除慢,元素个数固定化 |
顺序数组 | 搜索速度快(快于未排序好的数组) | 插入慢,搜索慢,元素个数固定化 |
链表 | 快速插入删除 | 搜索慢,即使有序也不能二分查找 |
二叉树可分左右满足二分查找。
1.在数据结构中,与所使用的计算机无关的是数据的( 逻辑)结构。
2.数据的逻辑结构可以分为(线性与非线性 )两类。
3.
数据元素是数据的基本单位 |
||
数据项是数据中不可分割的最小可标识单位 |
||
数据可由若干个数据元素构成 |
4.逻辑结构相同的数据,可采用多种不同的存储方法
二、抽象数据类型
数据类型:一个类型及定义在此类型上的操作
抽象:实现细节与详细的规范说明完全分开
ADT与数据结构的关系:①二者都表示数据类型②ADT是数据类型的逻辑表现③数据结构是ADT物理形式
三、算法分析
1.概述
数据规模不大时:运行时间函数的每个项数都有很重要的作用。
数据规模不断增大时:运行时间函数的增长速度只和高次项有关、具有同样高次项的运行时间函数增长速度一致、运行函数的差异性起决定作用的是增长率(高次项的增长速度)
基本考虑:处理一定规模(输入量的数目)的输入时该算法所需要执行的基本操作(完成该操作所需的时间与操作数的具体取值无关)数。
输入规模n对运行时间不产生影响。这称为常数运行时间。
2.数据分布的特点对很多检索算法都会有很大影响。在实时系统中我们比较关注最差情况的算法分析,在其他情况下,通常考虑平均情况,只要我们知道计算平均情况所需要的输入数据的分布即可。否则就只能求助于最差情况。
大O表示法:确定一个函数的上界,也就是确定函数可能运行的多糟。
使用O:f的增长率小于或等于某个函数的增长率。
使用Ω:f的增长率大于或等于某个函数的增长率。
使用θ:f的增长率等于某个函数的增长率。(上下界相同)两个Θ相同的函数有交换性。
大O 运算的简化法则。
3.并非所有的嵌套for循环都为Θ(n方)
for(k=1;k<=n;k*=2)
for(j=1;j<=k;j++)
为Θ(nlogn) k部分为级数
4.顺序检索与二分法检索比较:顺序检索法的平均和最差情况代价Θ(n)原大于二分法的代价Θ(logn),但是二分法要求元素必须按照从高到低顺序保存,这个排序的要求可能会对时间代价产生损害,插入新元素时会增加时间代价,需要权衡。
5.多参数问题:不同参数的取值可能会对结果造成影响,不能轻易舍去。
Θ(P+ClogC)若p小一些而c大一些,clogc则不能忽略。
6.空间代价
数据结构的主要目的是使用恰当的方法存储数据,所有这类并非真正数据结构的附加信息如指针等被称为结构性开销(应尽量小)
练习:
a:是正确的,满足法则。
b:是错误的,T1(N)为N的立方+N的平方,T2(N)为N的立方+N,显然T1-T2=O( N)而不等于原先的O(F(N))。
c:是错误的,T1=T2=N的平方,显然T1/T2=O(1).
d: 是错误的,O的使用方法为f的增长率小于某个函数的增长率,T1和T2同小于等于某个函数,但是T1却可能大于T2,所以错误。
a:t=5x0.5ms=2.5ms
b:t=0.5x5xlog5ms=2.5log5ms
c:t=5x5x0.5ms=12.5ms
d:t=5x5x5x0.5ms=67.5ms
此算法仅调用了一重for循环,故时间复杂度为O(n)
要使算法的时间复杂度为O(logn),要使用分治的思想并递归调用函数。
先编写一个swap函数用于交换某两项。
数据结构与算法分析(一)基础部分与算法分析方法相关推荐
- Python数据结构与算法(1.7)——算法分析
Python数据结构与算法(1.7)--算法分析 0. 学习目标 1. 算法的设计要求 1.1 算法评价的标准 1.2 算法选择的原则 2. 算法效率分析 2.1 大 OOO 表示法 2.2 常见算法 ...
- 数据结构与算法详解(含算法分析、动图图解、Java代码实现、注释解析)
数据结构和算法的重要性 算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算 数据结构和算法的关系: 程序 = 数据结构 + 算法 数据结构是算法的基础, 换言之,想要学好算法,需要把数 ...
- 数据结构与算法之基础概述
目录 数据结构和算法的重要性 数据结构概述 逻辑结构 存储结构 算法概述 如何理解"大O记法" 时间复杂度 空间复杂度 数据结构和算法的重要性 算法是程序的灵魂,优秀的程序可以在海 ...
- java双链表基本方法_Java数据结构之双端链表原理与实现方法
本文实例讲述了Java数据结构之双端链表原理与实现方法.分享给大家供大家参考,具体如下: 一.概述: 1.什么时双端链表: 链表中保持这对最后一个连点引用的链表 2.从头部插入 要对链表进行判断,如果 ...
- C++基础:各种输入方法总结
输入原理简述: 程序的输入都建有一个缓冲区,即输入缓冲区.每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函数是直接从缓冲区取 ...
- c语言cin输入数组,C++基础:各种输入方法总结cin.get()、
原标题:C++基础:各种输入方法总结cin.get(). 在C++中,各种输入方法还是不少的,而且各有所异,本文做一点简要总结,主要涉及如下内容:cin.cin.get().cin.getline() ...
- java基础 ArrayList集合基本方法演示
java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator;public class ArrayLis ...
- (转)jquery基础教程八 load方法及小技巧
首先我们看看手册上的描述 load(url, params, callback) 装入一个远程HTML内容到一个DOM结点. 注意:避免用装入的scripts脚本,装入脚本改用$.getScript. ...
- 转移印花技术基础知识及应用方法
转移印花技术基础知识及应用方法 1. 转移印花法特点 转移印花图案具有花型逼真.花纹细致.层次清晰.立体感强等特点,可印制自然风景及艺术性强的图案. 转移印花设备具有结构简单.占地小.投资少.经济效率 ...
- 零基础自学画画的方法有哪些
本文由"学美术上美术集网校"原创,图片素材来自网络,仅供学习分享 零基础自学画画的方法有哪些?首先说明,自学真的很难,要比常人付出多很多的努力和时间,如果觉得自己做不到又坚持要画画 ...
最新文章
- phpcms 前台模板替换成官网类型的网站
- pandas删除数据库 python_Python常见的科学计算库
- Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署
- wordpress python 采集_Python3利用Selenium3模拟wordpress博客登陆
- python绘制三角函数图像_用python画三角函数
- python 判断素数
- 2022搜狐校园 情感分析 × 推荐排序 算法大赛
- 高数 | 【一元函数微分学】导数部分经典快速例题
- 数据显示:中国的程序员是世界上最牛的程序员
- Android封装一个自定义标题栏
- 拳王虚拟项目公社:建一个虚拟资源流量池,兼职副业卖虚拟资源商品月入5000
- 关于AI-人工智能看法,进行漫谈。
- java applet插件_Atitit.java的浏览器插件技术 Applet japplet attilax总结
- [轻笔记]Pytorch语义分割输出转换为图像显示
- echarts 词云图使用 + vue
- DAMO-YOLO第三方数据训练教程
- 让自己更优秀的 16 条法则(建议收藏)
- 使用kubespary安装k8s集群
- .removeAttribute is not a function
- python简易时钟,显示到毫秒