算法学习笔记(一)——算法概述
2016-06-25 01:25
288 查看
一、算法
算法就是任何良定义的计算过程,该过程将某个值或值的集合作为输入并产生某个值或值得集合作为输出;亦可将算法看作是用于求正确解的计算问题的工具。
一般情况下,问题陈述了期望的输入和输出之间的集合映射关系;而算法则描述一个特定的计算过程来实现问题的输入和期望的输出之间的映射关系。
二、NP问题
算法理论中,最深刻的问题之一是:从计算机的观点来看,要解决的问题的内在复杂性如何?它“容易”计算还是计算比较”困难“ ?为了评价算法的有效性,需要对算法的效率进行估计。问题的计算复杂性可以通过解决该问题所需的计算量的多少进行度量;但是如何区分一个问题是“难”还是“易”,通常将可以在多项式时间内解决的问题被看作是“易”解问题,而将需要指数函数时间解决的问题被看作是“难‘解决的问题。
P类问题:所有在多项式时间内被确定性计算模型(一般计算机,采用猜测的方式,总能猜出问题的正确解)求解的判定问题构成P类问题。
NP类问题: 所有在非确定性计算模型(有些问题的答案,不能依照公式进行推算,只能对可能的解进行验证;这种计算模型不能给出正确答案是哪些,但是它可以验证你所列出的答案是否正确;如质数的判断,并没有可用的公式可以推测下一个质数是什么,但是给出一个数,计算机就可以判断这个数是不是质数。)下的易验证性问题(答案可以在多项式时间内验证完成的问题)构成NP类问题。
NP完全问题(NP-C问题),千禧年大奖难题,是世界七大数学难题之一;由P类问题和NP类问题的定义可知,P是NP的子集,但是有人认为NP中包含了 非P类问题。如果任何一个NP问题都能通过一个多项式时间算法转换为某个NP问题,那么这个NP问题就称为NP完全问题——问题转化为:找到可以在多项式时间内将NP问题转化为NP完全问题的算法。目前为止:没有人能够证明存在这样的算法,也没有人能够证明不存在这样的算法。
算法作为一种技术:由于计算机存储空间的有限性和计算速度不是无限快的限制,以及我们对计算时间的要求,我们需要设计在时间和空间方面有效的算法来解决问题。
三、分析算法
1.概念:
分析算法:即估计算法所需要的资源;
分析使用的模型为:单处理器计算模型——随机访问机RAM;在RAM中,指令被一条接一条地执行,并没有并发执行。
输入规模:输入规模的度量依赖于所要研究的问题;如对排序和傅里叶变换,输入规模的度量自然是输入参数的项数;而对于大整数相乘,输入规模需要依据输入的整数表示时所需要的二进制的位数来度量。
最坏情况:对于输入规模为n的任何输入,算法的最长运行时间。、
O记号:渐进上界;算法分析中最常用的一种渐进记号;
Ω记号:渐进下界;
θ记号:同阶。
2.分析一般法则
A)for循环:一个for循环的运行时间至多是该for循环内部语句的运行时间乘以迭代次数;
B)for循环嵌套:从里之外分析嵌套循环;在一组嵌套循环内部的一条语句总得运行时间为该语句的运行时间乘以改组所有的for循环的大小的乘积。
C)顺序语句:将各个语句的运行时间求和即可;
D)if/else :if 中语句运行时间和else中语句运行时间较长的一个。
算法就是任何良定义的计算过程,该过程将某个值或值的集合作为输入并产生某个值或值得集合作为输出;亦可将算法看作是用于求正确解的计算问题的工具。
一般情况下,问题陈述了期望的输入和输出之间的集合映射关系;而算法则描述一个特定的计算过程来实现问题的输入和期望的输出之间的映射关系。
二、NP问题
算法理论中,最深刻的问题之一是:从计算机的观点来看,要解决的问题的内在复杂性如何?它“容易”计算还是计算比较”困难“ ?为了评价算法的有效性,需要对算法的效率进行估计。问题的计算复杂性可以通过解决该问题所需的计算量的多少进行度量;但是如何区分一个问题是“难”还是“易”,通常将可以在多项式时间内解决的问题被看作是“易”解问题,而将需要指数函数时间解决的问题被看作是“难‘解决的问题。
P类问题:所有在多项式时间内被确定性计算模型(一般计算机,采用猜测的方式,总能猜出问题的正确解)求解的判定问题构成P类问题。
NP类问题: 所有在非确定性计算模型(有些问题的答案,不能依照公式进行推算,只能对可能的解进行验证;这种计算模型不能给出正确答案是哪些,但是它可以验证你所列出的答案是否正确;如质数的判断,并没有可用的公式可以推测下一个质数是什么,但是给出一个数,计算机就可以判断这个数是不是质数。)下的易验证性问题(答案可以在多项式时间内验证完成的问题)构成NP类问题。
NP完全问题(NP-C问题),千禧年大奖难题,是世界七大数学难题之一;由P类问题和NP类问题的定义可知,P是NP的子集,但是有人认为NP中包含了 非P类问题。如果任何一个NP问题都能通过一个多项式时间算法转换为某个NP问题,那么这个NP问题就称为NP完全问题——问题转化为:找到可以在多项式时间内将NP问题转化为NP完全问题的算法。目前为止:没有人能够证明存在这样的算法,也没有人能够证明不存在这样的算法。
算法作为一种技术:由于计算机存储空间的有限性和计算速度不是无限快的限制,以及我们对计算时间的要求,我们需要设计在时间和空间方面有效的算法来解决问题。
三、分析算法
1.概念:
分析算法:即估计算法所需要的资源;
分析使用的模型为:单处理器计算模型——随机访问机RAM;在RAM中,指令被一条接一条地执行,并没有并发执行。
输入规模:输入规模的度量依赖于所要研究的问题;如对排序和傅里叶变换,输入规模的度量自然是输入参数的项数;而对于大整数相乘,输入规模需要依据输入的整数表示时所需要的二进制的位数来度量。
最坏情况:对于输入规模为n的任何输入,算法的最长运行时间。、
O记号:渐进上界;算法分析中最常用的一种渐进记号;
Ω记号:渐进下界;
θ记号:同阶。
2.分析一般法则
A)for循环:一个for循环的运行时间至多是该for循环内部语句的运行时间乘以迭代次数;
B)for循环嵌套:从里之外分析嵌套循环;在一组嵌套循环内部的一条语句总得运行时间为该语句的运行时间乘以改组所有的for循环的大小的乘积。
C)顺序语句:将各个语句的运行时间求和即可;
D)if/else :if 中语句运行时间和else中语句运行时间较长的一个。
相关文章推荐
- Oracle进程管理常用查询语句
- 理解devfs、sysfs、udev
- sublime个性化设置
- linux内核sysfs详解
- [Webpack 2] Import a non-ES6 module with Webpack
- hadoop安装后测试运行
- "AsynchTask和Handler"的区别与用法-Android异步消息处理机制之图文代码详解
- JAVA 微信JSSDK Config参数配置方法
- 使用Maven插件Cargo实现自动化部署
- TabLayout+ViewPager+Fragment实现带图标和文字的底部导航栏
- 缓存、缓存算法和缓存框架简介
- Bootstrap Modals(模态框)
- CJV_1——简单的Applet程序
- 使用存储过程进行数据分页
- Android的硬编码国际化
- Android下打印调试堆栈方法
- 禁用 BootStrap Modal 点击空白时自动关闭
- .net后台模拟浏览器get/post请求
- ref & out
- js节点属性