zoukankan      html  css  js  c++  java
  • 数据结构笔记一:诸论

    数据结构

    基本概念

    数据

    数据是信息的载体,是描述客观事物属性。

    数据元素,数据项

    数据元素是数据的基本单位,通常作为一个整体进行考虑和处理;

    一个数据元素可以由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。

    数据结构、数据对象

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

    数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

    数据类型,抽象数据类型

    数据类型是一个值的集合和定义在此集合上的一组操作的总称

    1. 原子类型:其值不可再分的数据类型
    2. 结构类型:其值可以再分解为若干成分(分量)的数据类型
    3. 抽象数据类型:抽象数据组织及与之相关的操作

    数据结构三要素

    数据的逻辑结构

    image-20210805172402474

    集合:结构种的元素之间除“同属一个集合”外,别无其他关系。

    线性关系:结构种的数据元素之间只存在一对一的关系。

    树形关系:结构种的数据元素之间存在一对多的关系。

    图状结构(网状结构):结构种的数据元素之间存在多对多的关系。

    数据的存储结构

    存储结构是数据结构在计算机种的表示(映像)--物理结构

    顺序存储

    image-20210805172740882

    把逻辑上相邻的元素存储再物理位置上也相邻的存储单元中。

    链式存储

    image-20210805172747766

    逻辑上相邻的元素再物理位置上可以不相邻。

    索引存储

    image-20210805172817313

    在存储元素信息的同时,还简历附加的索引表。索引表的每项称为索引项,索引项的一般形式是(关键字,地址)

    散列存储

    根据元素的关键字直接计算出该元素的存储地址,又称哈希存储。

    数据的运算

    施加在数据上的运算包括运算的定义和实现。

    运行的定义是针对逻辑结构的,指出运算的功能;

    运算的实现是针对存储结构的,指出运算的具体步骤。

    算法

    基本概念

    算法是对特定问题求解步骤的一种描述。5个重要特性

    1. 有穷性:步骤,时间有穷
    2. 确定性:步骤确定,相同输入时输出确定
    3. 可行性:执行有限次基本运算来实现
    4. 输入:一个算法有两个或多个输入
    5. 输出:一个算法有一个或多个输出

    目标:

    1. 正确性:正确低解决问题
    2. 可读性:帮助人们理解
    3. 健壮性:输入非法时,应能适当地做出反应或进行处理
    4. 效率与低存储量需求:效率高,最大存储空间小

    算法效率的度量

    时间复杂度

    事前估计算法时间开销T(n)与问题规模n的关系

    算法中所有语句的频度之和记为(T(n)),通常采用算法基本运算的频度(f(n))来分析算法的时间复杂度局。

    [T(n)=O(f(n)) ]

    (O)的含义是(T(n))​的数量级

    • 加法规则

      [T(n)=T_1(n)+T_2(2)=O(f(n))+O(g(n))=O(max(f(),g())) ]

    • 乘法规则

      [T(n)=T_1(n)+T_2(2)=O(f(n))+O(g(n))=O(f(n) imes g(n)) ]

    常见的渐近时间复杂度

    [O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n) ]

    最坏时间复杂度:在最坏情况下,算法的时间复杂度

    平均时间复杂度:所有可能输入实例在等概论出现的情况下,算法的期望运行时间

    最好时间复杂度:在最好情况下,算法的时间复杂度

    image-20210805203109186

    空间复杂度

    算法的空间复杂度(S(n))定义为该算法所耗费的存储空间,它是问题规模n的函数,记为

    [S(n)=O(g(n)) ]

    算法原地工作--算法所需内存空间为常量

    image-20210805203200502

  • 相关阅读:
    【javaFX学习】(二) 面板手册
    Android开发从系统图库中选择一张图片的方法
    用Android studio进行 OpenCV 开发的第一个项目
    【Android学习入门】Android中activity的启动模式
    Android Studio快捷键【Android学习入门】
    【Android学习入门】Android studio基本设置
    安装Android模拟器Genymotion【Android学习入门】
    Android studio 安装与配置【Android学习入门】
    【知乎】日常生活中有哪些十分钟就能学会并可以终生受用的技能?(一)
    C++学生信息处理
  • 原文地址:https://www.cnblogs.com/Ligo-Z/p/15190561.html
Copyright © 2011-2022 走看看