作业车间调度问题:P还是NP

news2024/11/15 17:59:03

在这里插入图片描述

获取更多资讯,赶快关注上面的公众号吧!

文章目录

  • 基本概念
    • 多项式时间
    • 指数时间
  • P问题(多项式问题)
  • NP问题(非确定性多项式问题)
    • 暴力穷举法
    • 动态规划
  • P与NP关系:
  • 作业车间调度问题是典型的NP难问题

P和NP问题是计算机科学中的两个重要的问题,涉及到计算问题的复杂性和可解性。这两个问题都与算法的效率和时间复杂度有关。

基本概念

多项式时间

多项式时间指的是算法的运行时间与问题规模之间存在多项式关系。更具体地说,如果一个算法的运行时间可以表示为问题规模的某个多项式函数,那么这个算法在多项式时间内运行。通常用 O ( n k ) O(n^k) O(nk)来表示多项式时间,其中n是问题的输入规模(通常表示为输入的大小),k是一个常数。

例子:

  • O ( n ) O(n) O(n)表示线性时间,算法的运行时间与输入规模成线性关系。
  • O ( n 2 ) O(n^2) O(n2)表示平方时间,算法的运行时间与输入规模的平方成正比。
  • O ( n 3 ) O(n^3) O(n3)表示立方时间,算法的运行时间与输入规模的立方成正比。

多项式时间算法通常被认为是高效的,因为它们在处理大规模问题时的运行时间增长相对较慢

指数时间

指数时间指的是算法的运行时间与问题规模之间存在指数关系。如果一个算法的运行时间增长迅速,超过了问题规模的指数函数,那么这个算法就是指数时间的。通常用 O ( 2 n ) O(2^n) O(2n)表示指数时间,其中n是问题的输入规模。

例子:

  • O ( 2 n ) O(2^n) O(2n)表示指数时间,算法的运行时间随着输入规模的增加呈指数级增长。

指数时间算法通常非常慢,特别是在处理大规模问题时,因为它们的运行时间增长非常迅猛。在实际应用中,指数时间算法通常只适用于小规模问题,因为对于大规模问题,它们的运行时间可能会变得不切实际。

P问题(多项式问题)

P问题(Polynomial Problem)是指那些可以在多项式时间内(即问题规模的多项式函数时间内)解决的问题。简单来说,如果一个问题是P问题,那么存在一个算法,其运行时间的上限是输入规模的多项式函数,也就是说,对于P问题,存在一个多项式函数 f ( n ) f(n) f(n),其中n是输入规模,算法的运行时间是 O ( f ( n ) ) O(f(n)) O(f(n))。大多数常见的计算问题,例如排序、搜索和数学运算,都属于P问题。这些问题可以有效地通过计算机算法来解决,而且在合理的时间内。

假设有一个排序问题,你需要对一个包含n个整数的数组进行排序。一个典型的排序算法是冒泡排序。在冒泡排序中,每次比较相邻的两个元素并交换它们,然后再次遍历数组,重复这个过程,直到整个数组排序完成。这个算法的时间复杂度是 O ( n 2 ) O(n^2) O(n2),其中n是数组的大小。这意味着算法的运行时间与数组大小的平方成正比。这个问题是一个P问题,因为存在一个多项式函数 n 2 n^2 n2来描述算法的运行时间。

冒泡排序的基本思想是从左到右不断比较相邻两个元素,如果它们的顺序不正确(即前面的元素大于后面的元素),则交换它们,将较大的元素“冒泡”到右侧。这个过程一直重复,直到没有需要交换的元素为止。下面为冒泡排序的Python代码。

def bubble_sort(arr):
    n = len(arr)
    # 遍历数组元素,执行n-1次
    for i in range(n - 1):
        # 每次遍历从头开始,将较大的元素逐个向后交换
        for j in range(0, n - 1 - i):
            if arr[j] > arr[j + 1]:
                # 交换arr[j]和arr[j + 1]的值
                arr[j], arr[j + 1] = arr[j + 1], arr[j]

可以看到,上述代码包含两层循环。

外层循环迭代n-1次,表示当剩余一个元素时就没有必要移动了。

