📜  计算复杂理论导论

📅  最后修改于: 2021-06-28 18:41:19             🧑  作者: Mango

概述:
简而言之,复杂性理论是一个很花哨的词,从字面上看,它听起来很复杂,但这并不是一个令人生畏的话题。它真正的意思是分析程序,或者可以说分析程序的效率,确定程序是否正确,确定一个程序是否比另一个程序更好,以及我们如何在非常长的时间内完成该程序。量化方式。当我们进行任何计算机编程时,或者通常或在最实际的目的中,我们通常会看到很多这种变体,它们只有两个主要复杂性,一个是时间复杂性,另一个是空间(内存)复杂性。

时间复杂度很简单,因为代码的运行速度,所需的时间取决于步骤数。时间复杂度与硬件无关,因此假设我编写一个程序,可能有超级计算机,也可能有一台简单的笔记本电脑,因此时间根据运行程序的位置而有所不同,因此它不是一个确定性指标我们想要一个非常健壮和确定性强的东西,因此接下来我们有一个非常简单的步骤,它不测量实际时间,但是我们知道时间基本上与程序所采取的步骤数量成正比。

时间(执行)和空间(内存)因素的复杂性示例:

示例1:更复杂

i = 1;                        1s
while( i <= 10 )              11s
{
    a = 5;                       10s
    result = i * a;              10s
    printf(“\n” /d”, result);    10s
    i++;                         10s
}

在这里,我们假设每个变量等于2个字节。在上面的示例中,我们使用了6个字节的三个变量(i,a,结果)。

执行时间: 52s
内存(空间): 6个字节示例2:不太复杂

a = 5;                       1s
i = 1;                           1s
while( i<=10)                  11s
{  
    result = i * a;              10s
    printf(“\n” /d”, result);    10s
    i++;                         10s 
}

执行时间: 43s
内存(空间): 6个字节计算复杂度方面的问题:

  • 可解决的问题:
    如果您找到一个解决方案意味着存在一个潜在的解决方案,您有一个可以解决的问题,那么您有一个算法和过程来找到它的解决方案,但是如果您在数学上证明不存在解决方案就意味着这个问题可以解决。不需要任何进一步的讨论,因为我们知道问题永远无法解决,无论我们尝试解决多少次。
  • 无法解决的问题:
    计算机科学中无法解决的问题是问题的暂时状态,因为问题无法解决,我们说无法立即解决问题,也无法说无法解决问题,这意味着存在无法解决的问题我们仍然感到困惑,讨论仍在进行中。而且,如果问题出在这个领域,那么这就是无法解决的问题。
  • 可判定与不可判定:
    基本上,可解决的问题分为两类:可确定的和不可确定的。在深入探讨可判定性领域之前,我们应该对计算理论的算法和机器模型(尤其是图灵机)有很好的了解。
  • 可确定的问题:
    当我们谈论可决定的问题时,使用了两个重要术语:算法和过程。该过程是解决问题的分步说明。当我们说解决问题的大概时间是多少时,过程就成为一种算法。当我们关注可决定的问题时,这意味着它既包含算法,也包含过程。
  • 无法确定的问题:
    当我们谈论不确定的问题时,我们无法预测问题可以解决的时间。不确定的问题也可以解决,并且存在解决该问题的过程,但是由于我们无法预测大概的时间,因此问题很复杂。