《算法之道》精华 难解问题部分

《算法之道》精华 难解问题部分

  • 本书作者绉恒明,作者另有一本书《数据结构之弦》,以及《操作系统之哲学原理》都是很好的书
  • 这本书可以算得上是深入浅出,文笔很好,作者添加了很多自己的思考
  • 本文包括难解问题部分

第十三章 易解与难解

  • 易解指的是多项式问题,难解指的是指数级问题
  • 决策问题
    • 需要输出答案是/否
    • 若回答为是,通常需要一个证人来证明。对一个潜在证人,证明之后即为真证人
    • 优化问题和决策问题之间可以相互转化
  • P类问题
    • 确定性多项式时间可解
    • 对于一个决策问题,输入的大小为n,能在n的多项式时间内解决,正确输出是/否
  • NP类问题
    • 非确定性多项式时间可解
    • 对于一个决策问题,大小为n的潜在证人,能在n的多项式时间内解决,正确输出此证人是否为真
    • P类问题指的是能否多项式时间给出答案,NP类问题指的是能否在多项式时间内判断一个潜在答案是否正确
  • (确定性)图灵机
    • 图灵机为一个状态机,根据当前状态、下一个输入字符确定输出、磁头移动方向、下一个状态
    • 任一个问题、算法都能表述为一个字符串,因此图灵机可以解决很多问题
  • 非确定性图灵机
    • 与确定性图灵机相比,给定状态与输入可以有多种选择
    • 能够同时进入所有状态路径,且能做出最好的选择以达到接受状态
    • 非确定性算法:在非确定性图灵机上运行的算法
    • NP问题的另一个定义:使用非确定性算法,在多项式时间内解决
  • P与NP的关系
    • 所有P类问题都是NP的
    • 所有NP不一定是P,直觉如此,但无法证明
    • 部分NP为P,目前已经找到多项式解法,目前没有找到多项式解法的NP问题称为NP-hard

第十四章 NP完全问题

  • 如果NP里每一个问题都可以多项式时间规约到S,则S称为NP难(严谨的定义)。S不比NP里面任一问题容易
  • 如果问题S既是NP难,又是NP里的问题,则称为NP完全问题
  • NP完全的属性
    • 非确定性算法多项式时间可解
    • 完全:解决一个就解决了所有NP完全问题
  • 若找到一个NP完全问题的确定性解法,就证明了NP=P
  • 若找到一个NP难优化问题的多项式时间解,就证明了NP=P
  • NP完全的意义:若能证明一个问题为NP完全问题,则无需再寻找精确解,找到启发性的近似解即可
  • 常见NP完全问题
    • 3-SAT
    • 整数分割
    • 顶点覆盖
    • 汉密尔顿回路 可规约至旅行商问题
    • 完全子图
    • 图的着色
    • 旅行商
    • 整数规划属于NP难问题,但不是NP问题,因此不是NP完全问题

第十五章 无解与近似

  • NP完全只是NP里最难的问题,目前没有找到多项式解法
  • 难解问题不存在多项式解法
  • 不可决定问题:是无解的,即使是指数级也无济于事。但又潜在证人
  • 对于NP完全和难解问题,可以尝试找出次优解
    • 智能穷举

      • 能找的最优解
      • 两种剪枝策略:回溯法、分支限界
      • 如八皇后问题
    • 近似算法
      • 能找到近似的解
      • 如聚类问题、启发式搜索、模拟退火、遗传算法
    • 本地搜索
      • 一种贪婪策略
      • 不断向更优的可行解移动,可能仅能找到局部最优解

  

  

转载请注明作者:Focustc,博客地址为http://blog.csdn.net/caozhk,原文链接为点击打开

  

  

《算法之道》精华 难解问题部分

时间: 2024-08-24 04:26:36

《算法之道》精华 难解问题部分的相关文章

《算法之道》精华 算法设计部分

<算法之道>精华 算法设计部分 本书作者邹恒明,作者另有一本书<数据结构之弦>,以及<操作系统之哲学原理>都是非常好的书 这本书能够算得上是深入浅出.文笔非常好,作者加入了非常多自己的思考 本文仅包含算法设计部分,算法分析略去,并没有严格依照章节顺序来记录 附录 算法随想 有人喜欢遍历,希望踏遍千山万水,人生丰富多彩:有人一生贪婪,眼界不宽,及时行乐:有人注定穷搜,辛辛苦苦,收获有限:有人善用时空均衡,用最少的时间办最多的事情.十分精明:有人会分治,再难的问题也能解决.

《算法之道》精华 经典算法部分

