本文共 1567 字,大约阅读时间需要 5 分钟。
声明:教材为《数据结构(C语言第二版)》,严蔚敏,李冬梅,吴伟民编著
前言:博客的写作出于个人意愿。本来是想来总结每周课程的,但为了方便和大家一起学习,我尽量偏向半总结半学习,用更通俗的语言来说明。有不懂的、建议、或是不对的地方请指出哟数据结构,分为逻辑结构(抽象)与存储结构(具体)
或称物理结构
ADT的一种表示是的类的声明,ADT的一种实现是类的实现。
用类对ADT进行理解,对象为类名,关系为类的成员变量,操作为类的成员函数 在使用ADT时采用类C语言,不考虑语法。算法的五个特性:
算法优劣的评价:
高效性作为最重要的标准,分为时间复杂度和空间复杂度,于是我们就对其进行讨论
首先来了解一下问题规模,用n表示,它在两个复杂度中都将用到。问题规模:算法求解问题输入量的多少,是问题大小的本质。
看起来挺玄乎,不过大多数情况下指的是输入数据的大小或多少,如排序问题中的待排数量、矩阵运算中的矩阵阶数等等。n越大,程序的运行时间和所占空间越大。
对时间复杂度最好理解的一种方法是用所有语句执行的总时间来评价,即基于运算次数表示时间复杂度。但遗憾的是,由于计算机高强度的运算能力,以及不同计算机软硬件的差异,导致一次语句的执行时间难以度量。于是我们设一条语句的执行时间均为单位时间,用所有语句的频度,即所有语句的执行次数来判断。
显然,用这种方法能很好比较出不同算法在不同n的情况下的时间复杂度,但缺点显而易见,需要我们一条一条语句去数过来,这谁顶得住啊,程序一旦复杂起来,有很多循环,我看都不想看。而且一旦数错一句,整个时间复杂度就会出错。 于是,机智的人们相出了一种简单的替代方法,即渐进时间复杂度,用T(n)=O(f(n))表示。 f(n)表示运算次数的数量级,我们用最高次幂的那项表示(去掉前面的系数)。因为当n增长时,其最高次项决定了其增长趋势嘛 比如运算次数为f(n)=100n+10,其渐进时间复杂度为O(n);运算次数为f(n)=100,其渐进时间复杂度为O(1) 显然渐进时间复杂度更好表示,也更好从一个算法中看出来,所以将渐进时间复杂度简称时间复杂度,并普遍以此表示算法的时间复杂度。一个程序,从被编程出来到被运行,它肯定需要占用空间,我们将其分为三类
由于程序本身占用空间与软硬件有关,输入数据占用空间随具体问题而改变、与算法无关,所以我们用额外所需的空间度量空间复杂度
基本上就是算法所额外定义的变量啥的啦,用S(n)=O(f(n))表示转载地址:http://cvph.baihongyu.com/