数据结构与算法分析(一)

文章目录

  • 数据结构与算法分析(一)
    • 第一章 基本概念
      • 第一节 数据结构
        • 1.1 基本术语和概念
        • 1.2. 数据的逻辑结构
        • 1.3 数据的存储结构
        • 1.4 抽象数据类型
      • 第二节 算法及性能分析
        • 2.1 算法
        • 2.2时间复杂度
          • 2.2.1计算方法:
          • 2.2.2 一般法则
        • 2.3 空间复杂度
        • 2.4 递归:
          • 1.它是否就是循环逻辑?
          • 2.实现递归的基本准则:

数据结构 + 算法 = 程序
数据结构主要研究组织大量数据的方法,算法分析是对算法运行的时间的评估。

第一章 基本概念

第一节 数据结构

1.1 基本术语和概念

(1)数据(Data):是指描述客观事物的符号,是计算机可以操作的对象,能被计算机识别,并输入给计算机处理的符号或符号集合。万物皆可为数据,不止局限于数字,字符,一个图像,一段视频都是数据。

(2)数据对象(data object):是性质相同数据元素的集合,是数据的一个子集。例如所有的视频数据可以成为一个数据对象。

(3)数据元素(data element):是数据的基本单位。也叫结点或记录。例如一个视频。

(4)数据项(data item):是数据的最小单位。例如视频里的每一帧。

(5)数据结构(data structure):是数据元素之间的组织方式。

1.2. 数据的逻辑结构

逻辑结构(logical structure):指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。

数据结构有四种不同的逻辑结构:

(1)集合结构:集合中的各个元素是平等的,元素之间没有任何联系,仅是共处于同一集合。

(2)线性结构:元素结构关系是一对一的,并且是一种先后的次序。

(3)树形结构:元素结构关系是一对多的,并且存在父子级。

(4)图形结构:元素结构关系是多对多的。

1.3 数据的存储结构

存储结构(storage structure) 也成为物理结构(physical structure),是指数据的逻辑结构在计算机中的存储形式,一般可以反映数据元素之间的逻辑关系。

数据结构有两种不同的存储结构:

(1)顺序存储结构:把数据元素存储在地址连续的存储单元中,数据间的逻辑关系和物理关系是一致的。

(2)链式存储结构:把数据元素存储在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

1.4 抽象数据类型

抽象数据类型(abstract data type,ADT) 是一些操作的集合。描述数据类型的方法不依赖于具体实现,与存放的机器无关,与数据存储的物理结构无关,与实现操作的算法和编程语言无关,只描述数据对象集合相关操作集“是什么”,并不干涉“如何做到”。

表ADT 栈ADT 队列ADT

第二节 算法及性能分析

2.1 算法

算法(algorithm) 是一系列为特定问题而规定指令的集合。有以下特性:

  • 输入,是指算法具有零个或多个输入。

  • 输出,是指算法至少有一个或多个输出。

  • 有穷性,是指算法在执行有限的步骤之后,自动结束而不是出现无限循环,并且每一个步骤在可接受的时间内完成。

  • 确定性,是指相同输入只能有一个唯一的输出结果,不会出现二义性。

  • 可行性,是指算法每一步骤都必须可行,能够通过有限的执行次数完成。

2.2时间复杂度

​ 算法的时间复杂度,也就是算法的时间量度,记作: T(n)=O(f(n))。它表示随问题规模 n的增大算法执行时间的增长率和 f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中 f(n)是问题规模 n的某个函数。

2.2.1计算方法:

1.用常数1取代函数中所有的常数

2.只保留最高项

3.最好情况时间复杂度:代码在最坏情况下执行的时间复杂度。

常用的时间复杂度所耗费的时间从小到大依次是

  • O(1) < O(log n) < O(n) < O(nlog n) < O(n2) < O(n3) < O(n!) < O(nn)
2.2.2 一般法则

法则 1-----for循环

一次for循环的运行时间至多是该for循环内语句的运行时间X循环的次数。

for(i = 1 ; i <= n ; i++)
{x = x + 1;       /* 时间复杂度为O(n) */
}

法则 2-----嵌套的for循环

从里向外分析,在一组嵌套循环内部的一跳语句总的运行时间为该语句的运行时间X该组所有for循环的大小的乘积。

for( i = 0; i < n; i++)
{for(j = 0; j < n; j++)k++;     /* 时间复杂度为O(n*n) */
}

法则 3-----顺序语句

将各个语句的运行时间求和即可,其中的最大值即为运行时间。

for(i = 1 ; i <= n ; i++)
{x = x + 1;       /* 时间复杂度为O(n) */
}
for( i = 0; i < n; i++)
{for(j = 0; j < n; j++)k++;     /* 时间复杂度为O(n*n) */
}
/* 总时间复杂度为O(n*n) */

法则 4-----while语句

int count = 1;
while(count < n){count *= 2;/*时间复杂度为 O(1) 的程序步骤序列*/
}/* 2^x = n  时间复杂度为O(log n) */

2.3 空间复杂度

算法的空间复杂度是通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作: S(n)=O(f(n))S(n)=O(f(n)) S(n) = O(f(n))S(n)=O(f(n)) 。其中,n 为问题的规模, f(n)f(n) f(n)f(n) 为语句关于 n 所占存储空间的函数。

2.4 递归:

int F(int x)
{if(x == 0)retuen 0;else return 2 * F(x-1) + X * X;
}
1.它是否就是循环逻辑?

