数据结构期末复习(1)学科定义、组成、算法的定义、时间复杂度比较

这篇具有很好参考价值的文章主要介绍了数据结构期末复习(1)学科定义、组成、算法的定义、时间复杂度比较。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

数据结构的几个方面

逻辑结构的描述

逻辑结构

存储结构

数据运算

数据结构和数据类型

数据类型

抽象数据类型(ADT)

算法及其描述

什么是算法

算法分析

算法的设计目标

算法时间性能分析

计算算法频度

算法时间复杂度

简化的算法时间复杂度分析


数据结构学科定义:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。

数据:描述客观事物的数值、字符以及所有能被机器处理的各种符号集合

数据元素:数据的基本单位(例如一个班级中的每个学生记录为一个数据元素),数据元素是组成数据的有一定意义的基本单位。数据元素通常由若干个数据项组成(学生记录的姓名、性别等都是数据项)

数据项:数据的最小单位,也称域

数据对象:描述相同性质数据元素的集合,数据的子集

数据结构:存在某种特定关系的数据元素的集合

数据结构 = 数据对象+结构(数据元素间的关系构成结构)

  • 默认情况下数据结构中的数据都指的是数据对象

数据结构的几个方面

逻辑结构 --------- 逻辑层面(数据元素之间的逻辑关系)--独立于计算机

物理结构(存储结构) --------- 数据元素及其关系在计算机中的存储方式

数据运算 --------- 施加在数据上的操作

逻辑结构的描述

  • 二元组

    数据结构={D,R}

    D:数据元素的集合

    R: D中数据元素之间的关系,关系是使用序偶来表示的。

    序偶是由两个元素x和y按一定顺序排列而成的二元组,记<x,y>。x是它的第一元素,y是它的第二元素。

    x为y的前驱元素

    y为x的后继元素

    若某个元素没有前驱元素(称为开始元素)

    若某个元素没有后驱元素(称为终端元素)

    • 对称序偶

      若<x,y>∈r(r∈R),则<y,x>∈r(x,y∈D),可用圆括号代替尖括号,即(x,y)∈r。

  • 图形

    图形中的点表示数据元素,图形中的弧表示数据元素之间的关系

    如果数据元素x和y之间的关系为<x,y>,则图形中有从x的点出发到y的点的一条弧

逻辑结构

按照数据元素之间相互关系的特性来分,可以分为

  • 集合
  • 线性结构(线性表、栈、队列):若结构非空,则有且仅有一个开始元素和终端元素,并且所有元素最多只有一个前驱元素和一个后继元素。
  • 树形结构:若结构是非空的,则有且仅有一个元素为开始元素(也称为根结点),可以有多个终端元素,每个元素有零个或多个后继元素,除开始元素外每个元素有且仅有一个前驱元素。
  • 图状结构:若结构是非空的,则每个元素可以有多个前驱元素和多个后继元素。

存储结构

计算机中存储器存储数据的方式

逻辑结构 —映射—>存储结构

顺序存储结构:

  • 所有元素存放在一片地址连续的存储单元中
  • 逻辑上相邻的元素在物理位置上也是相邻的,所以不需要额外空间表示元素之间的逻辑关系。

链式存储结构:

  • 数据元素存放在任意的存储单元中,这组存储单元可以是连续的,也可以是不连续的
  • 通过指针域来反映数据元素的逻辑关系

数据运算

  • 将数据存放在计算机中的目的是为了实现一种或多种运算。
  • 运算包括功能描述(或运算功能)和功能实现(或运算实现)
  • 前者是基于逻辑结构的,是用户定义的,是抽象的
  • 后者是基于存储结构的,是程序员用计算机语言或伪码表示的,是详细的过程,其核心是设计实现某一运算功能的处理步骤,即算法设计。

注: 同一逻辑结构可以对应多种存储结构。 同样的运算,在不同的存储结构中,其实现过程是不同的。 

数据结构和数据类型

数据类型

数据类型是一组性质相同的值的集合和定义在此集合上的一组操作的总称。

  • 数据结构是指计算机处理的数据元素的组织形式和相互关系,而数据类型是某种程序设计语言中已实现的数据结构。
  • 在程序设计语言提供的数据类型支持下,就可以根据从问题中抽象出来的各种数据模型,逐步构造出描述这些数据模型的各种新的数据结构。

