非常に基本的な質問で、O(1)コストでn番目のインデックスに直接アクセスする方法は?配列を初期化するとき、各索引のアドレスを保持するためのデータ構造が構築されていますか(後でo(1)コストにアクセスするには)?さもなければ配列の最初のインデックスからn番目のインデックスまで移動しなければなりません。 o(1)で配列要素にアクセスする理由は何ですか?o(1)の配列のn番目のインデックスへのアクセス
答えて
@Nullmanがコメントで述べたように、少なくともPythonを参照するときは、list
はO(1)でアクセスされます。
出典:必要なデータにアクセスするための計算は、1つのステップで行われるため、https://wiki.python.org/moin/TimeComplexity
はOで配列のインデックス作成は、(1)が可能です。
これは非常に簡単です。たとえば、10個の整数の配列を作成するとします。
int[] intArray = new int[10];
は何ここで起こっていることは、あなたが(Javaでは、彼らは32ビットなので、10 * 4バイトの長さである)10個の整数を格納するのに十分な大きさのメモリのブロックを求めているということです。
メモリが予約されると、このブロックの先頭のメモリアドレスが返され、intArray変数に格納されます(アドレス/参照を含む変数はポインタと呼ばれます)。
これを分かりやすくするために、それぞれがアドレスを持つ1バイトブロックの長いリストとしてピクチャメモリ(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
上記の例を使用して、開始アドレスがcharArrayの値であり、インデックスは要素ごと番号1およびサイズである個別CHAR(1バイト)のサイズであるので、それは私達に8のメモリアドレスを与えます
'メモリが予約されると、このブロックの先頭のメモリアドレスが返され、intArray変数に格納されます(アドレス/参照を含む変数はポインタと呼ばれます)。 – Amar
- 1. Bash:ファイルのn番目の行のテキストをn番目のインデックスの配列に置き換えます。
- 2. 配列のn番目のオブジェクトへの値のバインド
- 3. 配列の1番目、2番目、最後のインデックスを削除するには?
- 4. 配列インデックスへのアクセス0、
- 5. Scalaのn番目のパターンマッチのインデックス
- 6. CSSテーブル:n番目の子は、(1)TD:n番目の子(1)
- 7. Espress - 線形レイアウトのn番目の子要素へのアクセス
- 8. O(N)速度とO(1)メモリのハミング番号
- 9. O(n)からO(1)へのdeque移動の改善
- 10. C配列インデックスへのアクセス時のセグメンテーションフォールト
- 11. 配列の1番目と2番目の要素を取得
- 12. 別の配列の1つの配列のインデックスにアクセスする
- 13. O(1)、O(n log n)、O(log n)の複雑さを持つアルゴリズムの例
- 14. 配列のオブジェクト内の項目にインデックス番号でアクセスする方法は?
- 15. CakePHPの3 - モデル - 配列の3番目の層からのデータへのアクセス
- 16. Pythonでn番目(n-1)番目の項を取る方法は?
- 17. for-loop in R、n番目とn番目の+ 1を置き換えます。
- 18. なぜ配列挿入の時間複雑さはO(n)で、O(n + 1)ではないのですか?
- 19. 配列内のn番目のアイテムを取得
- 20. juliaの配列からn番目の要素を選択
- 21. (1/2)^ nのBig Oクラス
- 22. Pythonの2番目の配列インデックス値に基づく1つの配列の分離
- 23. n番目の項目
- 24. n番目の子
- 25. BASHスクリプト:インデックスが変数の場合、$ @のn番目のパラメータ?
- 26. 配列インデックスが2番目のテストケースの例外
- 27. PHP配列を持つn番目の子
- 28. javascriptで配列のn番目の項目を除外する方法は?
- 29. ペアの動的サイズ配列:1番目と2番目の設定値
- 30. アソシエイティブインデックスと番号付きインデックスを使用した配列要素へのアクセス
uhh、配列はO(1)でアクセスする構造体です。リンクされたリストを考えています – Nullman
これは通常、配列を連続したメモリに格納することによって行われます。したがって、配列の開始アドレスが分かっている場合、マシンは開始アドレスに適切な量を追加することによって、それ以上の位置のアドレスを見つけることができます。そのため、配列アクセスはO(1)であり、(たとえば)リンクリストアクセスはそうではありません。 – khelwood
@khelwood '配列の開始アドレスがわかっているなら'配列の開始アドレスはどうやって知っていますか? 4番目の要素にアクセスするために 'A [4] 'を与えます。 – Amar