答案是:虽然函数会用到这个函数本身,但是我们并没有用函数本身来定义函数的一个特定的实例。即使用F(5)来得到F(5)的值才是循环,通过F(4)来得到F(5)的值不是循环的。

2.实现递归的基本准则:

基准情形:递归中必须要有某些基准情形,他们不用递归就能求解。

不断推进:对于那些需要递归求解的情形,递归调用必须总能朝着产生基准情形的方向推进。

设计法则:假设所有的递归调用都能运行。

合成效益法则:在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作。

数据结构与算法分析(一)相关推荐

  1. Weiss的数据结构与算法分析(C++版)源码编译说明

    最近尝试编译Weiss的那本数据结构与算法分析(C++版)提供的源代码时,遇到一些问题,特记录如下: 考虑到该书提供的代码是使用模板技术较多,这在提供简洁代码的同时,也给源码的编译带来了一些问题.因而 ...

  2. 数据结构与算法分析(C++版)(第二版)

    查看书籍详细信息: 数据结构与算法分析(C++版)(第二版) 内容简介 本书采用程序员最爱用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型 ...

  3. 数据结构与算法分析c++第四版_研分享 | 人工智能学院数据结构与算法分析考研备考整理...

    数据结构与算法分析 1.在顺序表中插入或删除一个元素,需要平均移动(表中一半)元素,具体移动的元素个数与(表长和该元素在表中的位置)有关. 2.如果有两个数,每个数的所有约数(除它本身以外)的和正好等 ...

  4. 数据结构与算法分析-第2章

    <?xml version="1.0" encoding="utf-8"?> 数据结构与算法分析-第2章 数据结构与算法分析-第2章 Table o ...

  5. (c#)数据结构与算法分析 --递归

    递归     不知道有新手听没听过别人拿剥糖块来形容递归,诸如一层层地剥好比一层层地进入递归.这种比喻可是误导了我,只想着剥了,其实剥完皮儿,取出糖块,再把皮儿一层层地穿上才算个完整的递归. 递归就是 ...

  6. 二叉堆(最小堆)(数据结构与算法分析的代码实现)

    "堆是一棵被完全填满的二叉树,可能的例外是在底层,底层上的元素从左到右填入.这样的树称为完全二叉树" "因为完全二叉树很有规律,所以可以用一个数组表示而不需要使用链&qu ...

  7. 数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss

    数据结构与算法分析 C++语言描述第四版.Mark Allen Weiss 可用于自学数据结构与算法,数据结构与算法分析对于C++的学习至关重要,应该努力掌握好! 百度网盘: 链接:https://p ...

  8. 数据结构与算法分析:C语言描述(原书第2版 简体中文版!!!) PDF+源代码+习题答案...

    转自:http://www.linuxidc.com/Linux/2014-04/99735.htm 数据结构与算法分析:C语言描述(原书第2版中文版!!!) PDF+源代码+习题答案 数据结构与算法 ...

  9. java数据结构与算法_清华大学出版社-图书详情-《数据结构与算法分析(Java版)》...

    前 言 数据结构是计算机程序设计重要的理论技术基础,它不仅是计算机学科的核心课程,而且已经成为计算机相关专业必要的选修课.其要求是学会分析.研究计算机加工的数据结构的特性,初步掌握算法的时间和空间分析 ...

  10. python数据结构与算法分析_数据结构和算法分析

    问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法, ...

最新文章

  1. 10月21日!API 大赛决赛暨移动云开发者论坛邀您见证数字创新的力量
  2. 【Vegas原创】安装rhel6.2,不能进图形化界面的终极解决方法
  3. 菜鸟、普通、老鸟程序猿如何写奇数判断?--位操作符妙用
  4. boost::statechart模块实现延迟错误的测试程序
  5. 上海名媛群事件是真实的么?
  6. Unity自定义Editor简明教程
  7. monaco-editor浏览器中的网页代码编辑器在项目中集成
  8. 数据仓库分层设计,零基础一看就会
  9. 广州十日 --2006/3/15
  10. 利用C语言写一个等额本息的还款计算器。
  11. Java中强、软、弱、虚引用
  12. Gateway一文详解
  13. 区块如何防篡改_区块链为什么能防篡改?
  14. 基于SpringBoot的社区综合治理系统设计与实现
  15. asp.net房屋出租销售网
  16. AAAI 2023 | 腾讯优图实验室16篇论文入选,含多标签分类、姿态估计、目标检测、HOI、小样本学习等研究方向...
  17. html表单元素占位符是,HTML各种表单元素模板及写法
  18. java 字符串文本匹配并高亮显示处理
  19. 浙大PAT考试1077~1080(2014上机复试题目)
  20. linux从光盘制作.iso,Linux(ubuntu)使用dd从iso制作win7安装光盘(读卡器一样)

热门文章

  1. Java打包exe文件
  2. python sql注入检测脚本_python 打造一个sql注入脚本 (一)
  3. html5毕业设计程序,网页毕业设计制作流程
  4. leo_物业收费管理系统
  5. 短视频源码APP开发,短视频的功能
  6. PMP-8. 项目经理的能力
  7. PPT素材模板哪个网站资源内容比较丰富?
  8. Win10系统安装打印机提示未安装打印机驱动程序,试图将驱动程序添加到存储区
  9. 互联网入口,一个正在消失的“黑洞”
  10. 边缘检测之LoG算子(高斯-拉普拉斯算子)