数据结构(绪论)

1.2基本概念和术语

1.2.1数据,数据元素,数据项,数据对象

*数据:*信息的载体 

           *对客观事物符号化的表示   

           *能被计算机识别,储存或加工

        数据包括:数值型:如整数,实数

                          非数值型:文字,图像,声音,图形

*数据元素:是数据的基本单位,在计算机中通常作为一个整体考虑或处理。用于完整的描述一个对象。是数据的一个个体。又称为:元素,记录,结点,顶点等。如:棋盘的一个状态,一个学生的记录等

*数据项:是组成数据元素的,有独立含义的,不可分割的最小单位。如学生的姓名,年龄等

*数据对象:是性质相同的数据元素的集合,是数据的一个子集

数据项——>数据元素——>数据对象——>数据

1.2.2数据结构

*数据结构:带有结构的数据元素的集合,结构即数据之间存在的关系

                           ——逻辑结构

         数据结构:——物理/存储结构——数据元素及其关系在内存中的表示(又称为映像

                           ——数据的运算和实现

1)逻辑结构

        数据的逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的。可以看作是从具体问题中抽象出来的数学模型

*线性结构:数据元素之间存在一对一的关系,有且仅有一个开始和一个终端结点,中间每个结点只有一个直接前趋和一个直接后继。如:线性表,栈,队列,数组

*非线性结构:——集合结构:数据元素属于同一集合,除此之外别无关系

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

                       ——图形结构:数据元素之间存在多对多的关系

2)存储结构

        数据对象在计算机中的储存表示称为数据的存储结构(物理结构),通常要求存储数据元素和逻辑关系。是数据元素及其关系在计算机中存储的结构,是数据结构在计算机中的表示。

*顺序存储结构:用一组连续的存储单元一次存储数据元素(通常使用数组)

*链式存储结构:无需占用一整块内存空间,但为了表示结点之间的关系,需要在每个结点添加指针字段,用于存放后继结点的存储地址。

3)逻辑结构和存储结构的关系
                *存储结构是逻辑结构和数据元素本身的映像

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

1.2.3数据类型和抽象数据类型

1)数据类型:每一个数据都属于某种数据类型。类型明显或隐含的规定了数据的取值范围,存储方式以及允许进行的运算。数据类型是一个值的集合定义在这个值集上的一组操作的总称。

2)抽象数据类型:

      抽象数据类型(ADT)通常指由用户定义的,表示应用问题的数学模型,及定义在其上的操作总称。具体包括:数据对象数据对象上关系的集合以及对数据对象的基本操作的集合。

        数据对象的形式定义格式:

                ADT 抽象数据类型名{

                        数据对象:<数据对象的定义>

                        数据关系:<数据关系的定义>

                        基本操作:<基本操作的定义>

                }ADT 抽象数据类型名

        其中,数据对象和数据关系的定义用数学语言和自然语言,基本操作的定义格式为:

                基本操作名(参数列表)

                        初始条件:<初始条件描述>

                        操作结果:<操作结果描述>

        ps:参数表:赋值参数:只为操作提供输入值。引用参数:除提供输入值外还返回操作结果

1.3抽象数据类型的表示和实现        见书p8-p9页基本语法

1.4算法与算法分析

        算法:是解决问题的一种方法或过程,为了解决的问题规定的有限长的操作序列,一个问题可以有多个算法。

        程序:某种程序设计语言对算法的具体实现。

        算法语言描述:——自然语言

                                 ——流程图:传统流程图,NS,流程图

                                 ——伪代码,类语言:类c语言                                                        

                                 ——程序代码:c语言,Java语言等

1.4.1算法定义及特性

        算法的五个重要特性:

                1)有穷性:算法必须执行有穷步结束,且每步要在有穷时间完成

                2)确定性:对于操作步骤,算法要有明确定义

                3)可行性:算法的操作可以通过已经实现的基本操作来实现

                4)输入:一个算法要有0个或多个输入

                5)输出:算法要有一个或多个输出,无输出的算法无意义。用函数描述算法时,输出多用返回值或引用类型的形参表示

1.4.2评价算法优劣性的基本标准

                1)正确性:对于精心选择的,典型,苛刻且带有刁难性的数据能满足要求

                2)可读性:易于理解

                3)健壮性:输入数据非法时,能做出正确的反应

                4)高效性:时间和空间的高效性

1.4.3算法的时间复杂度

        衡量算法效率的方法:事后统计法和事前估计法(一般采用后者)

        1)问题规模和语句频度

        问题规模是算法求解问题输入量的多少,一般用n来表示(如矩阵阶数n,树的结点数n)

        语句频度是一条语句重复执行的次数

        设每条语句执行一次所需时间均是单位时间,则一个算法的执行时间可用该算法中所有语句频度来度量

//求两个n阶矩阵的乘积算法
for(int i = 0; i <= n;i++)    //频度为n+1(for循环最后一次要判断,但内部执行n次)
    for(int j = 0;j <= n;j++)    //频度n*(n+1)
    {    
        c[i][j] = 0;            //n*n
        for(int k = 1;k <= n;k++)    //n*n*(n+1)
        c[i][j] = c[i][j]+a[i][j]*b[k][j];    //n*n*n
    }
            

        则该算法所需时间f(n) = 2*n^3+3*n^2+2*n+1

        2)算法时间复杂度定义

                当n—>∞时,若存在一个辅助函数g(n)使得lim f(n)/g(n) = c(c!=0);

                此处g(n)取n^3

                那么f(n)与g(n)为同阶,或者说其数量级相同。用O来表示数量级

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

                上式即为算法的渐进时间复杂度,简称算法时间复杂度

        定理一:求算法时间复杂度时,可以忽略所有低次项和最高次项的系数

        多数情况下,当有若干个循环语句时,算法时间复杂度是由最深层循环内的基本语句的频度决定的

        常见算法时间复杂度递增序列

                常量阶O(1),对数阶O(lgn),线性阶O(n),线性对数阶O(nlgn),平方阶(n^2),立方阶O(n^3),......,k次方阶O(n^k),指数阶O(2^n),阶乘阶O(n!)

//对数阶分析
for(int i = 1;i <= n;i=i*2)
{x++;s=0}
//取a为执行次数
//则有2^a<=n
//得a <= log2(n)

        3)最好,最坏和平均时间复杂度

        对于某些问题的算法时间复杂度,除问题规模外,还依赖于其他因素(如排序的数组原始状态)

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

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

        平均时间复杂度:算法在所有可能的情况下,按照输入示例以等概率出现时计算量的加权平均值。

        通常考虑最坏时间复杂度和平均时间复杂度

        4)算法时间复杂度的计算法则

                加法法则

                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) )

1.4.4算法空间复杂度

        只需分析算法在实现时所需要的辅助空间

        若执行时所需要的辅助空间相对于输入数据来说是个常数,则称为原地工作,辅助空间O(1)

对一个算法来说,其时间复杂度和空间复杂度往往是此消彼长的

                

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值