Pythonリスト、my_list
にN個の要素が含まれているとします。単一の要素はmy_list[i_1]
を使用してインデックス付けできます。ここで、i_1
はインデックスのインデックスですただし、Pythonリストはmy_list[i_1:i_2]
にインデックスを付けることができます。ここで、i_1
からi_2
までのリストの「スライス」が望ましいです。サイズNのリストをスライスするBig-O(最悪の場合)表記?
個人的には、「スライサー」をコーディングしている場合、i_1
からi_2
まで反復し、新しいリストを生成してそれを返し、O(N)を示唆して、これはPythonそうですか?
ありがとうございました、
スライスの取得はO(i_2 - i_1
)です。これは、Pythonのリストの内部表現が配列であるため、i_1
から開始してi_2
まで繰り返すことができるためです。
詳細については、Python time complex wiki entry を参照してください。
必要に応じて、実装を CPythonソース で確認することもできます。
http://wiki.python.org/moin/TimeComplexity によると
O(k)ここで、kはスライスサイズです。
サイズNのリストとサイズMのスライスの場合、反復は実際にはO(M)のみであり、O(N)ではありません。 Mは<< Nであることが多いため、これは大きな違いをもたらします。
実際、あなたの説明を考えれば、その理由がわかります。 i_1からi_2まで反復しているだけで、0からi_1まで、次にI_1からi_2まで反復していない。