数据结构与算法(一)基础概念

一、数据结构研究的内容

        分为以下步骤:1.将具体问题抽象为数学模型 

                                  2.设计算法

                                  3.编程、调试、运行

二、概念与术语

        1.数据:数值型数据(整型、实数)、非数值型数据(文字、声音、图像)

        2.数据元素:数据的基本单位(由多个数据组合而成的一个整体

        3.数据项:数据元素的不可分割的最小单位

        4.数据对象:性质相同数据元素集合

                数据元素与数据:集合的个体

                数据对象与数据:集合的子集

        5.数据结构:数据元素相互之间的关系->结构(带结构的数据元素的集合)

                逻辑结构;存储结构/物理结构(映射到内存之中);运算和实现

                逻辑结构:元素之间的逻辑关系、与数据存储无关、是从具体问题中抽象出的数学模型

                物理结构:数据结构在计算机内部的表示(数据元素在计算机存储器中的结构)

                        存储结构是逻辑关系的映像与元素本身的映像

                        逻辑结构是数据结构的抽象,存储机构是数据结构的抽象实现

        6.逻辑结构种类

                线性结构(线性表、栈、队列、串)、非线性结构(树、图)

                集合(数据元素无关系)、线性结构(一对一)、(一对多)、(多对多)

        7.存储结构

                顺序存储结构:数据元素的逻辑关系由存储位置表达(数组实现)<连续内存>

                链式存储结构:数据元素的逻辑关系由指针表示(指针实现)<不连续内存>

                索引存储结构:存储结点信息同时建立了索引表

                散列存储结构:根据结点关键字直接计算出改点的存储结构

        8.数据类型和抽象数据类型

                数据类型:一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称

                        基本数据类型:int,char,float,double

                        构造数据类型:数组、结构、共用体、枚举

                        指针、空(void)类型

                        typedef自定义数据类型

                数据类型的作用:约束变量常量的取值范围操作

                抽象数据结构(Abstract Data Type)一个数学模型以及定义在此数学模型上的一组操作

                        !!!不考虑计算机具体存储结构和运算的具体实现算法

                        形式定义:D(数据对象)S(D上的关系集)P(对D的基本操作集)

ADT  抽象结构类型名{
    DSP
}ADT 抽象数据类型名

                        基本等同于class定义

三、ADT表示与实现

  四、算法与算法分析

                算法:对特定问题解决方法和步骤的一种描述(指令的有限序列)

                算法描述:自然语言、流程图(传统流程图、NS图)、伪代码、程序代码

                算法和程序:算法是由输入得出输出;程序是对算法的具体实现

                        程序=数据结构+算法

                特性        有穷性,执行步数要有穷,每一步执行时间要有穷

                                确定性:每条指令要确定,不能有二义性,存在唯一路径

                                可行性:算法是可执行的

                                输入:0-∞个输入

                                输出:1-∞个输出

                设计要求   正确性、可读性、健壮性(能应对非法输入和处理错误)、高效性

                算法分析:主要考虑算法效率

                                时间效率、空间效率(时间效率和空间效率是矛盾的)

                                时间效率:事后统计(测算),事前分析(估算)

                                        事前分析:算法运行时间=一个简单操作所需的时间×简单操作次数

                                                          算法运行时间=∑(语句执行次数×该语句执行一次需要的时间)

                                                                                       语句频度

                                               直接讨论算法中所有语句的执行频度之和(设每次执行为单位时间)

for(i=1;1<=n;i++)                                //n+1次
    for(j=1;j<=nm;j++)                           //n(n+1)次
        c[i][j]=0;                               //n*n次
        for(k=0;k<n;k++)                         //n*n*(n+1)次
            c[i][j]=c[i][j]+a[i][k]*b[k][j];     //n*n*n次
///每个次数仅为该语句德尔次数(例如循环体语句本身的次数)
//频度之和=所有次数相加,记作T(n)

                T(n)=2n^3+3n^2+2n+1

算法的渐进时间复杂度(时间复杂度):为了方便比较。可以仅比较数量级

                记作:T(n)=O(f(n))                例:T(n)=O(n^3)

        一般情况下只考虑基本操作执行次数(次数最高、运行时间贡献最大、重复次数与算法执行时间成正比的语句)

        问题规模n: 

         定理1.1(忽略掉低次幂项和最高次幂系数)

         计算时间复杂度的方法

                1.找出语句频度最大的语句作为基本语句

                2.计算基本语句关于问题规模n的函数f(n)

                3.取其数量级用符号'O'表示

      例1:

i=1
while(i<=n)
    i=i*2;

                辅助函数f(n)=> 由i<=n得出  2^x<=n   =>    x<=log2^n  =>    T(n)=O(log2^n)

        顺序查找法:        最好情况:1        最坏情况 n       平均时间复杂度0(n)

        对于复杂算法通常将其分解成简单的部分,再进行计算

                加法(两个部分相加):

                        T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))

                 乘法(两个部分嵌套):

                        T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n))

                算法所需时间

         空间复杂度:        S(n)=O(f(n))                n为问题规模

                算法空间:本身占用的空间、输入/输出、指令、常数、变量

                        算法需要辅助空间

                

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值