南大算法设计与分析课程复习笔记(1) L1 - Model of computation
一、计算模型
1.1 定义:
我们在思考和处理算法的时候是机器无关、实现语言无关的。所有的算法运行在一种“抽象的机器”之上,这就是计算模型。
1.2 种类
图灵机是最有名的计算模型,本课使用更简单更合适的RAM计算模型。
1.3 RAM(Random Access Machine)模型
RAM模型的基本构成如下:

RAM计算模型有如下特点:
- 一个简单操作花费一步:键值比较、加减、内存访问
- 没有操作可以被分解:循环、子程序
- 内存:访存是一个简单操作、无限制的内存
二、算法设计
2.1 算法问题规约
将算法问题严格的定义为精确限定输入\输出的“规约”形式:
- 输入:明确定义了算法接受的所有合法输入
- 输出:明确定义了对于每一个合法的输入值,相应的输出值应该是什么
例子1:
Euclid算法,辗转相除法的算法实现,计算m、n的最大公约数
输入:非负整数m,n
输出:gcd(m,n)
int Euclid(int m, int n) {
if (m <= n)
swap(m,n);
while (m%n != ) {
n = m%n;
m = n;
}
return n;
}
//这是测试用例
int main()
{
cout << Euclid(,) << endl;
system("pause");
return ;
}
例子2:
顺序搜索,在一个数组中搜寻一个具体的数
输入:关键字K,数组E[1...n]
输出:如果K在E中,返回K在E中的位置,如果不在则返回-1
int SequentialSearch(vector<int> e, int k) {
for (int i = ; i < e.size(); ++i)
if (k == e[i])
return i;
return -;
}
//这是测试用例
int main()
{
vector<int> e = {,,,,,};
cout << SequentialSearch(e,) << endl;
system("pause");
return ;
}
2.2 算法正确性的证明:数学归纳法
EUCLID算法正确性的证明:
当n=0时,对于任何m,有Euclid(m,0)=0
假设当n<=N时成立,考虑n=N+1的情况:
先有Euclid(m, N+1) = Euclid(N+1, m mod (N+1) ) ,而m mod(N+1)<=N恒成立,根据假设可知Euclid(N+1, m mod (N+1) )总能得出正确的答案,即n=N+1得证。
三、算法分析
3.1 算法的性能指标
- 时间复杂度
- 空间复杂度
在RAM中,时间复杂度使用RAM中执行简单操作的个数衡量,空间复杂度使用RAM中寄存器的个数来衡量。这样,对算法的性能分析变成了一个计数问题。由于RAM是抽象的,所以我们的衡量指标也是机器无关、语言无关的。
3.2 最坏情况复杂度
最坏复杂度的含义是最坏的输入对于的复杂度
例子:
在顺序搜索之中,待搜索的数k在数组e的位置越靠后,所需要搜寻的次数也就越多,当k在e的最后一个,此时为最坏情况。
3.3 平均情况复杂度
仅仅靠最坏情况时间复杂度不能充分代表算法性能。可以采用平均情况下的复杂度。
- 明确算法所有输入的分布情况
- 计算期望
例子:
对于顺序搜索的问题,给定数组为E[],长度为n,搜寻目标为K,假设所有输入情况等概率的出现。则成功的平均概率应该如下:

