《数据科学家养成手册》第十一章------算法学1(穷举,分治,回溯,贪心,迭代)
1.对于计算机学科的人员,无论是怎么样子的工作都是需要了解算法的-----从而获得解决日常问题的基本的思路
2.计算机底层的数理计算逻辑仍然是“与”“或”“非”。通过与或非的操作可以实现加法和减法操作,其他的任何的操作都是在加法和减法的基础上进行的。(也就是加法和减法的操作是“基”数学中的概念)
3.而计算机在我们的实际的使用汇总往往觉得它特别的神奇(我之前就是这么认为的)但是计算机是非常的蠢笨的,它没有思考的能力,每一个指令都要人去告诉他,然后他就只有遵守的份。按照日常的生活来说“没有眼力见”
4.昨天了解了一下RISC(精简指令集)和CISC(复杂指令集)。也就是在计算机中有各种各样的被事先设计好的指令集,在使用的时候通过一些代码,然后对计算机下达指令,使得其执行指令集中的命令,从而完成操作。
11.1 离散的世界
1.电子计算机使用的寄存器,内存单元,磁介质存储单元,半导体截止存储单元都有一个共同分特性-----每个基本单元只有导通(1)和截止(0)这两个状态。计算机的存储就是通过各个晶体管的开闭也即是0,1代码实现数据的存储和运算的。
2.实数稠密性原理:任意两个不相等的实数之间都有无限个实数
3.离散数学中的笛卡尔积(Cartesian Product)---就是离散的面积、体积
假设有一个集合X,有n个元素{x1,x2,x3…….xn},另外有一个集合Y有m个元素{y1,y2,y3…….ym}
则X x Y=
11.2 成本的度量----
就是说通求解一个问题,如果这个解是一个离散的结果的话,就通常是计算机所擅长额。为而不同的算法怎么样得到这样的结果,以及结果是数目n的什么函数,就成为了评测算法优劣的标准-----------像算法的时间复杂度
11.3穷举法---暴力破解
并不是说穷举法就是不好,它也是人类正常思维解决办法的一种。对于一些硬件条件极其过硬的条件下,穷举法依靠计算机的运行速度,有的时候会有更快的结果。
使用穷举法的“N皇后问题”
代码
import sys
number = int(sys.argv[1])
def coflict(state, nextX):nextY = len(state)for i in range(nextY):if abs(state[i]-nextX) in (0, naxtY-i):return Truereturn Falsedef queens(num ,state=()):for pos in range(num):if not coflict(state ,pos):if len(state) == num-1:yield (pos, )else:for result in queens (num ,state+(pos, )):yield (pos, )+resultdef prettyprint(solution):def line(pos, length = len(solution)):return '. ' * (pos) + 'X' + '. ' *(length-pos-1)for pos in solution:print line(pos)if __name__ == "__main__":i = 0for solution in queens(8):i+=1print 'total test:' +str(pow(number,number)) +';total solution:' +str(i) + '\n'prettyprint(solution)
但是在编译的时候会出现“invialid syntax”代码汇标记了红色。意思是说语法错误,但是自己检查了半天没有看出所以然、
得出的结论
(1)时间复杂度的增加和实际运算时间的增加是不成正比的
具体的消耗时间需要实际的测量得到
(2)如果可能,计量测出这个极限的位置
也就是说在合理的时间成本范围内尽量测出最后不在下降的单次试探时间。
但是这样做的意义是啥??
11.4 分治法---化繁为简
就是人类解决为题的思维中的将大问题一步步的拆解成小问题,然后组合。
比如我们使用的查找最大值,就是将一个目前最大的记录下来,然后在与后续的比较,记录大的值,直到结束。
而在大型的Hadoop集群中,可以在几百甚至几千个节点中分别查找,每个节点查找到本节点的最大值,然后找出这些最大值。
但是分治法使用的问题必须是可分的,不能彼此之间存在强烈的依赖。也就是说分治法适用于高内聚,低耦合
11.5回溯法----能省则省
(1)它是一种选优搜索方法。又称试探法或“剪枝法”(走不通的可以不选择,先排除)
(2)回溯法的核心思想:按选优条件向前搜索,以达到目标。当搜索到某一步时,发现原先的原则不优或达不到目标,就退回一部重新选择。这种走不通就退回再走的方法称为回溯法
11.6 贪心法---局部最优
贪心法的思想就是:每一步向前试探的时候都找到当前额“最优解”,其他的解(分支)一概不看--在有限的视野寻找最优解作为行动纲领。经典算法中的地杰斯特拉算法就是其中的一个。
11.7迭代法----步步逼近
核心思想:用步步比肩的方式来接近理论上的精确值,只要发现当前的试探值已经收敛到一个满足场景悠悠球的误差精度,就可以判断迭代结束,并将这个试探值作为求解的目标值。
这种方法可以是很多无法直接求解的问题得到一个足够精确的近似解。
有限成本的次优,取代无限成本的最优
(1)牛顿法
资源:优化算法——牛顿法(Newton Method) - CSDN博客
https://blog.csdn.net/google19890102/article/details/41087931
但是牛顿法是建立在函数可求导的基础之上的。现实生活中的很多的求解问题是没有具体的模型的,更谈不上求导了
(2)梯度下降法
资源:
梯度下降(Gradient Descent)小结 - 刘建平Pinard - 博客园
https://www.cnblogs.com/pinard/p/5970503.html
梯度下降法就是根据导数(函数的增长,或下降的趋势)在依据自己是求解最大值,还是求解最小值,然后使得数值的获取向一方倾侧。
凸函数:在一维定义域是上满足 ; f(ax1+bx2)<= af(x1)+bf(x2)
在一个问题的求解过程中若是能讲一个问题转化为一个凸函数上求极值的问题,也是一种策略
(3)遗传算法
多峰问题
一文读懂遗传算法工作原理(附Python实现)_搜狐科技_搜狐网
http://www.sohu.com/a/162408469_465975
遗传算法是启发式算法的一种:因为在这种几乎没有确切方向的绣花场景中,需要计算机来进行一定的“智能选择”。
《数据科学家养成手册》第十一章------算法学1(穷举,分治,回溯,贪心,迭代)相关推荐
- 《数据科学家养成手册》第九章信息论
事先声明: 兴趣使然,阅读书籍的过程中看了一些资料,但并不能看太懂 信息论是围绕数据存储于传输量化等一系列问题所展开的一门专门研究信息的学科. 一句话总结作者:"在某一种设定情况下,最简洁可 ...
- 《数据科学家养成手册》--第十一章算法学2---(非监督,监督贝叶斯概率以及损失函数)
11.8 机器学习-----自动归纳 数据挖掘是随着商务智能发展起来的一种相对比较新的一种算法学科. 只知道自己想学习的是数据挖掘和大数据,但是真的说出个所以然自己真的办不到.现在说是一种算法学科,忽 ...
- 《数据科学家养成手册》第十一章----算法学(非线性回归)
对于非线性回归,通常的思路: (1)把它转化为线性回归模型进行拟合,其余不能转换的则通过经验,观察,多次尝试等法进行拟合,博能够从中找去拟合误差最小的情况. 常用的线性回归模型: (1)双曲线 双 ...
- 《数据科学家养成手册》--第四章---数据科学的使命
4.1.2 从信息到数据 1948年香农(好像吐槽输入法)发表的论文<通信的数学理论>(A Mathematical Theory of Communication)其中的话: if t ...
- 《数据科学家养成手册》第五章---矛盾的世界笔记
(1)世界中存在继续多相互矛盾的事物.矛盾通常是指事物相互影响和对立的关系.比如太阳的东升的同时没有办法西落. (2)数学中的虚数是与现实世界的实数相对的.虚数和实数的结合形成复数,通过复数构建的矢量 ...
- 《数据科学家养成手册》第十章--混沌论
<For the want of nail> For the want of a nail, the shoe was lost;for want of a shoe, the horse ...
- 《数据科学家养成手册》第八章---统计学
数理统计的鼻祖------阿道夫.凯特勒 1.凯特勒的"平均人"思想 凯特勒运用概率论的方法进一步的研究了社会道德领域的大量统计资料,发现"在我们对大多数人进行观察的时候 ...
- 《数据科学家养成手册》--“什么性质的人才能称得上科学家?” “科学的意思”
什么性质的人才称为科学家? 有的时候我们会就的科学家就像是明星一样,距离我们很遥远(自己觉的比明星遥远的多)但是,他们都是凡人啊.都和我们是一样的啊.为什么有想法不勇敢的去追求这个目标? 科学 &qu ...
- 《数据科学家养成手册》傅里叶变换与反傅里叶变换笔记
最早的电话使用的模拟信号原理图 (1)声音通过金属振动膜感应声波来影响磁场和电流,并将这种带有金属振动膜振动的"信息"的电流传递给另一端 (2)另一端则进行反向工作,把不断变化的电 ...
最新文章
- Linux之内存描述符mm_struct
- 接口api全局挂载_第 6 篇:分页接口
- Pawel wojs:《全面战争:三国》美术概览
- messagehub讲解_艾舜杰SAP Data Hub 数据服务总线技术深度讲解
- ISACA:网络安全人员短缺仍是老大难问题
- java基础面试题之:switch的参数类型
- 润乾报表使用问题总结
- 线程范围内的线程共享(多线程)
- 微信小程序之——自定义分享按钮(完整版)
- N76E003的学习之路(一)
- AcWing 1922. 懒惰的牛(前缀和 or 双指针)
- laravel 事件及监听
- mysql中的关键字大全详解_mysql关键字大全
- 东风风神汽车4S店管理系统
- 038--想和权证恋个爱
- 时间序列python复杂网络实例_机器学习案例二:缺失时间序列数据填补与ESN(回声状态网络)...
- “追梦五年”主题征文『51CTO五周年庆』
- 《魔兽争霸》故事背景
- android音乐播放器开发 SweetMusicPlayer 播放本地音乐
- [SLAM]激光SLAM初学者代码及论文推荐【转】