算法的基本概念(二)

算法设计与分析相关名词概念

# 算法Algorithm
给定一个问题的描述作为输入,图灵机求解的过程。 此过程有可能无限步长,则图灵机永远不会停止,除非被外部力量终止。
# 图灵机Turing-machine
英国数学家图灵提出的计算模型, 一个两端无限长的由小格子组成的带子,每个格子可以存储一个数,一个可以在带子左右移动的游标或者指针或者不如叫磁头(head), 磁头可读或修改格子里的数。 
默认说的是确定性图灵机,和非确定性图灵机功能上等价
# 多项式Polynomial
Polynomial
    由平方,立方等常数次方或者更小的运算符和+,-,*,/等构成的式子及其这种式子的和
Polynomial Time
    运行时间是n的多项式时间,比如n平方 n立方等像这种都是多项式时间。有效的算法是指运行时间是多项式时间
Polynomial algorithm: 多项式算法。 
    如果给定问题输入的长度,常量n, 则如果图灵机解答过程需要的是时间是以n为变量的多项式,则这个解法(也是个算法)是有多项式的时间复杂度的。此时也称这个算法为有效的算法
# 非确定性的Non-deterministic
非确定性算法:
    1. 非确定性算法将问题分解成猜测和验证两个阶段。算法的猜测阶段是非确定性的,算法的验证阶段是确定性的,它验证猜测阶段给出解的正确性。
    2. 设算法A是解一个判定问题Q的非确定性算法,如果A的验证阶段能在多项式时间内完成,则称A是一个多项式时间非确定性算法。
    3. 有些计算问题是确定性的,例如加减乘除,只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有一个公式能推出下一个质数是多少呢?这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。而这些问题的通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。
多项式非确定性问题:
    这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式(polynomial)时间内算出来,就叫做多项式非确定性问题。

# 判定问题Decision question
判定问题数理逻辑中的一个重要问题。它表现为寻求一种能行的方法、一种机械的程序或者算法,从而能够对 某类问题中的任何一个 在有穷步骤内 确定其是否具有某一特定的性质。
简而言之:答案是yes或者no的问题
# 算法中的P问题、NP问题、NP完全问题和NP难问题
P类问题:
    所有可以在多项式时间内求解的判定问题构成P类问题。即:如果一个判定问题是P问题,则这个问题存在一个多项式解法。 即图灵机只需要多项式时间就可以得到答案, 既回答yes或者no

NP类问题:
    所有的非确定性多项式时间可解的判定问题构成NP类问题。即:如果一个判定问题是NP问题, 则这个问题的一个可能的解,可以在多项式时间内被验证是否正确。 其实这不是本来的定义。 本来的定义是,NP问题是非确定性图灵机有多项式解。但我们可以把非确定性图灵机多项式可解转化成确定性图灵机多项式可验证解

比较:
    1. P问题是确定性图灵机在多项式时间内求到解,NP问题是非确定性图灵机在多项式时间内求到解,或者说NP问题是确定性图灵机在多项式时间内验证解是否正确. 所以NP问题比P问题更难。 就像前面有人说的,改卷的老师会验证题目的答案是否正确,但他不一定会做这些题
    2. P属于NP。 就是说,一个问题如果属于P, 则一定属于NP。 (这里P, NP表示符合定义的相关问题的集合)反过来则不一定,7大数学世纪难题之一就是问 P是否等于NP。

NPC问题:
    NP中的某些问题的复杂性与整个类的复杂性相关联.
    NPC, 即NP完全性问题。 任意一个NP问题都可规约到该问题,那么该问题称为NP-complete(NPC)。 是指NP问题中的最难的问题。 即还没有找到多项式解法,但多项式可验证。 而且只要一个NPC问题有多项式解法,其它所有NP问题都会有一个多项式解法。

NP-hard
    NP-hard是指所有还没有找到多项式解法的问题, 并没有限定属于NP。 所以NP-hard比NPC范围更大,也会更难。 NPC是NP-hard和NP的交集.。NPC问题都是NP-Hard问题。例如TSP优化问题、Hamilton问题不问题,它们不是NP问题,但是是NP-Hard问题。
# 复杂性理论的核心:NP=P?
“复杂性理论” :  复杂性理论,从根本上说就是研究哪些工作可以很容易地用计算机完成,哪些工作不能的理论。关注一个问题是否能够有效求解的边界。
核心:`NP = P ?`
生成问题的一个解通常比验证一个给定的解时间花费要多得多。这是这种一般现象的一个例子。与此类似的是,如果某人告诉你,数13,717,421可以写成两个较小的数的乘积,你可能不知道是否应该相信他,但是如果他告诉你他可以因式分解为3607乘上3803,那么你就可以用一个袖珍计算器容易验证这是对的。
人们发现,所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。既然这类问题的所有可能答案,都可以在多项式时间内计算,人们于是就猜想,是否这类问题,存在一个确定性算法,可以在多项式时间内,直接算出或是搜寻出正确的答案呢?
    这就是著名的NP=P?的猜想。 
不管我们编写程序是否灵巧,判定一个答案是可以很快利用内部知识来验证,还是没有这样的提示而需要花费大量时间来求解,被看作逻辑和计算机科学中最突出的问题之一。它是斯蒂文·考克于1971年陈述的。

参考链接:https://www.cnblogs.com/startover/p/3141676.html

你可能感兴趣的:(算法的基本概念(二))