<算法之道>精华 经典算法部分 本书作者绉恒明,作者另有一本书<数据结构之弦>,以及<操作系统之哲学原理>都是很好的书 这本书可以算得上是深入浅出,文笔很好,作者添加了很多自己的思考 本文包括经典算法部分 第十章 排序与次序 插入排序 从无序部分抽取一张插入有序部分 为原地排序,无需占用临时存储空间 最优情况下为O(n),平均O(n^2) 折半插入排序 插入时使用二分查找 归并排序 分治,从中间分解,分别排序后进行仔细的合并 异地排序,需要占用额外空间 n>=30

算法之道:形而之上谓之道

1966年3月的一天,美国加州大学洛杉矶分校的Andrew J. Viterbi教授在给研究生讲解缠绕编码的时序译码算法SDCD.但不管他如何讲解,学生就是听不明白.思来想去,Viterbi觉得学生不能理解的原因是该算法的证明过于复杂.于是他开始考虑如何简化这个证明.在经历了持久的烦躁和困惑后,他灵感顿现:需要简化的不是算法的证明,而是算法本身.于是Viterbi对SDCD算法进行了少许修改,提出了基于Trellis的概率译码算法.这个算法就是后来著名的CDMA技术的基石.Viterbi也因此而

算法学习笔记 KMP算法之 next 数组详解

最近回顾了下字符串匹配 KMP 算法,相对于朴素匹配算法,KMP算法核心改进就在于:待匹配串指针 i 不发生回溯,模式串指针 j 跳转到 next[j],即变为了 j = next[j]. 由此时间复杂度由朴素匹配的 O(m*n) 降到了 O(m+n), 其中模式串长度 m, 待匹配文本串长 n. 其中,比较难理解的地方就是 next 数组的求法.next 数组的含义:代表当前字符之前的字符串中,有多大长度的相同前缀后缀,也可看作有限状态自动机的状态,而且从自动机的角度反而更容易推导一些. "前

算法为啥子那么难【转】

转自:http://blog.csdn.net/azheng51714/article/details/8094626 广大码农同学们大多都有个共识,认为算法是个硬骨头,很难啃,悲剧的是啃完了还未必有用——除了面试的时候.实际工程中一般都是用现成的模块,一般只需了解算法的目的和时空复杂度即可. 不过话说回来,面试的时候面算法,包括面项目中几乎不大可能用到的算法,其实并不能说是毫无道理的.算法往往是对学习和理解能力的一块试金石, 难的都能掌握,往往容易的事情不在话下.志于高者得于中.反之则不成立.

Dijkstra算法(三)之 Java详解

前面分别通过C和C++实现了迪杰斯特拉算法,本文介绍迪杰斯特拉算法的Java实现. 目录 1. 迪杰斯特拉算法介绍 2. 迪杰斯特拉算法图解 3. 迪杰斯特拉算法的代码说明 4. 迪杰斯特拉算法的源码 转载请注明出处:http://www.cnblogs.com/skywang12345/ 更多内容:数据结构与算法系列 目录 迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想

O2O难解餐饮行业趋势下行之困

近几年,O2O这个名词越来越常见,我们不但可以在IT相关资讯栏目看到它的存在,甚至在一些综合新闻版面也能轻易看到.诚然,线下商家结合线上引流这种方法,可以带来不少订单,但是O2O是否就可以解决餐饮行业趋势下行之困呢?笔者认为很难,毕竟当一个经济周期出现之后,该洗牌的依然需要被洗牌. 一."包场餐"的出现,孰好孰坏? 笔者不善下厨,自从团购出现后,外出就餐的机会增添不少,然而却发现一个十分明显的趋势 -- 越来越多团购餐厅所表现出来的,并不是因团购而带来旺盛的人气,反而是人气下滑的趋势.

Kruskal算法(三)之 Java详解

前面分别通过C和C++实现了克鲁斯卡尔,本文介绍克鲁斯卡尔的Java实现. 目录 1. 最小生成树 2. 克鲁斯卡尔算法介绍 3. 克鲁斯卡尔算法图解 4. 克鲁斯卡尔算法分析 5. 克鲁斯卡尔算法的代码说明 6. 克鲁斯卡尔算法的源码 转载请注明出处:http://www.cnblogs.com/skywang12345/ 更多内容:数据结构与算法系列 目录 最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的

技术照进现实,OpenStack企业级应用的五大难解之结

云数据中心已经成为当下企业数据中心建设的主流,各类公共云.专有云和混合云技术轮番登场.开源的OpenStack作为最火热的企业云数据中心云平台管理框架,受到了企业的日益关注并且获得了大量的企业级应用实践,在产业互联网发展进程中占据了越来越多的份额.但是在实践中,由于OpenStack属于知识密集型的开源产品,在企业部署.使用和运维的过程中,往往会遇到各种挑战. 技术照进现实,企业级应用尚存难解之结 目前,OpenStack在企业应用过程中主要有五个问题: 1.产品化不足,无法完全满足企业用户的需