Disons que j'ai quelques Python, my_list
qui contient N éléments. Les éléments individuels peuvent être indexés en utilisant my_list[i_1]
, où i_1
est l'indice de l'élément souhaité. Cependant, Python peuvent également être indexées my_list[i_1:i_2]
où une "tranche" de la liste de i_1
à i_2
est désiré. Quelle est la notation Big-O (pire cas) pour découper une liste de taille N?
Personnellement, si je codais le "slicer", je répéterais de i_1
à i_2
, générer une nouvelle liste et la renvoyer, impliquant O (N), est-ce ainsi Python fait-il?
Merci,
Obtenir une tranche est O (i_2 - i_1
). En effet, la représentation interne d'une liste par Python est un tableau, vous pouvez donc commencer à i_1
et itérer sur i_2
.
Pour plus d'informations, consultez le Python entrée wiki de complexité temporelle
Vous pouvez également consulter l'implémentation dans le source CPython si vous le souhaitez.
selon http://wiki.python.org/moin/TimeComplexity
c'est O(k) où k est la taille de la tranche
Pour une liste de taille N et une tranche de taille M, l'itération n'est en fait que O (M), pas O (N). Puisque M est souvent << N, cela fait une grande différence.
En fait, si vous pensez à votre explication, vous pouvez voir pourquoi. Vous ne faites qu'itérer de i_1 à i_2, pas de 0 à i_1, puis de I_1 à i_2.