内层循环迭代的次数是不同的。在第一次迭代中,它需要比较n-1次。在第二次迭代中,它需要比较n-2次,依此类推。

因此,总的比较次数可以表示为:

(n-1) + (n-2) + (n-3) + ... + 1= n(n-1)/2

对于每一次比较,如果需要交换,就会执行一次交换操作。最坏情况下,每次比较都需要交换,因此交换的次数与比较的次数相等,都是 O ( n 2 ) O(n^2) O(n2)

所以冒泡排序的时间复杂度是 O ( n 2 ) O(n^2) O(n2)

NP问题(非确定性多项式问题)

NP问题(Non-deterministic Polynomial Problem)是指那些可以在多项式时间内验证给定解的问题。也就是说,如果你有一个候选解,你可以在多项式时间内检查它是否是正确的解。然而,尚未找到一种有效的算法来在多项式时间内解决所有NP问题。如果某个问题是NP问题,那么如果你提供一个猜测的解,你可以在多项式时间内验证它是否正确。典型的NP问题包括旅行商问题和背包问题。

旅行商问题(Traveling Salesman Problem,TSP)是一个组合优化问题,它的时间复杂度在一般情况下是指数级别的。TSP的时间复杂度取决于问题的规模(城市数量)和求解方法。

暴力穷举法

如果使用暴力穷举法来解决TSP,需要尝试所有可能的城市排列,计算每个排列的路径长度,然后选择最短路径,其时间复杂度为 O ( n ! ) O(n!) O(n!),其中n是城市的数量。

这个很好理解,首次选择时有n个城市可选,第二次选择时从剩下的n-1个城市中选择,第三次选择时从剩下的n-2个城市中选择,以此类推,直到最后一次选择时就剩下1个城市。所以就是 n × ( n − 1 ) × ( n − 2 ) × . . . × 2 × 1 = n ! n\times(n-1)\times(n-2)\times...\times2\times1=n! n×(n1)×(n2)×...×2×1=n!

动态规划

动态规划是一种用于解决TSP的有效方法,但它的时间复杂度也取决于问题的规模,其时间复杂度为 O ( n 2 ∗ 2 n ) O(n^2 * 2^n) O(n22n),其中n是城市的数量,推导过程如下:

求解旅行商问题(Traveling Salesman Problem,TSP)的动态规划算法的时间复杂度取决于问题规模和算法的具体实现方式。TSP是一个NP-hard问题,因此不存在多项式时间复杂度的解决方案,但动态规划可以用来求解相对较小规模的TSP实例。下面是一个简单的TSP动态规划算法的时间复杂度分析:

假设有N个城市,我们要找到一条经过所有城市一次且回到起点的最短路径。

  1. 状态空间的大小:动态规划的核心是定义状态和状态转移方程。通常,我们可以使用一个二进制位向量来表示当前哪些城市已经访问过,例如,如果n=4,可以使用0001、0010、0100、1000来表示不同的状态,其中每个位代表一个城市是否被访问,所有这些状态构成了S。

  2. 状态转移方程:动态规划的关键在于状态之间的转移。对于TSP,状态转移方程通常是:

    dp[S][i] = min(dp[S][i], dp[S-{i}][j] + dist[j][i])
    

d p [ S ] [ i ] dp[S][i] dp[S][i]表示从起始城市出发,经过集合S中的城市,最后到达城市i的最短路径长度。 d i s t [ j ] [ i ] dist[j][i] dist[j][i]表示城市j到城市i的距离。

  1. 时间复杂度分析:对于每个状态mask,需要遍历所有的城市i和找到一个城市j,因此状态转移的时间复杂度是 O ( n 2 ) O(n^2) O(n2)。对于每个状态mask,都需要计算 d p [ m a s k ] [ i ] dp[mask][i] dp[mask][i],一共有 2 n 2^n 2n个状态(每个状态都对应一个mask),所以总的时间复杂度是 O ( n 2 ∗ 2 n ) O(n^2 * 2^n) O(n22n)

总之,TSP的动态规划算法的时间复杂度是指数级的,随着城市数量的增加,计算复杂度急剧增加,因此在实际应用中,通常需要考虑其他算法来处理大规模TSP实例。

