如果我成功分配了1,000,000,000个成员的数组,我如何以1的Theta中的索引999,999,999访问成员? 根据数组属性,每个成员的访问权应该是Theta为1.但是,是否有某种内部循环计算索引直到它到达所需成员?如果有,那不应该是n?的Theta
答案 0 :(得分:1)
不,没有内部循环。数组是随机访问,意味着任何元素都可以在Θ(1)时间内访问。所有计算机必须做的是获取数组的起始地址,向所需元素添加偏移量,并在计算的地址处查找值。
实际上,你不太可能拥有一个拥有十亿个元素的数组。阵列不太适合这种大型数据集,因为它们的大小只有几千兆字节或更多。通常采用更复杂的数据结构和/或算法。例如,一个天真的程序可能会将2GB的文件读入2GB的字节数组,而更聪明的程序会以小块的形式读取它,例如每次4KB。
答案 1 :(得分:1)
实际上只在(1)的θ中。当你宣布arr=int[100000000]
时
arr var将存储内存分配的第一个地址。
执行arr[n]
时它*(arr+n)
直接将n添加到起始地址并直接访问数组。
数组总是仅以序列方式存储。
欲了解更多信息,请阅读https://www.ics.uci.edu/~dan/class/165/notes/memory.html
如果需要,请在评论中提供更多资源。