您的位置:首页 > 理论基础 > 数据结构算法

(附思维导图)数据结构(邓俊辉)清华大学-第一章-绪论

2018-03-21 17:10 513 查看
©版权声明:本文为博主原创文章,未经博主允许不得转载。

首先,附上第一章的思维导图:



1 计算机与算法

1.1 计算

对象:规律、技巧

目标:高效、低耗

1.2 伸缩计算机

古埃及利用勾股定理,过某点做某条指定直线的垂线。



计算机是什么?

计算过程中所允许的工具。

计算=信息处理

借助某种工具,遵照一定规则,以明确而机械的程序进行

1.3 有穷性文本

Hailstone序列的定义



算法的有穷性

1.4 好算法

正确、健壮、可读、效率(运行时间,所需内存空间,所需资源)

2 计算模型

2.1 问题规模

DSA:DATA STRUCTURE & ARTHITECHTURE

对不同DSA进行描述

划分等价类



最坏性能

2.2 理想模型

图灵机模型









3 大O记号

考察成本的增长趋势



O(1)

常数,有一些特例,不一定不含循环(logn几乎是常数),不一定不含分支转向(分支转向不可得到的地方),不一定不能有递归调用。

O(logn)

对数,底数无所谓,常数次幂无所谓;对数多项式,ploy-log function,取高阶。

O(n^x)

多项式(polynomial function)

线性(linear function):所有O(n)类函数

效率通常认为可令人满意

O(2^n)

intractable,难解问题,无效算法。

O,上界,覆盖;omiga,下界。

3.1 2-subset

难解问题,化为有效算法的过程可能是很难的。

问题描述:

S包含n个正整数,sum S=2m

S是否有子集T,满足sum T=m?

实际例子:

美国大选,各自洲,是否可能选票相同的情况。

**定理 **2-Subset is NP-complete

就目前的计算模型而言,不存在可在多项式时间内回答此问题的算法。

4 递归

是一种减而治之的策略,递归每深入一层,带求解问题的规模就缩减为一个常数,直至最终蜕化为平凡的简单问题。

上面是书中的介绍,我认为递归是一种解决问题的方式,直接得到问题的通解不容易,但是得到问题的递推公式(即利用n-1规模的解来求n规模的问题)和平凡解很简单,于是让计算机来计算整个调用过程,这种算法策略,就叫做递归。

还有一个比较类似的算法策略叫做迭代,也是一个重复反馈的过程,但是与递归不同的地方在于,迭代是重复进行同一个运算,来逼近所需目标,而不是减小问题的规模来求解的思路,因此不需要用内存保存n-1、n-2……3、2、1规模的解。所以一般使用迭代来解决问题,可以节省空间成本,但是相应的,对程序员来说,会比递归的方法要难想到一点。

声明:本文部分图片引用自“清华大学-学堂在线-数据结构课程”、《数据结构(C语言版)邓俊辉-清华大学》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息