P与NP关系:

P问题是NP问题的子集,也就是说,所有P问题都是NP问题。这是因为如果一个问题可以在多项式时间内解决,那么你也可以在多项式时间内验证解是否正确。但至今尚未知道P问题和NP问题是否相等,即P = NP或P ≠ NP。

如果P = NP,这意味着对于所有NP问题,都存在一个多项式时间的算法来解决它们,这将改变计算机科学和密码学的面貌,因为许多加密算法和安全协议都依赖于NP问题的难解性。但如果P ≠ NP,那么一些NP问题可能是非常难解的,这将保持当前的计算机科学理论和实际应用的基础。

总之,P和NP问题是计算机科学中复杂性理论的核心概念,它们关注了在多项式时间内解决问题的可行性和难度。这两个问题的解决与许多计算和优化问题的解决方式以及计算机科学的未来发展密切相关。

作业车间调度问题是典型的NP难问题

作业车间调度问题(Job Shop Scheduling Problem)被认为是一个NP难问题,这意味着它至少与NP问题一样难以求解。有几个原因解释了为什么作业车间调度问题被归类为NP难问题:

  1. 组合爆炸:在作业车间调度问题中,通常有多个作业(jobs)需要在一台或多台机器上执行,并且每个作业都有一系列的工序(operations)必须按照特定的顺序执行。这导致了组合爆炸,因为可能有许多不同的工序排列,每一种排列都需要评估其总执行时间。随着作业数量和机器数量的增加,问题的规模呈指数增长,这使得求解问题的所有可能解变得非常困难。

  2. 搜索空间巨大:对于作业车间调度问题,要找到最优解需要在所有可能的解中搜索,这个搜索空间通常非常大,因此暴力搜索所有可能的解是不现实的。这是NP难问题的一个典型特征,因为NP难问题的解决方案往往需要在庞大的搜索空间中进行搜索。

  3. 缺乏多项式时间算法:迄今为止,尚未发现一种能够在多项式时间内解决所有作业车间调度问题的算法。虽然有一些启发式方法和近似算法用于尝试找到接近最优解的解决方案,但对于大规模问题,这些算法也可能需要较长的计算时间。

咱们通过一个例子,直观地观察一下这种指数级的爆炸。

考虑一个3x3的JSP问题,即有3个工件和3台机器,每个工件各有3道工序恰好对应不同机器,那么每台机器均可加工3道工序,每台机器的不同工序排序数有3!=6种,那么3台机器就有3!x3!x3!=720种排序,看起来也不多。

接着考虑6x6的问题,排序数有 ( 6 ! ) 6 = 373248000 (6!)^6=373248000 (6!)6=373248000,一下子有点数不过来了,这也是我们为什么经常说6x6的问题人已经很难找到最优解了。

再看10x10的问题,排序数有 ( 10 ! ) 10 ≈ 4 × 1 0 65 (10!)^{10}≈4\times 10^{65} (10!)104×1065,这会彻底蒙了!

如用完全枚举法,2022年排名世界第一的美国超级计算机Frontier运算速度达到每秒1.1百亿亿≈$1.1\times 10^{18} $次,那也需要 1.1 × 1 0 40 1.1\times 10^{40} 1.1×1040年,而地球年龄也仅为 45.5 亿年 ≈ 4.55 ∗ 1 0 9 45.5亿年≈4.55*10^9 45.5亿年4.55109年。

但是,如果仅仅是解空间大的问题,随着计算机速度的提升,终将也不是大问题。本质上在于,车间调度问题受制于很多要素的约束,比如日历、物料、夹具等,需要在众多解中寻找满足约束条件的解,而每个约束条件都会增加问题的复杂度,此时寻找一个可行解都比较困难。

综上所述,作业车间调度问题因其组合爆炸、庞大的搜索空间和缺乏多项式时间算法等特点,被认为是NP难问题。这意味着它属于那些尚未找到快速解决方法的复杂问题之一,通常需要使用近似算法来得到次优解,所以一种比较切合实际的方法就是,充分利用问题本身的特征,通过仿真的方式从大量数据中寻找次优解,建立特征与结果的映射关系,并固化为特定知识,从而在面对新问题时可快速匹配出合适策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1420371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