南大算法设计与分析课程复习笔记(1) L1 - Model of computation的更多相关文章
- 南大算法设计与分析课程复习笔记(4)L4 - QuickSort
一.快速排序 算法导论上关于快速排序有两种写法 第一种,从头到尾遍历,不断将小于基准元素的项移到前面.代码很简介,只需要维护一个交换位置,表示小于基准元素的末尾位置加一 我们看算法导论上的一个例子: ...
- 南大算法设计与分析课程复习笔记(3)L3 - Recursion
一.递归方程 按照分治的思想,可以将一个递归的复杂度写成递归方程 一.解递归方程--猜然后证明 该方法又称为代入法,步骤如下: 1.猜解的形式 2.数学归纳法证明正确 例子: 我们假设有如下递归式: ...
- 南大算法设计与分析课程复习笔记(2)L2 - Asymptotics
一.几种比较复杂度的符号 数据结构有描述,相关严格数学定义也不想说了,就这么过了吧. 二.最大子数组的几种解决方法 从最复杂的暴力解法过渡到最简单的动态规划 解析和代码见这里:http://www.c ...
- 南大算法设计与分析课程OJ答案代码(3)
问题 A: 动态中位数问题 时间限制: 1 Sec 内存限制: 8 MB提交: 866 解决: 102提交 状态 算法问答 题目描述 输入一组整数a1, a2, …, an ,每输入一个整数,输出 ...
- 南大算法设计与分析课程OJ答案代码(2)最大子序列和问题、所有的逆序对
问题 A: 最大子序列和问题 时间限制: 1 Sec 内存限制: 4 MB提交: 184 解决: 66提交 状态 算法问答 题目描述 给定一整数序列 a1, a2, …, an,求 a1~an 的 ...
- 南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题
问题 A: 割点与桥 时间限制: 1 Sec 内存限制: 5 MB提交: 475 解决: 34提交 状态 算法问答 题目描述 给出一个无向连通图,找到所有的割点和桥 输入 第一行:点的个数,如果点 ...
- 南大算法设计与分析课程OJ答案代码(4)--变位词、三数之和
问题 A: 变位词 时间限制: 2 Sec 内存限制: 10 MB提交: 322 解决: 59提交 状态 算法问答 题目描述 请大家在做oj题之前,仔细阅读关于抄袭的说明http://www.bi ...
- 南大算法设计与分析课程OJ答案代码(1)中位数附近2k+1个数、任意两数之和是否等于给定数
问题1 用来测试的,就不说了 问题2:中位数附近2k+1个数 给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及 ...
- 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第7章 动态规划
由于种种原因(看这一章间隔的时间太长,弄不清动态规划.分治.递归是什么关系),导致这章内容看了三遍才基本看懂动态规划是什么.动态规划适合解决可分阶段的组合优化问题,但它又不同于贪心算法,动态规划所解决 ...
随机推荐
- idea实现自动sql-generator的使用
1.实现步骤: 9.1 加载插件 <!-- mybatis逆向工程jar包 --> <dependency> <groupId>org.mybatis.gener ...
- Mac 下 python 环境问题
一.Mac下,可能存在的 python 环境: 1.Mac系统自带的python环境在(由于不同的 mac 系统,默认自带的 python 版本可能不一样): Python 2.7.10: /Syst ...
- .Net持续集成 —— Jenkins+Git+WebDeploy
由于某些历史问题,最近终于可以从java中解脱出来,继续耕耘.Net了,第一步就是把之前的java项目翻成.net.之前已经实现过一次,翻起来还是比较快的(当然基础架构/实体模型已经重新思考并改进), ...
- 吴恩达机器学习笔记22-正则化逻辑回归模型(Regularized Logistic Regression)
针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数
- Web发展简史(精编故事版,贤来给你讲故事)
Web发展简史 一. Web发展简史之隔壁老王的故事 有一个人叫隔壁老王,老王有一个爱好就是爱看电影.有一天,这个隔壁老王想看一部电影,可是电脑里面存储的电影太多了,他费了老大劲才从里面找到,觉得很不 ...
- 【MySQL】sql_mode引起的一个问题和总结
[背景] 之前项目中,项目组计划将现场的MySQL5.5升级到5.7,以提升主从同步性能.使用半同步复制,以及解决一些现场问题等.安排测试组进行验证,测试同事反馈实验室环境中发现有入库失败,我查看了e ...
- Oracle列转行函数版本不兼容解决方案
业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不 ...
- tensorflow笔记4:函数:tf.assign()、tf.assign_add()、tf.identity()、tf.control_dependencies()
函数原型: tf.assign(ref, value, validate_shape=None, use_locking=None, name=None) Defined in tensorflo ...
- Swift中的元组tuple的用法
用途 tuple用于传递复合类型的数据,介于基础类型和类之间,复杂的数据通过类(或结构)存储,稍简单的通过元组. 元组是使用非常便利的利器,有必要整理一篇博文. 定义 使用括号(), 括号内以逗号分割 ...
- Django 数据聚合函数 annotate
统计各个分类下的文章数 2 周,3 日前 字数 3818 阅读 546 评论 21 在我们的博客侧边栏有分类列表,显示博客已有的全部文章分类.现在想在分类名后显示该分类下有多少篇文章,该怎么做呢?最优 ...