0526.第二章:时间复杂度和空间复杂度[数据结构]

参考:本文为小甲鱼教学视频的学习笔记。

1、为什么要学习时间复杂度和空间复杂度?你说一个算法好另外一个算法不好,有什么判断依据?哪个算法效率高?怎么判断?那么就要学习时间和空间复杂度了。

思考:学习每一个知识之前都应该要考虑一下为什么要学习,学了有什么用处,什么场景下去用。

2、算法的效率高一般是指算法的执行时间,度量一个算法的执行时间有2种方式:

  • 事后统计法:需要编写测试程序,万一不好花费大量的时间精力,赔了娘子又折兵(并且测试环境不同差别不是一般的大)
  • 事前统计法:程序编写前,使用统计方法对算法进行估算

思考:百度搜索事前避孕药和事后避孕药,会有更深刻的理解

3、一个高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:

  • 算法采用的策略,方案(方法思路)
  • 编译产生的代码质量(编译器的优劣,编译语言的优劣)
  • 问题的输入规模(输入量的多少,需要一个循环)
  • 机器执行指令的速度(硬件环境)

4、我们研究算法的复杂度,侧重的是研究算法随着输入规模扩大增长量的一个抽象,而不是精确地定位需要执行多少次。因为如果这样的话,我们就又不得不考虑编译器优化的问题,然后就没然后了。

思考:因为外部因素的影响很大,很难精确定位执行次数,那就对增长量抽象出来进行对比未尝不是一个好的方案。

5、如何对增长量进行抽象:忽略程序所用的语言、忽略程序跑在什么样的机器上、不计哪些循环索引的增长和循环终止条件、变量声明、打印结果。我们只关心它所实现的算法。

思考:分析程序的运行时间,最重要的是把程序看成独立于编程语言的算法或者一系列的步骤。

6、我们在分析一个算法的运行时间时:重要的是把基本操作的数量和输入模式关联起来。

思考:分析随着输入量的增加,操作数量的增长情况用以判断算法效率高低。

7、函数的渐进增长:对于给定的两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐进快于g(n)。与最高次项线程的常熟并不重要,也可以忽略,常数也可以忽略。判断一个算法的好不好,只通过少量的数据是不能够判断的,以免以偏概全。

思考:判断算法效率是,函数中的常熟和其他次要项常常可以忽略,而更应该关注主项(也就是最高项)的阶数

0526.第二章:时间复杂度和空间复杂度[数据结构]

时间: 2024-11-05 13:16:15

0526.第二章:时间复杂度和空间复杂度[数据结构]的相关文章

时间复杂度和空间复杂度[数据结构]

參考:本文为小甲鱼教学视频的学习笔记. 1.为什么要学习时间复杂度和空间复杂度?你说一个算法好另外一个算法不好,有什么推断根据?哪个算法效率高?怎么推断?那么就要学习时间和空间复杂度了. 思考:学习每个知识之前都应该要考虑一下为什么要学习,学了有什么用处,什么场景下去用. 2.算法的效率高通常是指算法的运行时间,度量一个算法的运行时间有2种方式: 事后统计法:须要编写測试程序.万一不好花费大量的时间精力,赔了娘子又折兵(而且測试环境不同区别不是一般的大) 事前统计法:程序编写前,使用统计方法对算

第二章小结

第二章小结 早听说数据结构要比程序设计要难,我早早就做好了心理准备,可是现实好像比我想象的还要难一些.这个星期基本结束了第二章关于线性表的学习.对于顺序表,上学期接触的比较多学起来还算比较顺利.链表就有一点困难了.书上没有完整的代码段,只是一些算法,不得不说一开始我真的有点蒙圈的感觉.但后面经过了预习以及上网查找资料就开始慢慢接受了单链表. 和顺序表不同,单链表是存储在连续或者不连续的空间里面的.每一个数据都必须跟着一个地址,指向下一个数据.虽然可能空间利用率比不上顺序表,但在插入删除操作时就显

20172304 2018-2019《java软件结构与数据结构》 第一章 第二章学习总结

