算法设计和复杂性理论学习笔记_1(基本概念)
来源:互联网 发布:如何在淘宝做分销商 编辑:程序博客网 时间:2024/05/18 02:54
引言:
理论上的可计算与现实上的可计算:
理论上的可计算——可计算性理论
现实上的可计算——计算复杂性理论
几个例子:
关于例2,如果采用蛮力算法—穷举法,则可能的非负整数解的个数为
根据Stirling公式
可得
(此处还有不明白之处,需要弄懂)
对于排序算法的评价:
已有的排序算法:考察元素比较次数
插入排序、冒泡排序:最坏和平均状况下都为O(n^2)
快速排序:最坏状况为O(n^2),平均状况下为O(nlogn)
堆排序、二分归并排序:最坏和平均状况下都为 最坏和平均状况下都为O(nlogn)
问题
哪个排序算法效率最高?
是否可以找到更好的算法?排序问题的计算难度如何估计?
货郎问题:
如何在带权完全图G中寻找一条Hamilton回路?
该问题至今没有找到一种算法相比于蛮力算法在计算复杂度有着本质的改进。
好的算法,指的是计算效率高,即计算复杂度低;对储存空间的占用最少,也可以认为对存储空间的利用率高。
可计算性理论:
研究目标:确实什么问题是可计算的,即存在求解算法
合理的计算模型:
已有的:递归函数、Turing Machine、lambda演算?、post系统?
条件:计算每个函数只需要有限条指令;
每条指令可以由模型中有限个计算步骤完成;
指令的执行过程是确定的;
算法至少具有指数时间:理论上可计算: ——难解的
多项式时间的算法:现实上可计算——多项式时间可解的
对数多项式时间的算法 :高度并行可计算——高度并行可解的
问题的定义:
问题:指的是需要回答的一般性提问,通常含有若干个参数
问题所包含的的内容:指出了参数所满足的条件,以及解的范围
问题的实例:对问题的参数的一组赋值
一个问题是由它的全部实例所构成
算法的定义:
算法非形式定义:有限条指令的序列,确立了解决某个问题的运算或者操作,输入个数大雨或等于0,输出个数大于0
算法的形式定义:对于有效输入在有限时间内停机的Turing Machine
算法A解决问题P:对于问题P的任何实例输入,都能在有限时间内停机,并输出正确的结果
伪代码——算法的描述
保持程序的主要结构;
赋值语句:<-
分支语句:if...then...[else]
循环语句:while,for.repeat...until
转向语句:goto
注释语句://...
允许使用自然语言;
常忽略异常处理、数据结构和变量描述。
伪代码实例:
算法的时间复杂度:
最坏情况下的时间复杂度:对于输入规模为n的实例,算法输出所需最长的时间W(n);
平均情况下的时间复杂度:对于输入规模为n的实例,算法输出所需的平均时间A(n);
S:实例集 P:I的概率 T:I的时间
Reference:北京大学信息科学技术学院 《算法分析与复杂度理论》 课程课件
- 算法设计和复杂性理论学习笔记_1(基本概念)
- 算法设计和复杂性理论学习笔记_3(分治策略算法)
- 算法设计和复杂性理论学习笔记_2(数学基础)
- 最优化理论学习笔记_1(精确线性搜索)
- 算法设计和数据结构学习_1(常见排序算法思想)
- 算法设计与复杂性分析(1)
- 算法设计和数据结构学习_1(一道堆排序作业题)
- 【笔记】抽象数据型及算法复杂性
- 算法复杂性
- 算法复杂性
- 算法复杂性和如何计算时间复杂度
- 算法_10 : 图算法_1: 图的基本概念
- 设计模式学习笔记(二):模式、设计与复杂性
- 算法设计与复杂性原理 第一次上机 玛雅历
- 算法设计与复杂性理论 第一次上机 仙岛求药
- 算法设计与复杂性分析 第二次上机 Dynamic Median
- 《领域驱动设计-软件核心复杂性应对之道》笔记
- 数据结构学习笔记——算法复杂性分析
- 关于局部更新listview的问题(只更新某个item)
- Tomcat组成及工作原理
- Setjmp的支持多线程问题
- sqlite
- 高校数字化校园建设调研与分析
- 算法设计和复杂性理论学习笔记_1(基本概念)
- SQL server top实现Mysql limit
- 国内从事CV相关的企业-转自李晨工程师的博客
- JavaScript实现url地址自动检测并添加URL链接
- xp,win7,win2003,win2008常用命令集
- 使用gSOAP开发实例(3) iconv解决中文乱码问题 .
- 历代iPhone的硬件资源对比图
- 黑马程序员_交通灯管理系统
- [ARM]ARM平台处理器简介-ARMv7