算法图解:第9-11章动态规划、KNN、下一步

算法图解:第9-11章动态规划、KNN、下一步

背包问题:简单算法需计算所有组合,时间复杂度(2^n)

动态规划解决背包问题,先解决小背包(子背包)问题。

创建网格,每个网格代表切割后小背包的容量;

横轴背包容量,纵轴待放入的物品,遍历每一个物品行的最大价值,该行可选的物品为该行的物品+该行之前的物品。

在背包容量约束下,最后一行可算出最优的组合。

 

旅行行程也可采用动态规划,通过网格,在最后一行得出时间约束下的最优解。

 

最长公共子串,有点像邻接矩阵,两个子串分别是横轴纵轴,字母相等为1,不等为0。案例中,对于相同字母,要在之前的相同字母的计数上加1。

 

//最长公共子串伪代码

if word_a[i] == word_b[j]:

    cell[i][j] = cell[i-1][j-1]

else:

    cell[i][j] = 0

 

//最长公共子串序列

if word_a[i] == word_b[j]:

    cell[i][j] = cell[i-1][j-1]

else:

    cell[i][j] = max(cell[i-1][j], cell[i][j-1])

 


算法图解:第十章k最近邻算法KNN

基于个头和颜色区分橙子和柚子,位于中间的如何区分?

找到中间水果的三个邻居,邻居中橙子比柚子多,则该水果为橙子。

 

推荐电影系统

找到与net最近的五个朋友,推荐他们喜欢的电影给net。

通过特征计算相似性。毕达哥斯公式,平方差和开平方。余弦相似度。

 

KNN进行分类和回归

基于天气、节假日、是否有活动预测售卖的面包数

 

机器学习简介:OCR光学字符识别,第一步查看大量的数字图像并提取特征,基于KNN理念。

 

朴素贝叶斯过滤器,创建垃圾邮件过滤器,计算是垃圾邮件的概率。

 


 

第11章 接下来如何做

1.二分查找树

二分查找在有序数组有效,插入和删除需要挪很多数组。二分查找树,查找/插入/删除的平均复杂度都是O(log n),最坏情况是O(n)。

 

二分查找树,左节点比根节点小,右节点比根节点大。

缺点:不能随机访问,如让找第五个元素,二叉树为平衡状态时,复杂度为O(log n),不平衡时,如左倾斜或右倾斜接近于O(n)。

处于平衡状态的二叉树:红黑树。

B树是一种特殊的二叉树,数据库用它来存储数据。

了解数据库或高级数据结构可研究:B树、红黑树、堆、伸展树

 

2.反向索引

搜索引擎,三个网页,散列表存储网页,键为单词,值为包含单词的指定文件。

一个散列表,将单词映射到包含它的页面,这种数据结构为反向索引。

 

3.傅立叶变换

属于绝妙、优雅又广泛应用的算法之一。

better explained网站解释:给它一杯冰沙,能告诉你包含哪些成分;给定一首歌曲,能分离出指定的频率。

将歌曲分为不同的频率,可强化低音隐藏高音或反之。适用于处理信号,压缩音乐。MP3,JPG压缩。将不重要的音符或像素删除。

 

4.并行算法

并行计算设计困难,速度的提升不是线性的。电脑比之前多装了一个内核,算法速度不能提升2倍。2个原因,一并行管理开销,1000个数组排序,每个内核分500,最后将数组合并,分配和合并有开销;二负载均衡,10个任务,每个内核5个,内核a 10s算完,内核b 1分钟算完。如何分配工作达到两个内核都一样忙。

 

5.mapreduce

流行的并行算法,分布式算法。用于上百个内核,计算机并行计算。

mp两个理念,映射函数map和归并函数reduce。

映射map函数,接收一个数组,对数组中的每一个元素执行同样的操作。如数组中的元素翻倍,下载url数组清单中的页面。

对于很多url,用几百台计算机,map能自动将工作分配给这些计算机。

 

归并函数reduce

map是将一个数组转为另一个数组。归并是将一个数组转为一个元素。如将数组中所有的元素相加。

 

6.布隆过滤器和hyoerloglog

万亿网页索引,判断网页以前是否已搜集,不用散列表,用布隆过滤器,可能出现错报,但不会出现漏报。

 

7.SHA算法

安全散列算法。用于创建散列表的散列函数根据字符串生成数组索引,SHA根据字符串生成另一个字符串,很长。散列值相同即可判断为同一个文件。

 

SHA存储密码,存储单向,不能反向推出原始字符串。

 

8.局部敏感的散列算法

SHA局部不敏感,只变更一个单词,生成的散列值截然不同。simhash对局部敏感,输入差别细微,输出的散列值也细微。判断查找内容的相似程度。

 

9.differ-hellman密匙交换

使用两个密匙,公匙私匙。使用公匙对发送的消息加密,用私匙解密。替代者rsa。

 

10.线性规划

所有的图算法都可用线性规划实现,使用simplex算法。先确定目标和约束条件。

 

 

 

你可能感兴趣的:(python)