zoukankan      html  css  js  c++  java
  • 绪论简概

    框架

    数据结构:(data structure)是相互之间存在一种或者多种特定关系的数据元素的集合。(摘自《数据结构(C语言版)》——严蔚敏)

    数据结构的形式定义为:数据结构是一个二元组  

      Data_Structure = (D, S)

    其中:D是数据元素的有限集,S是D上关系的有限集。

    二、数据结构相关的概念和术语

    1.数据:(data)是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

    2.数据元素:(data element)是数据的基本单位。在计算机科程序中通常作为一个整体进行考虑和处理。

    3.数据对象:(data object)是性质相同的数据元素的的集合。是数据的一个子集。

    4.数据类型:(data type)是一个值的集合和定义在这个值上的一组操作的总称。

      按“值”的不同特性,分为两类:

      1)原子类型:其值不可再分。(例如C语言中的基本类型:整型、实型、字符型等等。)

      2)结构类型:其值可以再分解为若干成分的数据类型。

    5.抽象数据类型:(Abstract Data Type/ADT)是指一个数学模型以及定义在该模型上的一组操作。

      一个含抽象数据类型的软件模块通常应包含定义、表示和实现3个部分。

      抽象数据类型的定义由一个值域和定义在该值域上的一组操作组成。若按照其值的不同特性,可分为3种类型:

      1)原子类型:属原子类型的变量的值是不可分解的。

      2)固定聚合类型:属该类型的变量,其值由确定数目的成分按某种结构组成。例如,复数是两个实数按照确定的次序关系构成。

      3)可变聚合类型:和固定聚合类型相比较,构成可变聚合类型“值”的成分的数目是不确定的。

      其中 2), 3)统称为结构类型。

      和数据结构的形式定义,抽象数据类型用三元组表示:

        (D, S, P)

      其中D是数据对象,S是D上的关系集,P是对D的基本操作集

      如该格式:

    ADT 抽象数据类型名{
        数据对象:<数据对象的定义>
        数据关系:<数据关系的定义>
        基本操作:<基本操作的定义>
    }ADT 抽象数据类型名

    三、数据结构三要素

    1.数据的逻辑结构:指数据元素之间的逻辑关系,即从逻辑关系上描述数据。

      有四种基本的逻辑结构;

      1)集合

      2)线性结构 (一对一)

      3)树形结构 (一对多)

      4)图状结构或网状结构 (多对多)

    2.数据的物理结构(存储结构):指数据结构在计算机中的表示(又称映像)。

      数据的存储结构主要有:

      1)顺序存储:逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

        a)优点:可以实现随机存取,每个元素占用最少的存储空间。

        b)缺点:只能使用相邻的一整块存储单元,因此可能产生较多的外部遂碎片。

      2)链式存储:不要求逻辑上相邻的的元素在物理位置上也相邻,借助指示元素所在地址的指针来表示元素之间的逻辑关系。

        a)优点:不会出现碎片现象,能充分利用所有存储单元。

        b)缺点:每个元素因存储指针而占用额外的空间,而且只能实现顺序存取。

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

        a)优点:检索速度快。

        b)缺点:增加附加的索引表后会占用较多的存储空间。另外,在增加和删除数据时要修改索引表,因而会花费较多的时间。

      4)散列存储:根据元素的关键字直接计算出该元素的存储地址,又称为Hash存储

    3.数据的运算

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

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

      b)运算的实现是针对存储结构的,指出运算的具体操作步骤

    四、算法和算法分析

    1.算法的基本概念:

      算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或者多个操作。

      算法所具有的5个重要的特性:

      1)有穷性 一个算法必须总是(对任何合法的输入值)在执行有穷步后结束,且每一步都可在有穷时间内完成。

      2)确定性 算法中每一条指令必须要有确切的含义,读者理解时不会产生二义性。并且在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的输出。

      3)可行性 一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次实现的。

      4)输入 一个算法有零个或者多个的输入,这些输入取自于某个特定的对象的集合。

      5)输出 一个算法有一个或者多个的输出,这些输出是同输入有着某些特定关系的量。

    2.算法设计的要求

      通常一个“好”的算法应该考录到以下目标:

      1)正确性 算法应能够正确地解决求解问题。

      2)可读性 算法应具有良好的可读性,以帮助人们理解。

      3)健壮性 输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

      4)效率与低存储量需求 效率指的是算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。

    3.算法效率的度量

      1)时间复杂度

      一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度。因此,算法的时间量度记为:

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

      它随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度

      一般总是考虑最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。

      在分析一个程序的时间复杂性时,有两个规则:

        a)加法规则

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

        b)乘法规则

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

      常见的渐近复杂度为

      O(1) < O(log2n) < O(n) < O(nlog2n) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)

      2)空间复杂度

      类似于算法的时间复杂度,空间复杂度作为算法所需存储空间的度量,记作

        S(n) = O(f(n))  其中n为问题的规模(或大小)

      算法原地工作是指算法所需的辅助空间为常量,即O(1)。

      

  • 相关阅读:
    电脑开机时一直滴滴的响开不了机是为什么?
    电脑开机时一直滴滴的响开不了机是为什么?
    winform窗体应用实现淡入淡出等效果
    winform窗体应用实现淡入淡出等效果
    windows-如何生成转储(dmp)文件--工具篇
    面向对象(三)- Java类的方法
    面向对象 (二)- Java类的属性
    面向对象 (二)- Java类的属性
    面向对象 (一)- Java中的类和对象
    面向对象 (一)- Java中的类和对象
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/10800084.html
Copyright © 2011-2022 走看看