Algorithm 精确的输入大小和时间复杂度

Algorithm 精确的输入大小和时间复杂度,algorithm,input,complexity-theory,time-complexity,computation-theory,Algorithm,Input,Complexity Theory,Time Complexity,Computation Theory,当谈到时间复杂度时,我们通常使用n作为输入,这不是实际输入大小的精确度量。我很难证明,当为输入s使用特定大小时,算法仍然处于相同的复杂度类别中 例如,以一个简单的顺序搜索算法为例。在最坏的情况下,这需要时间。如果我们在基数2中应用特定的输入大小,顺序应该是Wlg L,其中L是最大的整数 我如何证明顺序搜索或任何算法保持相同的复杂性类别,在这种情况下是线性时间?我知道需要进行某种替代,但我不确定如何得出结论 编辑 我想我可能已经找到了我想要的东西,但我不能完全确定 如果将最坏情况下的时间复杂度定义

当谈到时间复杂度时,我们通常使用n作为输入,这不是实际输入大小的精确度量。我很难证明,当为输入s使用特定大小时,算法仍然处于相同的复杂度类别中

例如,以一个简单的顺序搜索算法为例。在最坏的情况下,这需要时间。如果我们在基数2中应用特定的输入大小,顺序应该是Wlg L,其中L是最大的整数

我如何证明顺序搜索或任何算法保持相同的复杂性类别,在这种情况下是线性时间?我知道需要进行某种替代,但我不确定如何得出结论

编辑

我想我可能已经找到了我想要的东西,但我不能完全确定

如果将最坏情况下的时间复杂度定义为Ws,输入大小为s的算法执行的最大步数,则根据输入大小的定义,s=lg n,其中n是输入。然后,n=2^s,得出时间复杂度为W2^s的结论,即指数复杂度。因此,二进制编码算法的性能是指数的,而不是数量级上的线性

当谈到时间复杂度时,我们通常使用n作为输入,这不是实际输入大小的精确度量。我很难证明,当为输入s使用特定大小时,算法仍然处于相同的复杂度类别中

例如,以一个简单的顺序搜索算法为例。在最坏的情况下,这需要时间。如果我们在基数2中应用特定的输入大小,顺序应该是Wlg L,其中L是最大的整数

L是表示最大整数的变量。 n是表示输入大小的变量。 L和n都不是一个特定的值

当您应用一个特定的值时,您不再讨论复杂类,而是讨论该类的实例

假设您正在搜索一个包含500个整数的列表。换句话说,n=500

顺序搜索的最坏情况复杂性类别为On

复杂度为n

最坏情况复杂性的具体实例为500

编辑:

您的值在编码每个值所需的位数上是统一的。如果输入是32位整数的列表,则c=32,即每个整数的位数。复杂度为32*n=>On

对于L,如果L是最大值,lg L是编码L所需的位数,那么lg L是常数c。以位表示的复杂度为On=c*n,其中c=lg L是恒定的特定输入大小

当谈到时间复杂度时,我们通常使用n作为输入,这不是实际输入大小的精确度量。我很难证明,当为输入s使用特定大小时,算法仍然处于相同的复杂度类别中

例如,以一个简单的顺序搜索算法为例。在最坏的情况下,这需要时间。如果我们在基数2中应用特定的输入大小,顺序应该是Wlg L,其中L是最大的整数

L是表示最大整数的变量。 n是表示输入大小的变量。 L和n都不是一个特定的值

当您应用一个特定的值时,您不再讨论复杂类,而是讨论该类的实例

假设您正在搜索一个包含500个整数的列表。换句话说,n=500

顺序搜索的最坏情况复杂性类别为On

复杂度为n

最坏情况复杂性的具体实例为500

编辑:

您的值在编码每个值所需的位数上是统一的。如果输入是32位整数的列表,则c=32,即每个整数的位数。复杂度为32*n=>On

对于L,如果L是最大值,lg L是编码L所需的位数,那么lg L是常数c。以位表示的复杂度为On=c*n,其中c=lg L是恒定的特定输入大小。

正如Lucia Moura所述:除了一元编码,所有其他自然编码 数字的长度是多项式相关的

是源头。看看第19页。

正如Lucia Moura所说:除了一元编码之外,所有其他编码都是自然的 数字的长度是多项式相关的

是源头。请看第19页

我所知道的是最大数量 通过顺序搜索完成的步骤数为, 显然,cn^2+nlg L.cn^2是 递增循环的步骤数 并进行分支

那根本不是真的。顺序搜索完成的最大步骤数是c*n,其中n是列表中的项目数,c是某个常数。那是最坏的情况。没有n^2分量或对数分量

例如,一个简单的顺序searc h将是:

for (int i = 0; i < NumItems; ++i)
{
    if (Items[i] == query)
        return i;
}
return -1;
使用该算法,如果搜索每个项目,则一半的搜索将需要少于NumItems/2的迭代,一半的搜索将需要NumItems/2或更多的迭代。如果您搜索的项目不在列表中,则需要NumItems迭代来确定该项目。最坏情况下的运行时间是NumItems迭代。平均情况是NumItems/2次迭代

实际执行的操作数是某个常数C乘以迭代次数。平均是C*numimes/2

我所知道的是最大数量 通过顺序搜索完成的步骤数为, 显然,cn^2+nlg L.cn^2是 递增循环的步骤数 并进行分支

那根本不是真的。顺序搜索完成的最大步骤数是c*n,其中n是列表中的项目数,c是某个常数。那是最坏的情况。没有n^2分量或对数分量

例如,简单的顺序搜索是:

for (int i = 0; i < NumItems; ++i)
{
    if (Items[i] == query)
        return i;
}
return -1;
使用该算法,如果搜索每个项目,则一半的搜索将需要少于NumItems/2的迭代,一半的搜索将需要NumItems/2或更多的迭代。如果您搜索的项目不在列表中,则需要NumItems迭代来确定该项目。最坏情况下的运行时间是NumItems迭代。平均情况是NumItems/2次迭代


实际执行的操作数是某个常数C乘以迭代次数。平均是C*NumItems/2。

我不是问具体的实例,我是问输入的精确大小。该算法的输入可能是500,但在计算机内部,东西是以二进制方式工作的。因此,500将是输入的大小,大小将是lg 500,编码500所需的位数。我不是问具体的例子,我是问精确的输入大小。该算法的输入可能是500,但在计算机内部,东西是以二进制方式工作的。因此,500将是输入的大小,大小将是lg 500,编码500所需的位数。我不明白这与证明算法的复杂性与输入的不同编码保持相同有什么关系。@Trevor:那么我和其他人似乎误解了你的问题。也许你应该想办法问得更清楚些。尽管如此,不管您使用的是什么基数,您关于步数与n^2有某种关系的断言都是不正确的。我不明白这与证明算法的复杂性与输入的不同编码保持相同有什么关系。@Trevor:那么,我和,其他人都误解了你的问题。也许你应该想办法问得更清楚些。尽管如此,不管您使用的是什么数字基,您关于步骤数与n^2有某种关系的断言是不正确的。因此,您的意思是On==Olog2n^2。那只是基础数学。我想…我现在只是糊涂了。我读的算法书实际上是错的。我的意思是O2^log2n,所以你的意思是On==Olog2n^2。那只是基础数学。我想…我现在只是糊涂了。我读的算法书实际上是错的。我是说O2^log2n。