Time complexity 将辅助数组初始化为0是否已算作n时间复杂度?

Time complexity 将辅助数组初始化为0是否已算作n时间复杂度?,time-complexity,big-o,Time Complexity,Big O,对于大O复杂度非常陌生,我想知道一个算法,如果你有一个给定的数组,并且你初始化了一个辅助数组,索引的数量已经和n时间一样,或者你只是假设这是O1,还是什么都没有?TL;博士:别理它 详细回答:这将取决于算法的其余部分以及您想要实现的目标。通常,您会在之后对数组执行一些有用的操作,这些操作的时间复杂度至少与填充数组的时间复杂度相同,因此数组填充不会增加时间复杂度。此外,用0填充数组感觉就像初始化数组一样,因此实际算法可以正常工作。但是有些情况下你可以考虑。 请注意,我在下面的示例中使用了伪代码,我

对于大O复杂度非常陌生,我想知道一个算法,如果你有一个给定的数组,并且你初始化了一个辅助数组,索引的数量已经和n时间一样,或者你只是假设这是O1,还是什么都没有?

TL;博士:别理它

详细回答:这将取决于算法的其余部分以及您想要实现的目标。通常,您会在之后对数组执行一些有用的操作,这些操作的时间复杂度至少与填充数组的时间复杂度相同,因此数组填充不会增加时间复杂度。此外,用0填充数组感觉就像初始化数组一样,因此实际算法可以正常工作。但是有些情况下你可以考虑。

请注意,我在下面的示例中使用了伪代码,我希望能够清楚地知道该算法应该做什么。还要注意的是,所有的示例都没有对数组做任何有用的事情。这只是为了表明我的观点

假设您有以下代码:

A = Array[n]
for(i=0, i<n, i++)
    A[i] = 0
print "Hello World"
然后,即使考虑到填充数组的复杂性,也会以^2+2n上的复杂性结束,该复杂性等于^2上的类,因此在本例中这并不重要

最有趣的情况当然是当您有不同的选项用作基本操作时。假设我们有以下代码someFunction是一个任意函数:

A = Array[n*n]
for(i=0, i<n*n, i++)
    A[i] = 0
for(i=0, i*i<n, i++)
    someFunction(i)
现在它取决于您选择什么作为基本操作。你选择哪一个在很大程度上取决于你想要实现什么。假设someFunction在时间复杂度方面是一个非常便宜的函数,访问数组a的成本更高。然后您可能会在^2上继续,因为访问数组的次数是n^2次。另一方面,如果与填充数组相比,某个函数的开销更大,那么您可能会选择它作为基本操作,并使用Osqrtn

请注意,我们还可以得出结论,因为第一部分数组填充比另一部分someFunction执行得更频繁,所以哪一个操作需要更长的时间来完成并不重要,因为在某些时候数组填充需要更长的时间。因此,你可能会争辩说,复杂性必须是^2上的二次型。从理论上看,这可能是正确的。但在现实生活中,你通常会做一个你想数数的手术,而不关心其他的手术


实际上,您可以考虑忽略数组填充,以及在上面提供的所有示例中考虑到这一点,这取决于打印或访问数组是否更昂贵。但我希望在前两个示例中,很明显哪一个将添加更多的运行时,因此应将其视为基本操作。

如何将其初始化为0?共享您的代码。我的意思是为每个索引共享您的代码初始化一个大小为n到0的数组。
A = Array[n*n]
for(i=0, i<n*n, i++)
    A[i] = 0
for(i=0, i*i<n, i++)
    someFunction(i)