大话数据结构 绪论 算法

狗狗

《大话数据结构》 阅读整理

数据结构绪论

数据结构的起源

数据结构是相互之间存在一种或多种特定关系的数据元素的集合

基本概念和术语

数据

描述客观事物的符号 是计算机中可以操作的对象 是能被计算机识别 并输入给计算机处理的符号集合

数据元素

组成数据的 有一定意义的基本单位 通常被作为整体处理

数据项

一个数据元素可以由若干个数据项组成

数据不可分割的最小单元

数据对象

性质相同的数据元素的集合 数据的子集

数据结构

不同数据元素之间不是独立的 存在特定的关系 这些关系称为结构

逻辑结构与物理结构

逻辑结构

数据对象中数据元素之间的相互关系

分类

  • 集合结构

数据元素除了同属于一个集合外 之间没有其他关系

  • 线性结构

数据元素之间是一对一的关系

  • 树形结构

数据元素之间存在一种 一对多的关系

  • 图形结构

数据元素是多对多的关系

物理结构

数据的逻辑结构在计算机中的存储形式

分类

  • 顺序存储结构 数据元素存放在地址连续的存储单元里 数据间的逻辑关系和物理关系是一致的
  • 链式存储结构 数据元素存放在任意的存储单元里 这组存储单元可以是连续的 也可以是不连续的

数据类型

数据类型定义

原子类型

不可以再分解的基本类型

整型 实型 字符型 ……

结构类型

由若干个类型组合而成 可以再分解

整形数组由若干整型数据组成……

抽象

抽取出事物具有的普遍性的本质

抽象数据类型

一个数学模型及定义在该模型上的一组操作

体现了程序设计中问题分解 抽象和信息隐藏的特性

数据结构绪论

算法

算法定义

解决特定问题求解步骤的描述 在计算机中表现为指令的有限序列 并且每条指令表示一个或多个操作

算法特性

输入

算法具有零个或多个输入

输出

算法至少有一个或多个输出

有穷性

算法在执行有限步骤后 自动结束而不会出现无限循环 并且每一个步骤在可接受的时间内完成

确定性

算法的每一步骤都具有确定的含义 不会出现二义性

可行性

算法的每一步都必须是可行的 每一步都能够通过执行有限次数完成

算法设计要求

正确性

算法至少应该具有输入 输出和加工处理无歧义性 能正确反映问题的需求 能够得到问题的正确答案

可读性

算法设计的另一目的是为了便于阅读 理解和交流

健壮性

输入数据不合法时 算法也能做出相关处理 不是产生异常或莫名其妙的结果

时间效率高和存储量低

尽量满足时间效率高和存储量低的需求

算法效率的度量方法

事后统计方法

通过设计好的测试程序和数据 利用计算机计时器对不同算法编制的程序的运行时间进行比较 从而确定算法效率的高低

事前分析估算方法

在计算机编制前 依据统计方法对计算机进行估算

高级语言所消耗的时间取决于

  • 算法采用的策略 方法

算法好坏的根本

  • 编译产生的代码质量

软件问题

  • 问题的输入规模(输入量)

程序运行时间的关键

  • 机器执行指令的速度

硬件问题

时间复杂度

T(n) = O(f(n))

随问题规模n的增大 算法执行时间的增长率和f(n)的增长率相同

n表示数据规模 ; O( f(n) )表示运行算法所需要执行的指令数,和f(n)成正比

f(n) 问题规模n的某个函数

推导大O阶方法

用常数1取代运行时间中的所有加法常数

在修改后的运行次数函数中 只保留最高阶项

如果最高阶项存在且其系数不是1 则去除与这个项相乘的系数 得到结果就是大O阶

常见时间复杂度

  • O(1)

常数阶

  • O(n)

线性阶

  • O(n^2)

平方阶

  • O(log n)

对数阶

  • O(n * log n)

n log n阶

  • O(n ^ 3)

立方阶

  • O(2 ^ n)

指数阶

所耗费的时间

O(1)<O(log n)<O(n)<O(nlog n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)

最坏情况与平均情况

平均运行时间是期望的运行时间

没有特殊情况下默认是平均运行时间

算法

你知道的越多 你不知道的越多 嘿 我是小博 带你一起看我目之所及的世界……

-------------本文结束 感谢您的阅读-------------

本文标题:大话数据结构 绪论 算法

文章作者:小博

发布时间:2022年03月05日 - 21:46

最后更新:2022年03月05日 - 21:48

原始链接:https://codexiaobo.github.io/posts/1863985833/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。