`
canofy
  • 浏览: 828841 次
  • 性别: Icon_minigender_1
  • 来自: 北京、四川
社区版块
存档分类
最新评论

数据结构一--------概念与算法

阅读更多
摘自:http://czk.8866.org/wiki/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E6%A6%82%E8%BF%B0

数据结构(包括逻辑结构,存储结构,运算)

算法(时间复杂度,空间复杂度)


1.计算机是一种处理数据的机器

输入=〉存储 =〉输出
        ||
       处理

2.算法+数据结构=程序

    * 数据结构:是指数据的逻辑结构和存储结构
    * 算法:是对数据运算的描述

解决非数值问题的关键不再是分析数学和计算方法,而是要设计出适当的数据结构来存储数据,并在此基础上设计出有效的算法,来对数据进行需要的处理。

非数值数据:这类数据的类型多样,比如:文字,图像,声音,视频等等。如何描述此类数据,并对此类数据进行有效的处理,成为了严峻的问题。解决此类问题的知识,被称为:数据结构。

3.数据结构中的基本概念
# 数据(Data):是信息的载体。它能够被计算机识别、存储和加工处理,是计算机程序加工的“原料”。数据的范畴包括:整数、实数、字符串、图像和声音等。
# 数据元素(Data Element)是数据的基本单位。数据元素也称元素、结点、顶点、记录。一个数据元素可以由若干个数据项(也可称为字段、域、属性)组成。

数据元素之间的逻辑关系,也称数据的逻辑结构(Logical Structure)

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


性结构:若结构是非空集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。线性表是一个典型的线性结构。栈、队列、字符串等都是线性结构。

非线性结构:一个结点可能有多个直接前趋和直接后继。树和图等数据结构都是非线性结构。


数据元素及其逻辑关系在计算机存储器内的表示,称为数据的存储结构(Storage Structure)

数据的基本存储结构

    * 顺序存储结构(Sequential Storage Structure):该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。通常借助程序语言的数组描述。该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。
    * 链式存储结构(Linked Storage Structure):该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。通常借助于程序语言的指针类型描述。
    * 索引存储结构:该方法通常在储存结点信息的同时,还建立附加的索引表。索引表由若干索引项组成。索引项的一般形式是:(关键字、地址)。关键字是能唯一标识一个结点的那些数据项,地址指示结点所在的存储位置。
    * 散列存储结构:根据结点的关键字直接计算出该结点的存储地址。


最常用的检索、插入、删除、更新、排序等运算实际上只是在抽象的数据上所施加的一系列抽象的操作。所谓抽象的操作,是指我们只知道这些操作是"做什么",而无须考虑"如何做"。只有确定了存储结构之后,才考虑如何具体实现这些运算。

数据结构就是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合。

数据的逻辑结构、数据的存储结构及数据的运算这三方面是一个整体。

存储结构是数据结构不可缺少的一个方面:同一逻辑结构的不同存储结构可冠以不同的数据结构名称来标识。【例】线性表是一种逻辑结构,若采用顺序方法的存储表示,可称其为顺序表;若采用链式存储方法,则可称其为链表;若采用散列存储方法,则可称为散列表。

数据的运算也是数据结构不可分割的一个方面:在给定了数据的逻辑结构和存储结构之后,按定义的运算集合及其运算的性质不同,也可能导致完全不同的数据结构。

4.算法和算法的度量

为了求解某问题,必须给出一系列的运算规则,这一系列的运算规则是有限的,表达了求解问题方法和步骤,这就是一个算法。 一个算法可以用自然语言描述,也可以用高级程序设计语言描述,也可以用伪代码描述。

五个重要特性

    * 有穷性:算法的执行必须在有限步内结束。
    * 确定性:算法的每一个步骤必须是确定的无二义性的。
    * 输入:算法可以有0个或多个输入。
    * 输出:算法一定有输出结果
    * 可行性:算法中的运算都必须是可以实现的。

评价算法的好坏
  主要考虑如下三点:
    * 执行算法所耗费的时间;
    * 执行算法所耗费的存储空间,其中主要考虑辅助存储空间;
    * 算法应易于理解,易于编码,易于调试等等。

算法的选择
   # 若该程序使用次数较少,则力求算法简明易懂;
   # 对于反复多次使用的程序,应尽可能选用快速的算法;
   # 若待解决的问题数据量极大,机器的存储空间较小,则相应算法主要考虑如何节省空间。

算法执行时间的分析

一个算法所耗费的时间=算法中每条语句的执行时间之和

每条语句的执行时间=语句的执行次数(频度)×语句执行一次所需时间

算法转换为程序后,每条语句执行一次所需的时间取决于机器的指令性能、速度以及编译所产生的代码质量等难以确定的因素。

若要独立于机器的软、硬件系统来分析算法的时间耗费,则设每条语句执行一次所需的时间均是单位时间,一个算法的时间耗费就是该算法中所有语句的频度之和。

问题规模和算法的时间复杂度

算法求解问题的输入量称为问题的规模,一般用一个整数表示。比如:矩阵乘积问题的规模是矩阵的阶数。

一个算法的时间复杂度T(n)是该算法的时间耗费,是该算法所求解问题规模n的函数。当问题的规模n趋向无穷大时,时间复杂度T(n)的数量级(阶)称为算法的渐进时间复杂度。


大O表示法

若T(n)和f(n)是定义在正整数集合上的两个函数,则T(n)=O(f(n))表示存在正的常数C和n0,使得当n≥n0时都满足0≤T(n)≤C·f(n)。

常见的时间复杂度按数量级递增排列依次为:常数0(1)、对数阶0(log2n)、线形阶0(n)、线形对数阶0(nlog2n)、平方阶0(n2)立方阶0(n3)、…、k次方阶0(nk)、指数阶0(2n)。显然,时间复杂度为指数阶0(2n)的算法效率极低,当n值稍大时就无法应用。

各种情况下的算法性能

    * 最坏情况下的时间复杂度称最坏时间复杂度,算法计算量达到最大值
    * 最好情况下的时间复杂度称最好时间复杂度,算法计算量最小
    * 算法在平均情况下的时间复杂度是指在所有可能的情况下的计算量经过加权平均后的平均值

算法的空间复杂度

算法所需空间包括:

    * 输入数据所占空间
    * 辅助变量所占空间
    * 程序所占空间

若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。

算法的时间复杂度和空间复杂度合称为算法的复杂度。



分享到:
评论

相关推荐

    数据结构和算法-思维导图.pdf

    从提供的文件【标题】:"数据结构和算法-思维导图.pdf" 可以提炼出以下知识点: 1. **时间复杂度和空间复杂度分析**: - 最好、最坏、平均和均摊时间复杂度的概念,例如O(1)代表常数时间复杂度,适合散列列表的...

    数据结构与算法-java

    以下是基于标题“数据结构与算法-java”及描述中提到的“数据结构与算法分析_Java语言描述高清版(第2版)1.pdf”所涵盖的一些关键知识点: 1. **数据结构**: - **数组**:最基础的数据结构,存储固定大小的同类型...

    数据结构,算法与应用 ---C++语言描述(代码与习题答案)

    数据结构、算法与应用是计算机科学中的核心领域,它们对于理解和解决复杂问题至关重要。C++是一种强大且灵活的编程语言,常被用于实现这些概念,因为它提供了底层控制和高效的执行能力。本资料集以C++语言为载体,...

    数据结构算法与应用--C++语言描述(代码与习题答案)

    在《数据结构算法与应用--C++语言描述》这本书中,作者深入浅出地介绍了各种基本和高级的数据结构及其对应的算法,并提供了详细的C++实现。以下是基于这个主题的详细知识点讲解: 1. **数组**:数组是最基础的数据...

    图解数据结构--使用Java

    全书内容浅显易懂,利用大量且丰富的图示与范例, 详解复杂的抽象理论,从最基本的数据结构概念开始 说明,再以Java工具加以诠释阵列结构、堆栈、链表 、队列、排序、查找等重要的概念,引领读者抓住重 点轻松进入...

    数据结构与算法-面向对象的C++设计模式

    知识点涵盖了从基础的数据结构(如数组、链表、栈、队列)到更高级的概念(如设计模式、算法的渐近分析),还包括了如何将这些理论应用到实际编程实践中。通过本文件提供的内容,读者可以深入了解数据结构与算法的...

    java数据结构与算法.pdf

    在编程领域,数据结构与算法是核心组成部分,它们直接影响到程序的效率和性能。Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点...

    C++数据结构与算法 (第4版)

    根据提供的文件信息,这里主要关注的是“C++数据结构与算法(第4版)”这一主题,虽然实际内容并未给出具体章节或知识点,但我们可以基于标题、描述以及部分已知内容来推测书中可能涵盖的关键知识点。 ### C++数据...

    数据结构与算法-----PPT版本

    这个“数据结构与算法-----PPT版本”很可能包含了徐旭松教授或专家精心制作的一系列教学材料,旨在帮助学习者深入理解这些核心概念。 数据结构是关于如何在计算机中组织和存储数据的方式,它直接影响到程序的效率和...

    数据结构与算法分析java版

    《数据结构与算法分析Java版》是一本由Robert Lafore撰写的书籍,该书详细介绍了如何利用Java编程语言来实现和操作各种数据结构和算法。全书共分为六个部分,分别涵盖了数据结构的基本概念、数组、简单的排序算法、...

    数据结构与算法分析-------

    《数据结构与算法分析》是一本专注于使用Java语言介绍数据结构和算法的经典教材。作者Robert Lafore以轻松幽默的方式介绍了如何利用数据结构解决实际问题,这使得本书不仅适用于专业程序员,也适合编程初学者。 ###...

    算法-数据结构和算法-1-算法的引入和算法时间复杂度.rar

    这个压缩包文件"算法-数据结构和算法-1-算法的引入和算法时间复杂度.rar"主要探讨了这两个概念的入门知识,特别是关注算法的时间复杂度分析。 首先,我们需要理解什么是算法。算法是一系列明确的步骤或指令,用于...

    算法数据结构体系学习班课程-视频教程网盘链接提取码下载 .txt

    本课程《算法数据结构体系学习班》专为初学者设计,旨在帮助学员系统地掌握算法与数据结构的基础知识,同时培养学员运用所学解决实际问题的能力。通过对经典算法和常用数据结构的学习,学员不仅能够理解其原理,还能...

    中南大学数据结构与算法-课后习题参考答案(全部章节).pdf

    ### 数据结构与算法知识点解析 #### 一、基础概念解析 **1.1 简述下列概念** - **数据**: 数据是指能够被计算机识别、存储和加工处理的信息载体。它可以是数字、文本、图像、音频或视频等各种形式的信息。 - **...

    数据结构与算法分析c++语言描述

    ### 数据结构与算法分析——C++语言描述 #### 标题解析 - **标题内容**:“数据结构与算法分析c++语言描述” - **解析**:该标题表明本书主要介绍了数据结构与算法的相关知识,并使用C++编程语言来进行具体实现与...

    数据结构与算法经典问题解析-Java语言描述

    这本书“数据结构与算法经典问题解析-Java语言描述”旨在帮助读者深入理解这些概念,并通过具体的Java代码实现来提升解决实际问题的能力。 1. **数据结构**: - **数组**:是最基本的数据结构,它是一系列相同类型...

    算法大全-面试题-链表-栈-二叉树-数据结构

    在编程领域,算法和数据结构是核心技术之一,对于学习编程和寻找工作的学生来说,掌握这些概念至关重要。"算法大全-面试题-链表-栈-二叉树-数据结构"这个压缩包文件提供了丰富的知识资源,旨在帮助学习者深入理解和...

Global site tag (gtag.js) - Google Analytics