算法图解读后感(理解概念)贪婪算法动态规划K最近邻算法 其他有用的算法
Posted halulu.me
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法图解读后感(理解概念)贪婪算法动态规划K最近邻算法 其他有用的算法相关的知识,希望对你有一定的参考价值。
第八节、贪婪算法与NP完全问题
贪婪算法很简单:每步都采取最优的做法。用专业术语说,就是你每步都选择局部最优解,最终得到的就是全局最优解。
贪婪并非在任何情况下都适用,比如背包问题
贪婪算法易于实现、运行速度快,是不错的近似算法。
集合覆盖问题只能使用贪婪算法。
步骤一、选出覆盖最多未覆盖元素的子集,即便这个子集覆盖了一些已经覆盖的元素也没有关系
步骤二、重复第一步,直到覆盖了所有的元素
大O表示法,O(n^2)
幂集(power set) 集合A(有n个数)的子集的数量是 2^n ,也就是幂集。
NP完全问题
NP完全问题的简单定义是,以难解著称的问题,如旅行商问题和集合覆盖问题。很多非常聪明的人都认为,根本不可能编写出可快速解决这些问题的算法。(使用近似算法即可)
比如、集合覆盖问题和旅行商问题
NP完全问题旅行商问题和最短路径狄克斯特拉算法之间的区别
最短路径狄克斯特拉算法的起点和终点是确定的,旅行商问题的起点和终点是不确定的。
第九节、动态规划
背包问题
假设你在杂货店行窃,可偷成袋的扁豆和大米,但如果整袋装不下,可打开包装,再将背包倒满。在这种情况下,不再是要么偷要么不偷,而是可偷商品的一部分。如何使用动态规划来处理这种情形呢?
答案是没法处理。使用动态规划时,要么考虑拿走整件商品,要么考虑不拿,而没法判断该不该拿走商品的一部分。
但使用贪婪算法可轻松地处理这种情况!首先,尽可能多地拿价值最高的商品;如果拿光了,再尽可能多地拿价值次高的商品,以此类推。
注意:
1、使用动态规划,要么考虑拿走整件商品,要么不拿,而没办法判断该不该拿走商品的一部分。
2、动态规划功能强大,它能够解决子问题并使用这些答案来解决大问题。但仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用。
3、最有解可能导致背包每装满。
最长公共子串
例子、比较fish和hish的最长公共子串
需要注意的一点是,这个问题的最终答案并不在最后一个单元格中!对于前面的背包问题,
最终答案总是在最后的单元格中。但对于最长公共子串问题,答案为网格中最大的数字——它可 能并不位于最后的单元格中。
最长公共子序列
最长公共子串和最长公共子序列的区别
最长公共子串比较的是连续子串数量
最长公共子序列比较的都有的序列中包含的元素的数量
继承上次计算的最长公共子串
第十节、K最近邻算法
K最近邻(k-nearest neighbours,KNN)算法
分类算法
建立坐标,使用毕达哥拉斯公式计算方位距离
回归
机器学习简介
机器学习旨在让计算机更聪明。
OCR
OCR指的是光学字符识别(optical character
recognition),这意味着你可拍摄印刷页面的照片,计算机将自动识别出其中的文字。
创建垃圾邮件过滤器
第十一节、其他有用的算法
1、反向索引
2、傅里叶变换
3、并行算法
4、分布式算法
MapReduce是一种流行的分布式算法,你可通过流行的开源工具Apache Hadoop来使用它
映射函数
归并函数
5、布隆过滤器和 HyperLogLog
布隆过滤器是一种概率型数据结构,它提供的答案有可能不对,
但很可能是正确的。为判断网页以前是否已搜集,可不使用散列表,而使用布隆过滤器。使用散列表时,答案绝对可靠,而使用布隆过滤器时,答案却是很可能是正确的。
但是使用散列表的时候,如果数据量特别大,散列表需要占用大量的存储空间
布隆过滤器
1、可能出现错报的情况,即Google可能指出“这个网站已搜集”,但实际上并没有搜集。
2、不可能出现漏报的情况,即如果布隆过滤器说“这个网站未搜集”,就肯定未搜集。
HyperLogLog
HyperLogLog是一种类似于布隆过滤器的算法。
面临海量数据且只要求答案八九不离十时,可考虑使用概率型算法!
6、SHA算法
安全散列算法(secure hash algorithm,SHA)给定一个字符串,SHA返回其散列值。
用于创建散列表的散列函数根据字符串生成数组索引,而SHA根据字符串生成另一个字符串。
SHA实际上是一系列算法:SHA-0、SHA-1、SHA-2和SHA-3。,SHA-0和SHA-1已被发现存在一些缺陷。如果你要使用SHA算法来计算密码的散列值,请使用SHA-2或SHA-3。当前,最安全的密码散列函数是bcrypt,但没有任何东西是万无一失的。
7、局部敏感的散列算法Simhash
SHA还有一个重要特征,那就是局部不敏感的。假设你有一个字符串,并计算了其散列值。如果你修改其中的一个字符,再计算其散列值,结果将截然不同!
如果你对字符串做细微的修改,Simhash生成的散列值也只存在细微的差别。这让你能够通过比较散列值来判断两个字符串的相似程度,这很有用!
8、Diffie-Hellman 密钥交换
Diffie-Hellman使用两个密钥:公钥和私钥。顾名思义,公钥就是公开的,可将其发布到网站上,通过电子邮件发送给朋友,或使用其他任何方式来发布。你不必将它藏着掖着。有人要向你发送消息时,他使用公钥对其进行加密。加密后的消息只有使用私钥才能解密。只有你知道私钥能解密消息!
Diffie-Hellman算法及其替代者RSA依然被广泛使用。
以上是关于算法图解读后感(理解概念)贪婪算法动态规划K最近邻算法 其他有用的算法的主要内容,如果未能解决你的问题,请参考以下文章