常用编程思想与算法(6)

  NP完全问题的简单定义是,以难解著称的问题,如旅行商问题和集合覆盖问题。NP算法本身不难,但是界定哪些问题应该使用NP算法求解更优却是个难点。要判断问题是不是NP完全问题很难,易于解决的问题和NP完全问题的差别通常很小。

  如何判断问题是不是NP完全问题:

   元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢。

   涉及“所有组合”的问题通常是NP完全问题。

   不能将问题分成小问题,必须考虑各种可能的情况。这可能是NP完全问题。

   如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题。

   如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP完全问题。

   如果问题可转换为集合覆盖问题或旅行商问题,那它肯定是NP完全问题。

动态规划   背包问题

  一个小偷,背包容纳量为4,商店有三件商品可以偷,音响3000块重量4,电脑2000块重量3,吉他1500块重量1。

  尝试一次次的试,时间为O(2**n),这种方法肯定可以使用NP算法啦,但是不是最优解。

  动态规划先解决子问题,再逐步解决大问题。

  每个动态规划算法都从一个网格开始,背包问题的网格如下。

常用编程思想与算法

  第一行是吉他行,你只能选择拿不拿吉他,只能拿其他肯定会拿偷啊,这样利益最大化。

常用编程思想与算法

  第二行是音箱行,你可以选择吉他或音箱。

常用编程思想与算法

  第三行电脑行,三种都可以选择。

常用编程思想与算法

  这里行排列的顺序变化了对结果没什么影响。并且最优解可能背包还没装满。

  但仅当 每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用。

K最近邻算法

  抽取事物特征并在坐标轴上给出横纵坐标打分,这等于抽象出空间中的点,然后使用毕达哥拉斯公式计算与其他点的距离来判断与哪些点更为相似。

常用编程思想与算法

常用编程思想与算法

  Priyanka和Morpheus的距离为24,所以可得出Priyanka的喜好更接近于Justin而不是Morpheus的结论。这样就可以依据Justin的喜好给Priyanka推荐电影啦。

  回归

  假设你不仅要向Priyanka推荐电影,还要预测她将给这部电影打多少分。为此,先找出与她最近的多个人,你求这些人打的分的平均值,结果为4.2。这就是回归(regression)。

  你将使用KNN来做两项 基本工作——分类和回归:

   分类就是编组;

   回归就是预测结果(如一个数字)。

  比起距离计算,我们平时工作中使用余弦相似度来打分更为准确常用。

  KNN算法广泛应用于机器学习领域。OCR指的是光学字符识别(optical character recognition),这意味着你可拍摄印刷页面的照片,计算机将自动识别出其中的文字。

  使用KNN。

  (1) 浏览大量的数字图像,将这些数字的特征提取出来。

  (2) 遇到新图像时,你提取该图像的特征,再找出它最近的邻居都是谁!

  OCR算法提取线段、点和曲线等特征。遇到新字符时,可从中提取同样的特征。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2d65c1b989daf15163eb8d959b598d3f.html