抽象数据类型(ADT)

​ 抽象数据类型(ADT)指的是从求解问题的数学模型中抽象出来的数据逻辑结构和运算(抽象运算),而不考虑计算机的具体实现。

抽象数据类型 = 逻辑结构+抽象运算

表示: 三元组 ADT = (D,S,P) D: 数据对象 S: D上的关系集 P: 加在D上的一组操作 定义抽象数据类型时,可以使用以下形式: ADT 抽象数据类型名{ 数据对象: 数据关系: 基本操作: } 

算法及其描述

什么是算法

算法:对特定问题求解步骤的一种描述,它是指令的有限序列

算法的五个重要特性

  • 有穷性 --- 算法执行有限步骤后自动结束,每步在可接受的时间内完成
  • 确定性 --- 对于每种情况下执行的操作,在算法中都有确定的含义,不会出现二义性。并且在任何条件下,算法都只有一条执行路径。
  • 可行性 --- 每条指令都是可执行的
  • 输入性 --- 零个或多个输入
  • 输出性 --- 一个或多个输出

算法分析

算法的设计目标

  • 正确性

  • 可使用性

  • 可读性

  • 健壮性

  • 高时间性能与低存储量需求

算法时间性能分析

算法由控制结构(顺序、分支、循环)和原操作(基本类型的操作+,-,*,/等)构成

  • 算法执行时间取决于两者综合
  • 在一个算法中,执行原操作的次数越少,其执行时间也就相对地越少;执行原操作次数越多,其执行时间也就相对地越多。
  • 算法中所有原操作的执行次数称为算法频度,这样一个算法的执行时间可以由算法频度来计量。
计算算法频度
  • 假设算法的问题规模为n,例如对10个整数排序,问题规模为n就是10。算法频度是问题规模n的函数,用T(n)表示。
  • 算法执行时间大致等于原操作所需的时间×T(n),也就是说T(n)与算法的执行时间成正比。为此用T(n)表示算法的执行时间。比较不同算法的T(n)大小得出算法执行时间的好坏。

例:

// 两个n阶方阵相加,求T(n)
void matrixadd(int[][] A,int[][] B,int[][] C,int n)
{  for (int i=0;i<n;i++)		//语句①  n+1
      for (int j=0;j<n;j++)		//语句②  n(n+1)
	  C[i][j]=A[i][j]+B[i][j];	//语句③  n^2
}

T(n)= n+1+n(n+1)+n2 = 2n2+2n+1 = O(n2)

算法时间复杂度

算法中执行时间T(n)是问题规模n的某个函数f(n),记作:T(n)=O(f(n))

也就是只求出T(n)的最高阶,忽略其低阶项和常系数,这样既可简化T(n)的计算,又能比较客观地反映出当n很大时算法的时间性能。

一般的

  • 一个没有循环的算法的执行时间与问题规模n无关,记作O(1),也称作常数阶。
  • 一个只有一重循环的算法的执行时间与问题规模n的增长呈线性增大关系,记作O(n),也称线性阶。
  • 其余常用的算法时间复杂度还有平方阶O(n^2)、立方阶O(n^3)、对数阶O(log2n)、指数阶O(2^n)等。

各种不同算法时间复杂度的比较关系如下:

 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数)
a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f
a ! =0时,时间复杂度就是O(2^n);
a=0,b<>0 =>O(n^3);
a,b=0,c<>0 =>O(n^2)依此类推

eg:
(1)   for(i=1;i<=n;i++)         //循环了n*n次,是O(n^2)
            for(j=1;j<=n;j++)
                 s++;
(2)   for(i=1;i<=n;i++)         //循环了(n+n-1+n-2+...+1)≈(n^2)/2 是O(n^2)
            for(j=i;j<=n;j++)
                 s++;
(3)   for(i=1;i<=n;i++)         //循环了(1+2+3+...+n)≈(n^2)/2, 是O(n^2)
            for(j=1;j<=i;j++)
                 s++;
(4)  
i=1;k=0;     
while(i<=n-1)
{          
k+=10*i;
i++;
}
//循环了
n-1≈n次,所以是O(n)
(5)
for(i=1;i<=n;i++)
    for(j=1;j<=i;j++)
        for(k=1;k<=j;k++)
            x=x+1;
