热门标签 | 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的交集。
在这里插入图片描述


推荐阅读
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
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社区 版权所有