first commit
This commit is contained in:
47
20211230192608-list_vs_deque.org
Normal file
47
20211230192608-list_vs_deque.org
Normal file
@@ -0,0 +1,47 @@
|
||||
:PROPERTIES:
|
||||
:ID: cb3c63b9-6452-4016-9b2f-a25784941d5d
|
||||
:mtime: 20211230202924
|
||||
:ctime: 20211230192608
|
||||
:END:
|
||||
#+title: List vs deque
|
||||
#+filetags: :Optimisation:Python:
|
||||
|
||||
* /Deque/
|
||||
Classe du module /collections/ écrite afin de réaliser une queue plus efficace que la /list/.
|
||||
|
||||
Caractéristiques principales :
|
||||
* Ecrite en C (.cf [[https://github.com/python/cpython/blob/main/Modules/_collectionsmodule.c][Github)]],
|
||||
* Liste doublement chainée et avec une double queue (contrairement à /list/ ayant une simple queue, à droite),
|
||||
* Peut contenir des objets de types différents,
|
||||
* Les méthodes /pop/, /append/, /appendleft/ et /popleft/ sont /thread-safe/,
|
||||
* Object mutable,
|
||||
* Supporte les /membership operations/ (opérateur /in/),
|
||||
* Supporte l'indexation (par exemple, d[2]),
|
||||
* Supporte les fonctions fonctionnant avec les /sequences/ et /iterables/ (par exemple, /len()/, /sorted()/),
|
||||
* Supporte l'itération et l'itération inversée,
|
||||
* Supporte le /picking/ (/pickle/),
|
||||
* Ne supporte pas le /slicing/ (par exemple, d[0:2]) et le rangement (/sorting/) /in-place/ (par exemple: //[3, 1, 2].sort()//),
|
||||
|
||||
Illustration de la liste doublement chainées (/deque/) :
|
||||
#+DOWNLOADED: https://res.cloudinary.com/practicaldev/image/fetch/s--qPBdx2qm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8oq2m41oivizbdltb6p9.png @ 2021-12-30 19:50:53
|
||||
#+ATTR_ORG: :width 500
|
||||
[[file:Deque/8oq2m41oivizbdltb6p9_2021-12-30_19-50-53.png]]
|
||||
|
||||
Figure illustrant l'intérêt d'une chaine doublement chainée afin de réaliser une /queue/:
|
||||
#+DOWNLOADED: https://res.cloudinary.com/practicaldev/image/fetch/s--lB01CsB4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ygqm1fk0kmm6waj0wvgi.png @ 2021-12-30 19:54:42
|
||||
#+ATTR_ORG: :width 500
|
||||
[[file:Deque/ygqm1fk0kmm6waj0wvgi_2021-12-30_19-54-42.png]]
|
||||
|
||||
* /Deque/ vs /list/
|
||||
Based on Big-O notation:
|
||||
| | Deque | List |
|
||||
| Access by an index | O(n) | O(1) |
|
||||
| Append/pop at the beginning | O(1) | O(n) |
|
||||
| Append/pop at the end | O(1) | O(1) + reallocation time |
|
||||
| Insert in the middle | O(n) | O(n) |
|
||||
|
||||
La /deque/ est plus performante que la /list/, hormis pour l'accès par index.
|
||||
|
||||
* Références
|
||||
* [[https://realpython.com/python-deque/][RealPython]]
|
||||
* [[https://dev.to/v_it_aly/python-deque-vs-listwh-25i9][Python deque vs list (Vitaly Shchurov)]]
|
Reference in New Issue
Block a user