通常阅读的内容我都记得这个问题。 如果我有一个如下所示的字符数组初始化,那么这个语句的时间复杂度是多少?
char array[] = {'a','b','c','d','e'};
它实际上会执行5次分配每个变量吗?就像我们在循环中一样。如果假设是真的,为什么会这样呢?
答案 0 :(得分:3)
取决于声明发生的位置和编译器的智能,它可以是O(1)或O(n)。有些情况:
答案 1 :(得分:1)
是O(N)。它可能是一个快速或有效的O(N)。如果它是一个静态分配的数组,初始化只会执行一次。
但无论如何,这是O(N)。
请注意,即使它是一个放在程序二进制映像中的数组(因为编译器确定数组永远不会被修改),它仍然是一个O(N)操作来初始化它,即使初始化可能发生在程序事件到达main()
之前或作为程序图像加载的一部分完成。
它是O(N),因为无论初始化必须写入数组的每个位置,所以一个100倍于另一个的数组将执行大约100倍的操作来完成初始化。
答案 2 :(得分:0)
正如其他人所说,它可以在O(n)时间内完成。
但它永远不会是O(1)!! 如何在更短的时间内写入n个内存位置(我们拥有的任何类型的内存)? O(1)表示操作不依赖于输入的大小。我不想把图灵机带到讨论中,但是在运行期间的某个地方总会有上述语句的O(n)操作。
答案 3 :(得分:0)
时间复杂度将简单为0.不是O或o(n)。 在程序运行之前,将使用起始值设置数组的位置。地点和数值将在编制阶段准备,并在链接阶段设置。
没有用于实现所述线路的命令。没有时间。