zoukankan      html  css  js  c++  java
  • 数据结构(一):数据结构的基本概念和算法的时间和空间复杂度

    数据结构讨论的范畴

    计算机技术的两大支柱:1是数据结构,2是算法。在某种程度上讲,程序设计等同于数据结构+算法。

    程序设计是为计算机设计一组指令集,算法是解决问题的策略,数据结构是模型。

    问题包括:数值计算,解方程,

    非数值计算的问题:计算机对弈,棋盘,棋子如何表示(模型),规则策略(算法)

    我们讨论的是:实体的数学模型(非数值计算)及其上的操作如何在计算机上表示和实现。

    相关概念

    数据(Data):是信息的载体,能够被计算机识别、存储和加工处理的数值、字符等。
    数据元素(Data Element):是数据的基本单位。也称为元素、结点、顶点、记录。程序中作为一个整体来处理。
    数据项(Data Item):有独立含义的数据最小单位,也称域(Field)
    关键码(key):起标识作用的数据项
    数据对象(Data Object):是具有相同特性的数据元素的集合,是数据的一个子集。 

    数据结构涉及的内容

    1. 逻辑结构(Logical Structure):数据元素之间的逻辑关系。
    2. 存储结构(Storage Structure):数据元素及其关系在计算机存储器内的表示
    3. 施加在该数据结构上的操作

    数据的逻辑结构

    线性结构的逻辑特征:有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和直接后继。
    非线性结构的逻辑特征:一个结点可能有0,1,或者多个直接前趋和直接后继。如:树形、图状或者网状、纯集合。

    数据的存储结构

    顺序存储方法:把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。
    链接存储方法:该方法不要求逻辑上相邻的结点在物理位置上也相邻,结点间的逻辑关系由附加的指针字段表示。
    索引存储方法:在存储结点信息的同时,还建立附加的索引表。
    散列存储方法:根据结点的关键字直接计算出该结点的存储地址。

       线性表是一种逻辑结构,若采用顺序方法的存储表示,则为顺序表;若采用链接方法的存储表示,则为链表;若采用散列方法的存储表示,则为散列表;若对线性表上的插入、删除运算限制在表的一端进行,则为栈;若对插入限制在表的一端进行,而删除限制在表的另一端进行,则为队列。


    什么是算法?

    算法:通过数据结构解决某一特定问题的具体步骤的描述,是有限长的操作序列。
    算法特性:
    --有输入:具有零个或多个输入的外界量。
    --有输出:至少产生一个输出。
    --可行性:所有操作可以通过已实现的基本操作运算有限次实现
    --有穷性:操作步骤有限,且每个步骤能在有限时间完成
    --确定性:每条操作的含义都必须明确,无二义性。

    算法评价

    评价一个算法的好坏一般从4个方面进行:
    --正确性:是指算法是否正确;
    --运行时间:执行算法所耗费的时间;
    --占用空间:执行算法所耗费的存储空间;
    --简单性:是指算法的易读性等。

    算法性能分析与度量

    算法的性能标准: 正确性,可使用性,可读性,效率,健壮性
    算法的后期测试
    --在算法中的某些部位插装时间函数 time( )
    --测定算法完成某一功能所花费时间
    算法的事前估计
    --空间复杂度
    --时间复杂度
    空间复杂度度量:存储空间的固定部分--程序指令代码的空间,常数、简单变量等变量所占空间 和 可变部分--尺寸与实例特性有关的成分变量所占空间、引用变量所占空间、递归栈所用空间、通过new和delete命令动态使用空间
    时间复杂度度量:编译时间和运行时间(独立于机器的软硬件、假设每条语句的时间是单位时间、语句的频度)
    #define n 自然数
     
    MATRIXMLT(A,B,C)
     float A[n][n],B[n][n],C[n][n];
     {
    	int i,j,k; 
    (1)	for ( i=0;i<n;i++)				   n
    (2)	   for (j=0;j<n;j++)			              n^2
    	   {
    (3)	           C[i][j]=0;  			   n^2
    (4)		   for (k=0;k<n;k++)   	           n^3
    (5)			C[i][j]= C[i][j]+A[i][k]*B[k][j] ;   2n^3
    	   }
     
    }/* MATRIXMLT */
    

    该算法中所有语句的频度之和(即算法的时间耗费)为:

    T(n)=n+n2+n2+n3+2n3=3n3 +2n2+n

    时间复杂度相应的数量级()按递增排列
    常数阶O(1)
    对数阶O(log2n)
    线性阶O(n)
    线性对数阶O(nlog2n)
    平方阶O(n2)
    立方阶O(n3)
    指数阶O(2n)

    假定时间复杂性函数的时间单位为us














  • 相关阅读:
    grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
    php中htmlspecialchars,htmlentities用法
    php get_magic_quotes_gpc()函数用法介绍
    .animate()
    想用PHP做抽奖系统,思路..
    “评论盖楼”的设计思路
    JavaScript有关的10个怪癖和秘密
    Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
    项目描述 Project Description
    instance initializer
  • 原文地址:https://www.cnblogs.com/huty/p/8519311.html
Copyright © 2011-2022 走看看