关于时间复杂性定义的难题

时间:2017-11-14 00:55:25

标签: algorithm time-complexity

维基百科将time complexity定义为

  

在计算机科学中,算法的时间复杂度是量化的   算法作为的函数运行所花费的时间量   表示输入的字符串的长度

强势部分意味着什么?

我知道算法可以被视为一个函数,但是为什么它的输入必须是“代表”的字符串的长度?

3 个答案:

答案 0 :(得分:0)

定义来自图灵机的上下文,您可以在其中定义不同的状态。您可以使用计算机计算的每个功能也可以使用图灵机进行计算。(我会说计算机在图灵机的基础上计算功能)

每个功能只是从一个域到另一个域或同一个域的映射。

在去图灵机之前看看有限 -automata的概念。它有有限的状态。如果你的输入长度为n,那么它可能只需要两个统计数据但是它必须访问那些状态n次,其中n是字符串的最后一个。

不是一个好的草图但是看下面的图像,我们的最终状态是C,意味着是否 以c中的字符串结尾我们的字符串将被接受。

我们使用一元数字系统。我们想检查这个字符串是否被我们的自动机接受:string是010101010

当我们从0阅读A后,我们转移到B,如果我们再次阅读0,我们将移至C,如果我们以{{1}结尾我们的字符串被接受,否则我们再次移动到0

在计算机中,您将数字表示为长度为A的字符串,为了计算它,您必须访问字符串的每个字符。

图灵机以相同的方式工作,但有限自动机仅限于常规语言。这是一个大理论

enter image description here

你有没有想过计算机如何计算函数2 * x,其中x是你的输入。 这很有趣:D。假设我想计算20 * 2,我用一元数字系统表示这个数字因为它很容易。所以我们用0表示,1表示11,2表示111等等,所以如果我们将20转换为一元系统,我们得到n。您可以想到图灵机或计算机(非高级),具有线性记忆的系统。

假设您的记忆中的空白点带有1111

输入后你会有这样的事情:#其中###1111####表示内存中的空插槽,图灵机的输入头是#,所以你继续前进直到您找到第一个1,然后将其替换为#,这只是一个帮助符号,并将*的右侧更改为1现在向后移动并再更改一个#当您发现1 to *继续执行此操作时,{1}}并在右侧写one 1,左侧的所有#和所有*都会留下在右侧,现在将所有* s改回1,你有2 * x。这是跟踪,你有2 * x,其中x是你的输入。

重点是这些机器唯一记住的是状态。

1s

#####1111#######

#####111*1######

#####11**11#####

#####1***111####

#####****1111###

答案 1 :(得分:0)

较大部分中的函数表示算法的时间复杂度,而不是算法本身。算法可以用具有函数关键字的编程语言来实现,但这是其他的东西。

算法MergeSort具有32m位的列表作为输入(假设m个32位值)。它的时间复杂度T(n)是n = 32m的函数,输入大小,并且在最坏的情况下,由上限O(n log n)。 MergeSort可以作为C或JavaScript中的函数实现。

答案 2 :(得分:0)

摘要

如果有输入,则表示为字符串。所以你有一个字符串的长度。然后你有一个函数F,它将输入的长度(作为字符串)映射到A计算此输入所需的时间(在最坏的情况下)。

我们称之为F时间复杂度。

假设我们有一个算法A。它的时间复杂度是多少?

非常简单的案例

如果A具有恒定的复杂性,则输入无关紧要。输入可以是单个值,也可以是列表,也可以是从字符串到列表列表的映射。该算法将运行相同的时间。 3秒或1000蜱或一百万年或其他什么。恒定时间值不依赖于输入。

说实话并不太复杂。

增加复杂性

现在让我们假设A是一种排序整数列表的算法。很明显,A所需的时间现在取决于列表的长度。长度为0的列表实际上是按字面排序的(但是检查列表的长度)但如果输入列表的长度增加,则会更改

您可以说存在一个函数F,它将列表长度映射到A排序该长度列表所需的秒数。可是等等!如果列表已经排序怎么办?因此,为简单起见,我们总是假设最坏的情况:F将列表长度映射到A排序该长度列表所需的最大秒数。

你可以用秒,CPU周期,滴答或其他来衡量。它不依赖于单位。

概括一点

所有其他算法都是什么?如何测量算法的时间复杂度,让我吃一顿美餐?

如果你不能定义任何输入参数,那么我们回到简单的情况:恒定时间。如果有一些输入,则表示为字符串。所以你有一个字符串的长度。并且 - 类似于上面所说的 - 然后你有一个函数F,它将输入的长度(作为字符串)映射到A计算此输入所需的时间< / strong>(在最坏的情况下)。

我们称之为F 时间复杂度

这太简单了

是的,我知道。有平均情况和最好的情况,有大O符号和渐近复杂性。但是,我认为,为了解释原始问题中的大胆部分,这就足够了。