一個非常基本的問題,我們如何能夠直接以O(1)的成本訪問第n個索引?當我們初始化一個數組時,是否爲保持每個索引的地址而構建了一些數據結構(稍後以o(1)成本訪問)?否則,它必須從數組的開頭遍歷到第n個索引。訪問o(1)中的數組元素的原因是什麼?在o(1)中訪問數組的第n個索引
-2
A
回答
-1
正如@Nullman在評論中所說的,並且至少在引用Python時,在O(1)中訪問list
。
0
索引爲O的陣列(1)是可能的,因爲計算訪問要在一個步驟中完成的數據。
這是如何做的很簡單,比如說你創建一個10個整數的數組。
int[] intArray = new int[10];
這裏發生的事情是,你所要求的內存塊大到足以容納10個整數(在Java中,他們是32位的,所以10個* 4字節)。
當內存被保留時,該塊開始處的內存地址被返回並放入intArray變量(包含地址/變量的變量被稱爲指針)。
爲了讓這個更容易理解,你可以將內存(RAM)作爲一個單字節塊的長列表,每個塊都有一個地址。
Data: [ 00000000 ] [ 11111111 ] [ 00001111 ]
Address: 7 8 9
當你使用索引來獲得訪問陣列的一部分,正在發生的事情是該指數用於calcuate你想在飛行塊的內存地址。
例如使用上述
char[] charArray = new char[3]; // This returns memory address 7
charArray[1] = 'b'; // Here the memory address is calcuated with the formula
// startAddress + index * Size Per Element
的例子。在這種情況下startAddress在charArray值,指數是每個元素數字1和大小是個體炭(1個字節)的大小,以便它使我們的8的存儲器地址
+0
'當內存被保留時,該塊開始處的內存地址被放回到intArray變量中(一個包含地址/變量的變量稱爲指針)。「需要引用這個。 – Amar
相關問題
- 1. 訪問O(1)
- 2. 如何在PHP中訪問數組中的第N個元素
- 3. Big O - O(N^2)or O(N^2 + 1)?
- 4. 對於數組,PHP的count()函數是O(1)還是O(n)?
- 5. 查找第n個fib數,在O(logn)
- 6. 在Simulink中訪問/索引數組
- 7. 在JavaScript中訪問索引數組
- 8. 跳過numpy數組的每個第n個索引
- 9. 訪問數組索引
- 10. jquery訪問數組索引
- 11. 從索引訪問數組
- 12. preg_match_all只返回索引爲0的第一個數組,而不是索引爲1的第一個數組
- 13. 獲取數組元素的索引比O(n)更快
- 14. 訪問另一個數組的一個數組的索引
- 15. 在索引0訪問數組正確返回,但在索引1+訪問會生成錯誤?
- 16. 在變量索引處訪問數組
- 17. 訪問第一個第N個正則表達式組
- 18. 在O(logn)O(logn)刪除和索引訪問的數據結構
- 19. Haskell:與O(1)追加和O(1)索引的Datastruture?
- 20. Ruby:ActiveRecord - 第N行的索引
- 21. 第n個字符串的索引
- 22. 包含n-2個整數的數組1到n,O(n)算法用O(1)額外空間查找缺少的2個數字?
- 23. 以O(1)時間可改進的數組訪問?
- 24. 第(N-2)和第(N-1)的第N個輸出總和
- 25. 循環訪問數組的索引
- 26. 在C中的O(N)中搜索T
- 27. IE 8選擇n + 1個索引
- 28. 如何識別VBA中多維數組中第n個最小值的索引?
- 29. 在0 ... N-1和第N個元素中拆分參數包
- 30. 如何另一個數組中訪問數組的索引在Objective-C
uhh,數組是在O(1)中訪問的結構。您正在考慮鏈接列表 – Nullman
通常,這是通過將數組存儲在連續內存中完成的。所以如果數組的起始地址是已知的,機器可以通過向起始地址添加適當的數量來找到任何進一步位置的地址。這就是爲什麼數組訪問是O(1)和(例如)鏈接列表訪問不是。 – khelwood
@khelwood'所以如果數組的開始地址是已知的'我們如何知道數組的起始地址?我們只給'A [4]'來訪問第四個元素。 – Amar