为什么数组元素引用恒定时间操作?

问题描述 投票:0回答:1

让我简要解释一下我认为数组元素引用是如何工作的。

数组起始地址+数据类型大小*要取出的元素索引=所需数组元素的地址

基本上,当写入 b[i] 时执行上述操作(其中 b 是一个数组,i 是所需元素的索引)。此操作应该是“恒定时间操作”。然而,我认为不然。考虑以下示例,

示例1

579015713945(起始地址)+ 16(数据类型大小)* 2789280(所需元素的索引)=所需元素的地址。

示例2

579015713945(起始地址)+ 16(数据类型大小)* 1(所需元素的索引)=所需元素的地址。

示例3

100(起始地址)+ 8(数据类型大小)* 1(所需元素的索引)= 所需元素的地址。

机器是否无法比示例 1 更快地计算示例 2 和 3?那么,当需要的时间量不同时,该操作如何成为

恒定

时间操作? 我在colab上计算了示例1和示例3的值,计算时间都是0秒(哈哈)。具体数字在这里并不重要。我可以将数字设置得更大,以使示例 1 和示例 3 之间的执行时间差异更大。那么示例 1 可能需要 1 秒,示例 3 可能需要 0.1 秒。无论如何,我想我已经能够表达我的一般性问题了。

arrays computer-science complexity-theory theory
1个回答
0
投票

与线性时间相比,对于某些 m 和 k 值,所用时间的上限可以表示为 mn + k,其中 n 是输入的大小。

请注意,程序以恒定时间运行并不意味着任何输入数据都会花费相同的时间。

这是对类似问题的原始且更完整的答案

© www.soinside.com 2019 - 2024. All rights reserved.