20172304 2018-2019<java软件结构与数据结构> 第一章 第二章学习总结 教材学习内容总结 第一章 概述 1.1软件质量: 高质量软件的几个特征: 正确性:软件在多大程度上满足其特定需求 可靠性:软件故障发生频率和危险程度 健壮性:出错情况下可以得到恰当处理的程度 可用性:用户学习和执行任务的难易程度 可维护性:对软件进行修改的难易程度 可重用性:软件组件可重用于其他软件系统开发的难易程度 可移植性:软件组件可以在多个计算机环境下使用的难易程度 运行效率:在不浪费资源的情况下

【数据结构】第二章小结

ps:第一次用博客园写,记录第一次 一.数据结构第二章主要为:顺序表和链表的构造及其增删查改的一些基本操作,以及粗略计算它们的时间or空间的复杂度. 1.顺序表: (1)  特点:逻辑结构上相邻,物理存储上也是相邻的,属于随机存储: (2)  优点:便于使用下标进行查找,例如:查找某数组的第6项的数据是几: 存储密度为1: (3)    缺点:由于其物理存储相邻,故无法将空间中零零散散的碎片空间利用起来: 2.链表: (1)   特点:逻辑结构上相邻,物理存储上不一定相邻的,属于顺序存储: 单链

一 数据结构的概念,时间复杂度和空间复杂度

一. 什么是数据结构: 对到底什么是数据结构这个概念,一直有很多不同的解释,也有许多不同的争论,这里只代表了我个人的认识. 数据结构:我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某 个功能(比如查找某个元素,删除某个元素等)而执行的相应操作,这个相应的操作也叫做算法. 1.算法的实现是依据不同的数据结构的. 2.算法:是对特定问题求解步骤的一种描述,以下特征:有穷性,确定性,可行性,输入和输出: 二. 时间复杂度和空间复杂度: (

数据结构期末复习第二章线性表

第二章:线性表 1.线性结构的基本特征答:线性结构是若干数据元素构成的有序(次序)集① 集合中必存在唯一的一个“第一元素”:② 集合中必存在唯一的一个 “最后元素”:③ 除第一元素之外,均有 唯一的前驱:④ 除最后元素之外,均有 唯一的后继. 2.线性表的顺序存储结构和链式存储结构分别是______.(  D )   A. 顺序存取的存储结构.顺序存取的存储结构  B. 顺序存取的存储结构.随机存取的存储结构   C. 随机存取的存储结构.随机存取的存储结构  D. 随机存取的存储结构.顺序存取

数据结构和算法之时间复杂度和空间复杂度

前言 上一篇<数据结构和算法>中我介绍了数据结构的基本概念,也介绍了数据结构一般可以分为逻辑结构和物理结构.逻辑结构分为集合结构.线性结构.树形结构和图形结构.物理结构分为顺序存储结构和链式存储结构.并且也介绍了这些结构的特点.然后,又介绍了算法的概念和算法的5个基本特性,分别是输入.输出.有穷性.确定性和可行性.最后说阐述了一个好的算法需要遵守正确性.可读性.健壮性.时间效率高和存储量低.其实,实现效率和存储量就是时间复杂度和空间复杂度.本篇我们就围绕这两个"复杂度"展开

数据结构与算法分析C++表述第二章编程题

把昨天看的第二章巩固一下,做一做编程习题. 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致.若按相同的递归思路分析,比那个问题要简单,因为从1次幂开始并且指数呈2^(n-1)分布,即1,2,3,4,16……所以没有对指数是奇数时的判定.实际上用循环来求要比用递归快.在不考虑溢出的前提下,解法如下: #include<iostream> using namespace std; typedef unsigned long

数据结构——线性表(第二章)

一.基本概念 1.线性表:简称表,是n(n>=0)个具有相同类型的数据元素的有限序列,线性表中数据元素的个数称为线性表的长度.长度为零时称为空表. 2.线性表的顺序存储结构称为顺序表. 3.单链表:单链表是一组任意的存储单元存放线性表的位置,这组存储单元可以连续也可以不连续,甚至可以零散分布在内存中的任意位置. 下面着重介绍有关单链表的操作: #include<iostream> using namespace std; const int maxsize = 10; // 定义单链表的