我有一个非常基本的问题。 在java(或者我认为对任何类似语言有效)中,元素从数组中检索的时间是多少。由于数组的大小及其元素类型是在编译时已知或在运行时计算的常量,我相信检索应该在恒定时间内发生,O(1)。例如,
int[] arr = new int[10];
虽然我不确定数组的内部存储器表示,但我认为像arr [3]这样的操作应该在从数组起始地址计算地址,元素类型的大小(这里是32)和索引传递后直接访问内存(这里3 )如下所示:
address of arr[3] = address of a[0] + 32 * 3.
感谢您的帮助。
答案 0 :(得分:0)
就像user3580294说它应该是O(1)因为你给它想要在数组中查找的确切位置而不是迭代当然是O(n)。
答案 1 :(得分:0)
这是Memory vs Computation power的经典案例:
对于Java:
只要数组大小足够小并存储在JVM堆上,它就是常量时间。
否则它将取决于使用concurrency fork join / parallel programming实现大型数据集等因素。
另外值得一看的是内存分配器如何适用于相关语言的时间成本in process再次提升对象大小是最重要的参与者。
答案 2 :(得分:0)
是的O(1)。更准确地说:O(k*1)) where k -- >some machine dependent constant