热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

1、算法导论时间复杂度、确定性和非确定性图灵机、算法的确定性与非确定性、P问题、NP问题、规约/约化、NPC问题、NPhard问题

算法导论

算法导论

  • 1、 时间复杂度
  • 2、图灵机
  • 3、算法的确定性与非确定性
  • 4、P问题
  • 5、NP问题
  • 6、规约/约化
  • 7、NPC问题
  • 8、NP-Hard问题
  • 9、四大问题关系


1、 时间复杂度

要想了解算法的问题,首先要知道问题的分类,而要想知道问题的分类,就要先了解时间复杂度。

时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。

下面理解一下时间复杂度
在这里插入图片描述
不管数据有多大,程序处理花的时间始终是那么多的,这个程序则具有O(1)的时间复杂度,也称常数级复杂度。

数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n)

再来了解一下多项式:
多项式(polynomial)是指由变量、系数以及它们之间的加、减、乘、幂运算(非负整数次方)得到的表达式,如下
在这里插入图片描述
在这里插入图片描述
前五个都是多项式级别的时间复杂度

而非多项式级别的时间复杂度是: O(a^n), O(n!),非多项式级的时间复杂度是计算机不能承受的。

2、图灵机

图灵机是由艾伦·麦席森·图灵在1936年描述的一种抽象机器,它是人们使用纸笔进行数学运算的过程的抽象,它肯定了计算机实现的可能性,并给出了计算机应有的主要架构,引入了读写与算法与程序语言的概念为现代计算机的发明打下了基础。

图灵机中有两类:确定图灵机和非确定图灵机

在确定性图灵机(DTM)中,其控制规则规定了在任何给定情况下最多只能执行一个动作。

非确定性图灵机(NTM)是一种理论计算模型,其控制规则在某些给定情况下指定了多个可能的动作。 也就是说,NTM的下一个状态不是完全由其动作和它所看到的当前符号决定的(不同于确定性图灵机)。

参考

3、算法的确定性与非确定性

确定性算法:设A是求解问题B的一个解决算法,在算法的整个执行过程中,每一步都能得到一个确定的解,这样的算法就是确定性算法。

非确定性算法:设A是求解问题B的一个解决算法,它将问题分解成两部分,分别为猜测阶段和验证阶段

猜测阶段:在这个阶段,对问题的一个特定的输入实例x产生一个任意字符串y,在算法的每一次运行时,y的值可能不同,因此,猜测以一种非确定的形式工作。


验证阶段:在这个阶段,用一个确定性算法(有限时间内)验证。

①检查在猜测阶段产生的y是否是合适的形式,如果不是,则算法停下来并得到no;
②如果y是合适的形式,则验证它是否是问题的解,如果是,则算法停下来并得到yes,否则算法停下来并得到no。它是验证所猜测的解的正确性。



4、P问题

P Problem,即Polynomial Problem,即多项式回归问题。

对于任意的输入规模n,问题都可以在n的多项式时间内得到解决

P问题是具有多项式算法的判定问题。
P问题就是可以有一个确定型图灵机在多项式时间内解决的问题。
即那些存在O(n), O(nk), O(nlogn)等多项式时间复杂度解法的问题。
比如排序问题、最小生成树、单源最短路径。
直观的讲,P问题视为可以较快解决的问题。

P = “确定性计算机”能够在“多项式时间”解决的所有问题

划重点:多项式时间复杂度,容易被解决的问题

5、NP问题

NP Problem,即Non-deterministic Polynomial Problem,即非确定性多项式回归问题

可以在多项式的时间里验证一个解的问题

NP问题是在多项式时间内“可验证”的问题。
也就是说,不能判定这个问题到底有没有解,而是猜出一个解来在多项式时间内证明这个解是否正确。
即该问题的猜测过程是不确定的,而对其某一个解的验证则能够在多项式时间内完成。

NP = “非确定性计算机”能够在“多项式时间”解决的所有问题

划重点:多项式时间复杂度,不知道到底能不能解决的问题

P类问题属于NP问题,但NP类问题不一定属于P类问题。

6、规约/约化

问题A可以约化为问题B,称为问题A可规约为问题B

即,问题B的解一定就是问题A的解,因此解决A不会难于解决B

即,可以用问题B的解法解决问题A

即,问题A是B的一种特殊情况

由此可知问题B的时间复杂度一定大于等于问题A。

归约
约化性

7、NPC问题

NPC Problem,即Non-deterministic Polynomial Complete Problem,即非确定性多项式回归完全问题

满足两个条件
(1)是一个NP问题
(2)所有的NP问题都可以约化到它

一个NP问题,使得所有的该类NP问题都可以多项式时间地规约(Polynomial-time Reducibility) 为NPC问题。根据规约的传递性,对NP问题进行一层接一层地规约,最终可以得到一个足够泛化的NP问题,即NPC问题。


所有NP问题在多项式时间内都能约化(Reducibility)到它的NP问题,即解决了此NPC问题,所有NP问题也都得到解决。


既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P了。


8、NP-Hard问题

NP hard Problem,即Non-deterministic Polynomial hard Problem,即非确定性多项式回归难问题

NP-Hard问题满足NPC问题定义的第二条但不一定要满足第一条
NP-Hard问题要比 NPC问题的范围广,NP-Hard问题没有限定属于NP,即所有的NP问题都能约化到它,但是他不一定是一个NP问题
即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法
事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决


9、四大问题关系

P问题属于NP问题,NPC问题属于NP问题。


NPC问题同时属于NP hard问题,是NP与NPhard的交集。
在这里插入图片描述


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文讨论了B360主板是否可以安装win7系统的问题。由于B360主板不支持win7系统且缺乏官方驱动的支持,安装win7系统可能存在兼容性和稳定性问题。然而,通过借助USB3.0转接卡,B360主板仍然可以安装win7系统,但USB接口无法使用。相比之下,B365主板可以直接支持win7系统,并提供了相应的驱动,具有更好的稳定性和兼容性。选择合适的主板对于安装win7系统至关重要。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Principle for Mac(交互式屏幕设计软件)免激活版
    Mac上好用的交互式屏幕设计软件,PrincipleforMac是一款交互式屏幕设计软件,principle mac让您的设计将以原则出现,随时为您注入新的活力。如果您进行更改,再 ... [详细]
author-avatar
手机用户2602886967
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有