零知识证明之什么是QAP?什么是P/NP、NP完全问题(NPC问题)、NP hard问题?多项式时间

本文介绍了P与NP问题的概念,包括P问题在多项式时间内可解,NP问题在多项式时间内可验证但可能不可解。讨论了12字助记词的安全性,指出其安全性源于指数级的组合数量。接着,文章阐述了NP完全问题的定义和重要性,以旅行商问题为例。最后,详细解释了QAP(Quadratic Arithmetic Program)问题,它是NP完全问题的一种,用于算术电路的零知识证明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是NP问题

【强烈推荐】什么是P=NP问题?
参考URL: https://zhuanlan.zhihu.com/p/143003261
谈谈计算机中的NP,NP-Hard,NP完全以及"NP=P?"问题
参考URL: https://www.bilibili.com/video/BV1Wz4y1d7wb?from=search&seid=17069712980402004069
【计算机原理2】P=?NP和复杂度理论
参考URL: https://www.bilibili.com/video/BV1t54y1y7KN

在理解 QAP 之前,我们先来了解一下什么是 P 问题。
在这里插入图片描述

  • P问题是什么?
  • NP问题又是什么?
  • P=NP又是什么意思?
  • 研究并解决P=NP问题的意义是什么?

斯蒂芬·库克和列昂尼德·莱文在1971年独立地提出了P(即容易找到)和NP(即容易检查)问题。

P问题和NP问题的主要特征:

  • P 问题(easy to find)
    all problems solvable, deterministically, in polynomial time
    译:多项式时间内可解决的问题(当然在多项式时间是可验证的)

  • NP 问题(esay to check)
    non-deterministic Polynomial time
    译:非确定性多项式时间可解决的问题

举几个例子来加深印象:

计算1-1000的连续整数之和:这个问题就比较简单,无论是编程还是使用高斯求和公式都可以在有限可接受的时间内完成,这种算是P类问题。

计算地球上所有原子个数之和:这个问题就很困难甚至无解,但是现在有个答案是300个,显然是错的,所以很容易验证但不容易求解,这种算NP类问题。

P类问题是可以在多项式时间内解决并验证的一类问题,NP类问题是可以多项式时间验证但是不确定能否在多项式时间内解决的一类问题。

1. 多项式时间

【强烈推荐】什么是P=NP问题?
参考URL: https://zhuanlan.zhihu.com/p/143003261

多项式时间(英语:Polynomial time)在计算复杂度理论中,指的是一个问题的计算时间不大于问题大小的多项式倍数。任何抽象机器都拥有一复杂度类,此类包括可于此机器以多项式时间求解的问题。

其实多项式时间的概念我们还是很熟悉的,在做算法题或者日常工作时我们都会说,这个解法的时间复杂度是O(n^2)性能不是很好,那个解法的时间复杂度是O(nlogn)(注:计算机中的log一般指底数=2)还可以。

这里的大O就是时间复杂度的表示法,看到这里仿佛清晰一些了,不过还是看下多项式表达:
在这里插入图片描述
多项式的概念我们在小学初中的时候就开始接触了,对于计算机来说有更特别的含义,我们都知道算法时间复杂度的大O表示法,取表达式中的最高次其他项忽略,因为随着输入规模的增大最高次的影响最大,对计算机来说可以做这样的近似处理,比如上面的多项式表达式可以理解为O(n^k)的复杂度。

这个世界并不是只有多项式时间这么简单,我们还知道有指数函数形如 2 n 2^n 2n 这个计算量已经非常可怕,更不要说 n n n^n nn n ! n! n!这种问题了。

对于计算机而言,它不知道问题难不难,对它而言就是拆解成非常多的步骤去执行,去衡量计算机认为难或者不难或许可以从其执行时间来看,在排除代码实现差异来说,执行时间越长的问题通常都会比较难。

直观感受一下,随着不同输入规模下,多项式时间和非多项式时间的时间消耗曲线差异吧:
在这里插入图片描述看到这里恍然大悟,多项式时间内可解决的意义所在。

  • 多项式时间是算法复杂度的一个概念。
  • 问题元素为n时,若完成算法的指令条数为n的k次方(k为常数),那么这个算法是多项式时间算法。
  • 比如冒泡排序的时间复杂度是n的平方,就是一个多项式时间算法。
  • 如果指令条数为k的n次方或者
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值