zoukankan      html  css  js  c++  java
  • 数据结构与算法基础

    一、数据结构概述

    数据结构的主要任务是通过分析数据对象的结构特征,包括逻辑结构及数据对象之间的关系,然后把逻辑结构表示成计算机课实现的物理结构,从而便于计算机处理。

    概念术语:

    1)数据(Data):是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输出给计算机处理的符号集合。数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型;
      2)数据元素(Data Element):是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录;
      3)数据项(Data Item):一个数据元素可以由若干个数据项组成;数据项是数据不可分割的最小单位;
      4)数据对象(Data Object):是性质相同的数据元素的集合,是数据的子集;
      5)数据结构(Data Structure):是数据的组织形式,是数据元素相互之间存在的一种或多种特定的数据元素的集合;
      6)数据类型(Data Type):是指一组性质相同的值的集合及定义在此集合上的一些操作的总称;

    二、数据的逻辑结构与物理结构:

    逻辑结构(Logical Structure)是指在数据对象中数据元素之间的相互关系。数据元素之间存在不同的逻辑关系构成了以下四种结构类型:
      1)集合类型:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他的关系。各个数据元素是“平等的”,它们的共同属性是“同属于一个集合”,数据结构中的集合就类似于数学中的集合;
      2)线性结构:线性结构中的数据元素之间是一对一的关系,并且是一种先后的次序;
      3)树形结构:树形结构中的数据元素之间存在一种一对多的层次关系;
      4)图形结构:图形结构的数据元素关系是多对多的关系;
     
      存储结构(Storage Structure)也称为物理结构(Physical Structure),指的是数据的逻辑结构在计算机中的存储形式,数据的存储结构一般可以反映数据元素之间的逻辑关系,分为顺序存储结构和链式存储结构:
      1)顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的;
      2)链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置;

    三、算法

    算法(Algorithm)是解决特定问题求解步骤的描述,在计算机中表现为有限的操作序列,在数据类型建立起来之后,就要对这些数据类型进行操作,建立起运算的集合即为程序。运算的建立、方法好坏直接决定了计算机程序原型效率的高低;
      1)数据结构与算法的关系:两者既有联系又有区别,联系是:程序=算法+数据结构。数据结构是算法实现的基础,算法总是要依赖某种数据结构来实现的,算法的操作对象时数据结构,区别是数据结构关注的是数据的逻辑结构、存储结构的一些基本操作,而算法更多的是关注如何在数据结构的基本上解决实际问题,算法是编程思想,数据结构是这些思想的基础;
      2)算法的特性:
        有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在
            可接受的时间内完成;
        确定性:算法的每一步骤都具有确定的含义,不会出现二义性;
        可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成;
        输入:是指算法具有零个或多个输入;
        输出:是指算法至少有一个或多个输出;

    算法效率的度量方法:
      1)算法采用的策略、方案;
      2)编译产生的代码质量;
      3)问题的输入规模;
      4)机器执行指令的速度;

    四、时间复杂度

    在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级;算法的时间复杂度,也就是算法的时间度量,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数,这样用大写O来体现算法时间复杂度的记法,我们称之为大O记法。
      在这里插入图片描述

    非正式术语
    O(1) 常数阶
    O(n) 线性阶
    O(n^2) 平方阶
    O(logn) 对数阶
    O(nlogn) nlogn阶
    O(n^3) 立方阶
    O(2^n) 指数阶

    常用的时间复杂度所耗费的时间从小到大依次是:
      O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
      在这里插入图片描述

    五、空间复杂度

    算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数;
      一般情况下,一个程序在机器上执行时,除了需要存储的程序本身指令、常数、变量和输入数据外,还需要存储对数据操作的存储单元。若输入数据所占空间只取决于问题本身,和算法无关,这样只需要分析该算法在实现时所需的辅助单元即可。若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法为原地工作,空间复杂度为O(1)。

    ————————————————
    版权声明:本文为CSDN博主「Micky_Yang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/Micky_Yang/article/details/104156331

  • 相关阅读:
    使用微软TFS代码管理工具和在金山快盘上搭建SVN的使用方法
    微软的Windows8安装体验
    软件注册码随笔
    软件注册码(算法一DES)
    PHP连接SAE平台MYSQL
    一点一滴《C++处理数据》
    BouncyCastle.Crypto的RSA算法调用源码
    一点一滴《C++学习》
    软件注册码(算法二Rijndael)
    Web 应用程序的程序常见安全防范
  • 原文地址:https://www.cnblogs.com/coding365/p/12593057.html
Copyright © 2011-2022 走看看