循环了(1^2+2^2+3^2+...+n^2)=n(n+1)(2n+1)/6≈(n^3)/3,是O(n^3)

简化的算法时间复杂度分析
  • 仅仅考虑算法中的基本操作

  • 基本操作:算法中最深层循环内的原操作

    • 算法的执行时间大致等于基本操作所需时间X其运算次数

      算法分析时,计算T(n)仅仅考虑基本操作的执行次数文章来源地址https://www.toymoban.com/news/detail-771843.html

到了这里,关于数据结构期末复习(1)学科定义、组成、算法的定义、时间复杂度比较的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】——期末复习题题库(1)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年02月03日
    浏览(57)
  • 数据结构期末复习(C语言版)

    数据:所有能输入计算机并被计算机程序处理的符号的总称; 数据元素:数据的基本单位; 数据项:组成数据元素的、有独立含义的、不可分割的最小单位; 数据对象:是性质相同的数据元素的集合,是数据的一个子集; 范围大小:数据数据对象数据元素数据项 举例:数

    2024年01月19日
    浏览(52)
  • 数据结构笔记(c++版,期末复习)

      目录 一、绪论 1.数据结构基本概念 2.算法定义与特征 二、线性表 1.线性表的定义 2.顺序表的存储结构 3.链式存储结构 三、栈和队列 1、栈的基本概念 2.队列的基本概念 3.循环队列  四、字符串和多维数组 1.字符串的基本概念 2.串的简单模式匹配 3.多维数组 3.1数组的定义

    2024年02月12日
    浏览(49)
  • 【数据结构】——期末复习题题库(4)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年02月02日
    浏览(83)
  • 数据结构(期末复习篇) 清华大学出版社

    1.1.1 数据结构的定义 数据:描述客观事物的数和字符的集合 数据元素: 数据的基本单位 数据对象: 性质相同的数据元素的集合,是数据的一个子集 数据结构: 数据元素以及数据元素之间的关系,可以看作互相之间有着特定关系的集合 1.1.2 逻辑结构 1.逻辑结构的表示 一 

    2024年01月20日
    浏览(51)
  • 数据结构期末复习(4)串 树和二叉树

    在数据结构中,串是由零个或多个字符组成的有限序列。它是一种线性数据结构,常用于表示和处理文本、字符串等信息。 串的特点包括: 顺序性:串中的字符按照一定的先后顺序排列,每个字符都有一个唯一的位置。 有限性:串的长度是有限的,它由字符的个数决定。

    2024年01月17日
    浏览(46)
  • 数据结构与算法期末复习——知识点+题库

    (1)数据:所有能被计算机识别、存储和处理的符号的集合(包括数字、字符、声音、图像等信息 )。 (2)数据元素:是数据的基本单位,具有完整确定的实际意义。在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。 (3)数据项:构成数据元

    2024年02月12日
    浏览(53)
  • 【数据结构与算法】第七章-图【期末复习】

    图:有向图、网,无向图、网。 顶点 边:有向图图称作弧,分弧头弧尾。 依附:边依附点,边和点关联 邻接:点邻接点 度:点关联的边的数目 完全图: 无向: C n 2 C_n^2 C n 2 ​ 条边; 有向: 2 C n 2 2C_n^2 2 C n 2 ​ 条边 连通:若干结点互相可以通信,用手提起一个结点可以顺

    2024年02月01日
    浏览(59)
  • 期末复习(3)C语言数据结构_图论基础

    目录 导言:  定义: 一、边和度的概念: 1.1 无向图中的边和度: 1.2 有向图中的边和度: 1.3 度序列和握手定理: 二、弧和度的关系: 2.1 有向图中的弧和度: 2.2 度序列和握手定理在有向图中的应用: 2.3 邻接矩阵和邻接表在有向图中的表示: 2.4 强连通图: 三、完全图:

    2024年02月03日
    浏览(41)
  • 【Python数据结构与算法】—— 搜索算法 | 期末复习不挂科系列

    ​ 🌈个人主页:  Aileen_0v0 🔥系列专栏:  数据结构与算法 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 这篇博客主要探索的是计算机科学常见问题---搜索算法 “时间紧,任务重!” 话不多说,开始今天的学习之旅吧⛵~ 目录 搜索 定义 -in 顺序搜索  无序表的顺序搜索

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包