数据结构与算法 —— 00 绪论

2017/05/31

数据结构与算法
表现形式:

1)逻辑结构(逻辑上是如何组织(即表示)数据的)

线性结构(‘均有顺序和链式两种实现’)
如:线性表、栈(特殊的线性表)、队列(特殊的线性表)
集合结构
树形结构
图形结构
2)物理结构(物理上是如何组织(即存储,是指在内存中存储)数据的)
顺序存储结构
链式存储结构

注意:数据的存储结构应正确的反映数据的逻辑结构。

算法分析:是从统计学的角度来分析

时间复杂度:该算法对于输入规模(即输入次数 n)需要执行的次数,以此可以来反映算法的效率
T[n] = O[f(n)]

常见的:

O(1) 常数阶(基本操作次数为常数,没有循环)
O(n) 线性阶(单循环)
O(n^2)  平方阶(循环嵌套形成)
O(n^k)  K方阶
O(x^n)  指数阶
O(logn) 对数阶
    例程:
    int i = 1; n = 100;
    while(i < n) {
        i = i * 2;
    }
    分析:该程序执行的次数设为 x
           则, 1*2*2*...*2 < n
           ——>> 2^x < n
           ——>> x < logn

O(nlogn) 线性对数阶

注意:常见时间复杂度耗时次序
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

对于,从n^3往后的算法,对n的大小很敏感,稍微大一点,算法的执行时间都将成为噩梦

空间复杂度: 表示算法在整个运行过程中占用的存储空间
S[n] = O[f(n)]

辅助单元是常数个时,称此算法为原地工作,S[n]= O(1)

注意:通常情况下,我们追求的是时间效率,因此,可以考虑用增大空间开销来换取时间上的效率。

—————-来自《大话数据结构》—————–

数据:是描述客观事物的符号,不仅包含数值类型的,还包含非数值类型的

数据元素(又称为’记录’):是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。

数据项:一个数据元素可以由若干个数据项组成。可以简单的理解为数据元素的属性。(用来刻画一个数据元素的)
数据对象:是性质相同的数据元素的集合,它是数据的子集

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
简言之:可以反映出数据元素之间的组织关系(从逻辑上来说)

抽象数据类型(Abstract Data Type, ADT):是指一个数学模型及定义在该模型上的一组操作

算法(Algorithm):算法是描述解决问题的方法。

1.算法的5大特性:
• 输入 (零个或多个)
• 输出 (一个或多个)
• 有穷性 (在可忍受的时间内执行完毕!)
• 确定性 (相同的输入,对应特定的输出)
• 可行性 (算法的每一步都是可行,有限次后定可完成)

2.算法设计的要求

正确性:要能正确反映问题的需求,能够得到文通的正确答案。
注意:算法的正确性通常由数学方法证明,大部分情况下不可能用程序来证明

可读性:便于阅读、理解、交流
健壮性:当输入不合法时,算法应能做出相应处理,而不是产生异常或出现模型奇妙的结果(反映到机器上可能就是程序崩溃)
高效性: 越快执行完毕,越好
低存储量(占用的机器的内存小)

算法效率(主要是指执行时间)的度量方法

    原文作者:ql2012jz
    原文地址: https://www.jianshu.com/p/ccbce70a2b27
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