源码篇--Redis 通信协议

文章目录 前言一、Redis 的通信过程:二、RESP 协议:三、客户端模拟RESP 通信:总结 前言 在我们知道redis 的网络模型后,继续看下 redis 的通信协议。 一、Redis 的通信过程: Redis是一个CS架构的软件,通信…

[GXYCTF2019]禁止套娃(特详解)

刚打开页面什么都没有,抓包也什么都没有 那就dirsaerch扫一下,发现状态码都是429,访问太快了(这里很多师傅都没有说明或者说清楚) 这里改了一下线程(kali自带的,如果用的脚本要加前面要加python…

【vue】图片加载骨架

一、前言 在网速较低或者网站的服务器宽带只有几MB的情况下,网页中的图片加载时,要么空白,要么像打印机一样一行一行地“扫描”出来,为了提升用户体验,可以给图片标签外加一层骨架。 无骨架 有骨架 二、详细设计 每张…

Mysql 删除数据

从数据表中删除数据使用DELETE语句&#xff0c;DELETE语句允许WHERE子句指定删除条件。DELETE语句基本语法格式如下&#xff1a; DELETE FROM table_name [WHERE <condition>]; table_name指定要执行删除操作的表&#xff1b;“[WHERE <condition>]”为可选参数&a…

宠物用品/宠物自动饮水机方案

宠物自动饮水机方案原理 宠物自动饮水机&#xff0c;也叫做智能宠物饮水机&#xff0c;是一种为宠物设计的智能化饮水器。应用核心主要在于智能化水泵控制&#xff0c;以及外围传感器电路。 宠物自动饮水机使用方便&#xff0c;不用频繁的换水。另外&#xff0c;自来水的水质可…

二阶魔方、四阶魔方 还原公式图文教程

二阶魔方 四阶魔方 在家无聊&#xff0c;翻东西的时候看到了以前买的4阶魔方&#xff0c;就随便在网上复制了一个4阶魔方的教程&#xff0c;以免忘记。 本文四阶魔方公式图解是针对四阶魔方教程的降阶法做更多的解释和说明。 四阶魔方被认为是2-5阶魔方玩法中最不好复原的,虽…

一文说清楚仿真与数字孪生的关系

获取更多资讯&#xff0c;赶快关注上面的公众号吧&#xff01; 文章目录 何为仿真何为数字孪生 最近看群里的小伙伴在疯狂讨论数字孪生&#xff0c;今天我也谈谈自己的理解。 之前还在北航读博的时候&#xff0c;北航陶飞教授已经算是数字孪生领域的领军人物&#xff0c;也专门…

Ubuntu 隐藏Telnet主机SSH服务时显示版本信息问题

一、背景 默认情况下&#xff0c;我们通过telnet服务器的22端口&#xff0c;能够获取OpenSSH服务的banner信息(如下图所示)。而低版本的OpenSSH存在许多高危漏洞。。为了安全我们要隐藏这个信息。 二、隐藏Telnet版本信息 当使用telnet命令&#xff0c;telnet 192.168.31.20…

SeaTunnel Web安装 一把成

安装相关jar包&#xff0c;以及SeaTunnel 和Web 打成的包&#xff0c;可以直接使用&#xff0c;但是需要安装MySQL客户端的分享&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1qrt1RAX38SgIpNklbQJ7pA 提取码&#xff1a;0kmf 1. 环境准备 环境名称版本系统环境C…

WPOpenSocial实现WordPress的QQ登录

个人建站不可避免的需要自己搭建用户数据库的问题&#xff0c;可用户却往往因为注册繁琐而放弃浏览您的网站&#xff0c;由此可见&#xff0c;一个社交账号一键登录方式尤为重要。选择适合您网站需求的社交插件&#xff0c;可以提升用户互动&#xff0c;增加社交分享&#xff0…

高端车规MCU的破局之路

目录 1 低质量的无效内卷 2 高端车规MCU产品共性 2.1 支持标定测量 2.2 低延迟通信加速 2.3 完备的网络安全解决方案 2.4虚拟化 3 国产替代的囚徒困境 1 低质量的无效内卷 近几年&#xff0c;车规MCU国产替代的呼声此消彼长&#xff0c;但仍然集中在低端产品。 从产…

后序遍历的线索化二叉树

对于后序遍历&#xff0c;需要明确&#xff0c;往往叶子结点&#xff0c;只能指向右子树&#xff08;如果右子树存在的情况&#xff09;&#xff0c;或者指向该结点&#xff08;因为这才是后序遍历&#xff09;&#xff0c;同样在进行退出到前一次递归的时候&#xff0c;我们要…

基于Redis的高可用分布式锁——RedLock

目录 RedLock简介 RedLock工作流程 获取锁 释放锁 RedLock简介 Redis作者提出来的高可用分布式锁由多个完全独立的Redis节点组成&#xff0c;注意是完全独立&#xff0c;而不是主从关系或者集群关系&#xff0c;并且一般是要求分开机器部署的利用分布式高可以系统中大多数存…

再学vue3的优势

vue3 对 vue2 有什么优势 性能更好&#xff08;编译优化、使用proxy等&#xff09;体积更小更好的TS支持更好的代码组织更好的逻辑抽离更多新功能 vue3 和 vue2 的生命周期有什么区别 Options API生命周期 beforeDestroy改为beforeUnmountdestroyed改为umounted其他沿用vue…

网络安全01--负载均衡

目录 一、环境准备 1.1三台虚拟机 二、开始搭建负载均衡&#xff1a; 2.1准备一下源 2.2正式安装 2.3Nginx安装情况 三、负载均衡--轮询&#xff08;round robin&#xff09; 3.1在 http 部分添加如下负载均衡配置&#xff1a; 3.2简单解释一下server端&#xff1a; …

vxe-table表格合并行和虚拟滚动冲突

项目一直用的vxe-table 2.0版本&#xff0c;支持表格的虚拟滚动&#xff0c;最近要做表格合并行功能&#xff0c;虚拟滚动便失效了&#xff0c;强行虚拟滚动&#xff0c;合并行会有错行现象。 vxe-table2.0给出的解释是&#xff1a;合并行不能和虚拟滚动一起使用。 目前找到两种…

代码之外的艺术:程序员的写作利器

在这个信息爆炸的时代&#xff0c;知识的管理和团队协作成了重要的技能。对于个人和企业来说&#xff0c;高效的文档和笔记服务平台是保持竞争力的关键工具。今天&#xff0c;让我们深入对比一下当前市场上流行的几款服务&#xff1a;石墨文档、腾讯文档、语雀、有道云笔记、No…

Linux:理解信号量以及内核中的三种通信方式

文章目录 共享内存的通信速度消息队列msggetmsgsndmsgrcvmsgctl 信号量semgetsemctl 内核看待ipc资源单独设计的模块ipc资源的维护 理解信号量总结 本篇主要是基于共享内存&#xff0c;延伸出对于消息队列和信号量&#xff0c;再从内核的角度去看这三个模块实现进程间通信 共享…

剖析Elasticsearch面试题:分词、倒排索引、文本相似度TF-IDF,揭秘分段存储与段合并,解密写索引技巧,应对深翻页问题的实用解决方案!

1、谈谈分词与倒排索引的原理 当谈到Elasticsearch时&#xff0c;分词与倒排索引是两个关键的概念&#xff0c;理解它们对于面试中展示对Elasticsearch工作原理的理解至关重要。 「1. 分词&#xff08;Tokenization&#xff09;&#xff1a;」 分词是将文本分解成一个个单独…

智能水肥一体化灌溉系统:提升农业生产效率的数字化解决方案

一、设备介绍(key-iot.com.cn)&#xff1a; 我们的星创易联设备是智能水肥一体化灌溉系统的核心组成部分。该设备由多个先进的传感器和执行器组成&#xff0c;可以对环境因素、土壤湿度和植物生长状态进行实时监测。其中包括&#xff1a; 1. 土壤湿度传感器&#xff1a;通过监…