——整理与温习 2015.1.16
一、概论
对程序中的操作计算和处理对象的抽象产生了数据结构和算法。
1.1数据结构是什么?
数据的逻辑结构和物理结构统称为数据结构;数据,是信息的载体,作为计算操作的处理对象需要进行抽象简化以便在逻辑层面方便理解和分析处理,数据元素组成了数据;
以数据元素之间的关系为逻辑结构,逻辑结构在计算中的表示就是物理结构;有四种逻辑结构(集合、线性、树、图),那么每种逻辑结构是怎么在计算中物理存储;物理存储结构有四种映象方法(顺序、链接、索引、散列),依我看索引和散列都算是一种链接。
数据类型和数据结构之间的关系?高级语言对数据按相同的特性行为进行抽象出不同的数据类型,数据类型代表了值集(对象集)和操作集合的集合体,基本数据类型可作用于数据项,数组、类型记录类型等结构类型可作用于数据元素。
1.2算法是什么?
算法是用为某个特定类型问题提供了解决问题的运算序列,是一个有穷规则(指令)的集合。
数据结构描述了数据,算法是对数据进行运算。
算法的描述可以用自然语言、流程图、程序语言等三种方式。
1.3抽象
数据结构在程序抽象中开始存在。
抽象:是对一个系统的简化描述,强调了系统的某些特性,而把其他性质隐蔽起来。
程序设计语言的发展过程就是程序的抽象层次不断提高的过程。
程序中的计算和操作的抽象发展阶段:
1)二进制代码与机器指令
2)符号化的汇编语句
3)高级语言的语句
4)高级语言的子语句(过程、函数)与调用。
计算的处理对象的抽象发展阶面:
1)机器语言的二进制序列,非类型化的0,1串。
2)汇编语言引入整数的表示,整型数据经过汇编系统的处理转换成二进制。
3)过程语言引进了数据类型,把非类型的0,1串分解成为若干子集,同一子集中每个成分有相同的特性行为,构成了不同的类型。引入整型、实型、布尔型、字符型等基本数据类型,引入数组类型、记录类型等结构类型。
1.4数据类型
数据从无类型发展到带有类型,数据抽象的发展和计算的抽象的发展是相互促进的。
数据类型是若干对象和在这些对象上可以执行的各种操作的集合体,值集(对象集)和操作集合的集合体。
抽象数据类型(Abstract Data Type,ADT)是定义一个数据逻辑模型(数学模型),以及在其上定义一组操作,每个操作由它的输入、输出定义。
二、数据结构
2.1逻辑结构
数据:数据是信息的载体。
数据元素:数据元素是组成数据的基本单位。有时简称为元素、结点、顶点、记录。
数据项:组成数据元素的一个成分。数据项是具有独立含义的最小标识单位。
/*数据元素和数据项的示例:学生成绩表
学号 --姓名-- 语文 --数学
001 --王一-- 80---90
002 --李二-- 85---95
说明:每一行就是一个元素,也经常叫一行记录,每个元素由学号、姓名、语文、数学这几个数据项组成。
*/
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
数据的逻辑结构:数据以及数据元素之间的相互关系,又称为元素间的结构。
数据的逻辑结构可表示为:B=(K,R),其中K是结点(数据元素)的有穷集合,R是K上的一个关系。
如K={k1,k2,k3,k4,k5,k6},
逻辑结构R1={<k1,k2>,<k2,k3>,<k3,k4>,<k4,k5>,<k5,k6>},
逻辑结构R2={……};
设B=(K,R)是一个逻辑结构,k1、k2属于K,<k1,k2>属于R,
则k1是k2的前趋,k2是k1的后继,k1与k2是相邻的;
如果k2在R中无前趋结点,则k2为R的开始结点;如果k1在R中无后继,则称k1为无后继结点,也称k1为R的终端结点;
如果k1既不是开始结点又不是终端节点,则称k为内部结点。
数据的逻辑结构分类:根据R的特性可分为四类,集合结构,线性结构,树型结构(多后继),图型结构(多前趋)。
2.2物理结构
数据的逻辑结构是操作对象的数学描述,是用户对操作对象抽象得到的数学模型,因而它与数据的存储无关,是面向问题而独立于计算机的(就是还没关计算机的事)。
数据的存储结构,又称物理结构:是数据的逻辑结构在计算机中的表示(映象)。我觉得叫物理存储结构更好。
数据的逻辑结构、物理结构统称为数据结构。
存储结构的描述是在高级语言的层次上给出的,如用一维数组来描述顺序存储结构,指针类型定义链式存储结构。
三、算法
3.1算法的概念
算法是用为某个特定类型问题提供了解决问题的运算序列,是一个有穷规则(指令)的集合,且具有五个特性:
1)有穷性:执行有穷步之后结束,这并不是意味着在人们可容忍的时间内结束;
2)确定性:算法的每一个步骤必须是确切定义的;
3)输入:有0个或多个输入,0个输入指在算法内部给出了初始数据;
4)输出:有一个或多个输出,是算法对输入进行加工的结果;
5)可行性:所定义的每个动作都必须是能够精确地付诸实施,而且人们用笔和纸做有穷次计算即可完成。
算法的描述可以用自然语言、流程图、程序语言等三种方式。
3.2算法设计的基本技术:
1)分治法:
对于一个输入规模为n的问题,分治策略将输入分成K个不同的子集1<=K<=n,得到K个与原问题类型相同的子问题;对这K个子问题求解,然后寻找一个方法,把K个子问题的解合并成原来整个问题的解。子问题的规模还太大的话,可以反复使用分治。
*实际应用:有序表的二分查找算法,找最大和最小的元素,找第K小的元素,快速排序,归并排序等。
2)贪心法:最优。
*实际应用:求最小生成树、单源最短路径、哈夫曼树、最优归并树、背包问题。
3)动态规划法
*实际应用:图的求每对顶点之间最短路径、计算关键路径,构造最优二分检索树,0/1背包问题,货郎担问题等。
4)基本检索与遍历技术:
检索:在数据结构中查找满足某种条件的数据结点(数据对象)。
遍历:在数据结构中对每个结点访问一次且只访问一次的操作。
检索算法有:线性表的顺序查找、有序表的二分查找、散列存储的散列查找、二叉排序树的查找、二叉平衡树的查找、B树的查找等。
遍历算法有:二叉树的先根、中根、后根、层次遍历,树的先根、后根、层次遍历,图的深度优先、广度优先遍历等。
5)回溯法:迷宫这条路走不通,回头走另一条。
*实际应用:皇后问题、迷宫问题、子集和问题、图的着色问题、0/1背包问题、哈密顿回路等。
3.3算法分析
算法分析是对一种算法所消耗的资源—机器时间、存储空间的估算。从算法的时间复杂度、空间复杂度来分析评判一个算法。
时间复杂度T(n):一个算法的相应程序在运行时所需的运算时间。渐近表示法,上限、下限、上下限。
空间复杂度S(n):一个算法的相应程序在运行时所需的存储空间大小。
时间复杂度的度量与下述因素有关:
1)程序的输入量;
2)编译程序的质量;
3)所使用的机器指令的性能和速度;
4)内涵于程序中执行的程序步程数(运算、操作次数);
空间复杂度的度量方法通常定义为算法在运行时所占用内存单元的总数,即存放数据的变量单元、程序代码、工作变量、常数以及运行时的动态存储单元—引用型蛮量所占用空间单元和递归栈空间的总和。
分析算法时,总是希望T(n) 和S(n)都小的算法,这常常是矛盾的;
在设计算法时常采取一个重要原则:空间换时间;(这点在数据仓库上应用很频繁,也可以用在报表性能优化上)
另一个原则是:磁盘上存储开销越少,程序运行得越快;
一、概论
对程序中的操作计算和处理对象的抽象产生了数据结构和算法。
1.1数据结构是什么?
数据的逻辑结构和物理结构统称为数据结构;数据,是信息的载体,作为计算操作的处理对象需要进行抽象简化以便在逻辑层面方便理解和分析处理,数据元素组成了数据;
以数据元素之间的关系为逻辑结构,逻辑结构在计算中的表示就是物理结构;有四种逻辑结构(集合、线性、树、图),那么每种逻辑结构是怎么在计算中物理存储;物理存储结构有四种映象方法(顺序、链接、索引、散列),依我看索引和散列都算是一种链接。
数据类型和数据结构之间的关系?高级语言对数据按相同的特性行为进行抽象出不同的数据类型,数据类型代表了值集(对象集)和操作集合的集合体,基本数据类型可作用于数据项,数组、类型记录类型等结构类型可作用于数据元素。
1.2算法是什么?
算法是用为某个特定类型问题提供了解决问题的运算序列,是一个有穷规则(指令)的集合。
数据结构描述了数据,算法是对数据进行运算。
算法的描述可以用自然语言、流程图、程序语言等三种方式。
1.3抽象
数据结构在程序抽象中开始存在。
抽象:是对一个系统的简化描述,强调了系统的某些特性,而把其他性质隐蔽起来。
程序设计语言的发展过程就是程序的抽象层次不断提高的过程。
程序中的计算和操作的抽象发展阶段:
1)二进制代码与机器指令
2)符号化的汇编语句
3)高级语言的语句
4)高级语言的子语句(过程、函数)与调用。
计算的处理对象的抽象发展阶面:
1)机器语言的二进制序列,非类型化的0,1串。
2)汇编语言引入整数的表示,整型数据经过汇编系统的处理转换成二进制。
3)过程语言引进了数据类型,把非类型的0,1串分解成为若干子集,同一子集中每个成分有相同的特性行为,构成了不同的类型。引入整型、实型、布尔型、字符型等基本数据类型,引入数组类型、记录类型等结构类型。
1.4数据类型
数据从无类型发展到带有类型,数据抽象的发展和计算的抽象的发展是相互促进的。
数据类型是若干对象和在这些对象上可以执行的各种操作的集合体,值集(对象集)和操作集合的集合体。
抽象数据类型(Abstract Data Type,ADT)是定义一个数据逻辑模型(数学模型),以及在其上定义一组操作,每个操作由它的输入、输出定义。
二、数据结构
2.1逻辑结构
数据:数据是信息的载体。
数据元素:数据元素是组成数据的基本单位。有时简称为元素、结点、顶点、记录。
数据项:组成数据元素的一个成分。数据项是具有独立含义的最小标识单位。
/*数据元素和数据项的示例:学生成绩表
学号 --姓名-- 语文 --数学
001 --王一-- 80---90
002 --李二-- 85---95
说明:每一行就是一个元素,也经常叫一行记录,每个元素由学号、姓名、语文、数学这几个数据项组成。
*/
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
数据的逻辑结构:数据以及数据元素之间的相互关系,又称为元素间的结构。
数据的逻辑结构可表示为:B=(K,R),其中K是结点(数据元素)的有穷集合,R是K上的一个关系。
如K={k1,k2,k3,k4,k5,k6},
逻辑结构R1={<k1,k2>,<k2,k3>,<k3,k4>,<k4,k5>,<k5,k6>},
逻辑结构R2={……};
设B=(K,R)是一个逻辑结构,k1、k2属于K,<k1,k2>属于R,
则k1是k2的前趋,k2是k1的后继,k1与k2是相邻的;
如果k2在R中无前趋结点,则k2为R的开始结点;如果k1在R中无后继,则称k1为无后继结点,也称k1为R的终端结点;
如果k1既不是开始结点又不是终端节点,则称k为内部结点。
数据的逻辑结构分类:根据R的特性可分为四类,集合结构,线性结构,树型结构(多后继),图型结构(多前趋)。
2.2物理结构
数据的逻辑结构是操作对象的数学描述,是用户对操作对象抽象得到的数学模型,因而它与数据的存储无关,是面向问题而独立于计算机的(就是还没关计算机的事)。
数据的存储结构,又称物理结构:是数据的逻辑结构在计算机中的表示(映象)。我觉得叫物理存储结构更好。
数据的逻辑结构、物理结构统称为数据结构。
存储结构的描述是在高级语言的层次上给出的,如用一维数组来描述顺序存储结构,指针类型定义链式存储结构。
三、算法
3.1算法的概念
算法是用为某个特定类型问题提供了解决问题的运算序列,是一个有穷规则(指令)的集合,且具有五个特性:
1)有穷性:执行有穷步之后结束,这并不是意味着在人们可容忍的时间内结束;
2)确定性:算法的每一个步骤必须是确切定义的;
3)输入:有0个或多个输入,0个输入指在算法内部给出了初始数据;
4)输出:有一个或多个输出,是算法对输入进行加工的结果;
5)可行性:所定义的每个动作都必须是能够精确地付诸实施,而且人们用笔和纸做有穷次计算即可完成。
算法的描述可以用自然语言、流程图、程序语言等三种方式。
3.2算法设计的基本技术:
1)分治法:
对于一个输入规模为n的问题,分治策略将输入分成K个不同的子集1<=K<=n,得到K个与原问题类型相同的子问题;对这K个子问题求解,然后寻找一个方法,把K个子问题的解合并成原来整个问题的解。子问题的规模还太大的话,可以反复使用分治。
*实际应用:有序表的二分查找算法,找最大和最小的元素,找第K小的元素,快速排序,归并排序等。
2)贪心法:最优。
*实际应用:求最小生成树、单源最短路径、哈夫曼树、最优归并树、背包问题。
3)动态规划法
*实际应用:图的求每对顶点之间最短路径、计算关键路径,构造最优二分检索树,0/1背包问题,货郎担问题等。
4)基本检索与遍历技术:
检索:在数据结构中查找满足某种条件的数据结点(数据对象)。
遍历:在数据结构中对每个结点访问一次且只访问一次的操作。
检索算法有:线性表的顺序查找、有序表的二分查找、散列存储的散列查找、二叉排序树的查找、二叉平衡树的查找、B树的查找等。
遍历算法有:二叉树的先根、中根、后根、层次遍历,树的先根、后根、层次遍历,图的深度优先、广度优先遍历等。
5)回溯法:迷宫这条路走不通,回头走另一条。
*实际应用:皇后问题、迷宫问题、子集和问题、图的着色问题、0/1背包问题、哈密顿回路等。
3.3算法分析
算法分析是对一种算法所消耗的资源—机器时间、存储空间的估算。从算法的时间复杂度、空间复杂度来分析评判一个算法。
时间复杂度T(n):一个算法的相应程序在运行时所需的运算时间。渐近表示法,上限、下限、上下限。
空间复杂度S(n):一个算法的相应程序在运行时所需的存储空间大小。
时间复杂度的度量与下述因素有关:
1)程序的输入量;
2)编译程序的质量;
3)所使用的机器指令的性能和速度;
4)内涵于程序中执行的程序步程数(运算、操作次数);
空间复杂度的度量方法通常定义为算法在运行时所占用内存单元的总数,即存放数据的变量单元、程序代码、工作变量、常数以及运行时的动态存储单元—引用型蛮量所占用空间单元和递归栈空间的总和。
分析算法时,总是希望T(n) 和S(n)都小的算法,这常常是矛盾的;
在设计算法时常采取一个重要原则:空间换时间;(这点在数据仓库上应用很频繁,也可以用在报表性能优化上)
另一个原则是:磁盘上存储开销越少,程序运行得越快;