A v Pythone

A v Pythone

Deque je skratka pre Double-Ended Queue. Ide o špeciálny typ dátovej štruktúry, ktorá umožňuje efektívne pridávať a odstraňovať prvky z oboch koncov.

Na rozdiel od bežných radov (ktoré zvyčajne nasledujú po prvom dnu, prvý von) deque podporuje operácie FIFO aj LIFO. Vďaka tomu je veľmi flexibilný a užitočný v aplikáciách v reálnom svete, ako sú problémy s plánovaním úloh s posuvnými oknami a spracovanie údajov v reálnom čase.

Príklad:

Python
   from   collections   import   deque   # Declaring deque    de   =   deque  ([  'name'    'age'    'DOB'  ])   print  (  de  )   

Výstup
deque(['name' 'age' 'DOB'])  
Preto

Prečo potrebujeme deque

  • Podporuje čas O(1) na pridávanie/odstraňovanie prvkov z oboch koncov.
  • Pre front-end operácie je to efektívnejšie ako zoznamy.
  • Môže fungovať ako front (FIFO) aj zásobník (LIFO).
  • Ideálne na plánovanie problémov s posuvnými oknami a spracovanie údajov v reálnom čase.
  • Ponúka výkonné vstavané metódy ako napr appendleft() popleft() a otočiť ().

Typy obmedzeného vstupu Deque

  • Obmedzený vstup Deque :  Vstup je obmedzený na jednom konci, zatiaľ čo odstránenie je povolené na oboch koncoch.
  • Obmedzený výstup Deque : výstup je obmedzený na jednom konci, ale vkladanie je povolené na oboch koncoch.

Operácie na deque 

Tu je tabuľka so zoznamom vstavaných operácií deque v Pythone s popismi a ich zodpovedajúcou časovou zložitosťou:

Prevádzka Popis Časová zložitosť
pripojiť (x) Pridáva x na pravý koniec deque. O(1)
appendleft(x) Pridáva x na ľavý koniec deque. O(1)
pop() Odstráni a vráti prvok z pravého konca deque. O(1)
popleft() Odstráni a vráti prvok z ľavého konca deque. O(1)
predĺžiť (opakovateľné) Pridá všetky prvky z iterable na pravý koniec deque. dobre)
predĺžiť vľavo (opakovateľné) Pridá všetky prvky z iterable na ľavý koniec deque (obrátené poradie). dobre)
odstrániť (hodnota) Odstráni prvý výskyt value z deque. Zvyšuje ValueError ak sa nenájde. O(n)
otočiť (n) Otočí deque n kroky doprava. Ak n je negatívny otáča sa doľava. dobre)
jasné() Odstráni všetky prvky z deque. O(n)
počet (hodnota) Počíta počet výskytov value v deque. O(n)
index (hodnota) Vráti index prvého výskytu value v deque. Zvyšuje ValueError ak sa nenájde. O(n)
obrátiť () Obráti prvky deque na mieste. O(n)

Pridávanie a odstraňovanie vyradených položiek

  • pripojiť (x): Pridáva x na pravý koniec deque.
  • appendleft(x): Pridá x na ľavý koniec deque.
  • rozšíriť (opakovateľné): Pridá všetky prvky z iterovateľného na pravý koniec.
  • predĺžiť vľavo (opakovateľné): Pridá všetky prvky z iterovateľného na ľavý koniec (v opačnom poradí).
  • odstrániť (hodnota): Odstráni prvý výskyt zadanej hodnoty z deque. Ak sa hodnota nenájde, vyvolá chybu ValueError.
  • pop(): Odstráni a vráti prvok z pravého konca.
  • popleft(): Odstráni a vráti prvok z ľavého konca.
  • jasné(): Odstráni všetky prvky z deque.
Python
   from   collections   import   deque   dq   =   deque  ([  10     20     30  ])   # Add elements to the right   dq  .  append  (  40  )   # Add elements to the left   dq  .  appendleft  (  5  )   # extend(iterable)   dq  .  extend  ([  50     60     70  ])   print  (  'After extend([50 60 70]):'     dq  )   # extendleft(iterable)   dq  .  extendleft  ([  0     5  ])   print  (  'After extendleft([0 5]):'     dq  )   # remove method   dq  .  remove  (  20  )   print  (  'After remove(20):'     dq  )   # Remove elements from the right   dq  .  pop  ()   # Remove elements from the left   dq  .  popleft  ()   print  (  'After pop and popleft:'     dq  )   # clear() - Removes all elements from the deque   dq  .  clear  ()   # deque: []   print  (  'After clear():'     dq  )   

výstup:

 After extend([50 60 70]): deque([5 10 20 30 40 50 60 70])   
After extendleft([0 5]): deque([5 0 5 10 20 30 40 50 60 70])
After remove(20): deque([5 0 5 10 30 40 50 60 70])
After pop and popleft: deque([0 5 10 30 40 50 60])
After clear(): deque([])

Prístup k položke a dĺžka deque

  • Indexovanie: Prístup k prvkom podľa pozície pomocou kladných alebo záporných indexov.
  • len(): Vráti počet prvkov v deque.
Python
   import   collections   dq   =   collections  .  deque  ([  1     2     3     3     4     2     4  ])   # Accessing elements by index   print  (  dq  [  0  ])   print  (  dq  [  -  1  ])   # Finding the length of the deque   print  (  len  (  dq  ))   

Výstup
1 4 7  

Count Rotation and Reverse of the deque

  • počet (hodnota): Táto metóda počíta počet výskytov konkrétneho prvku v deque.
  • otočiť (n): Táto metóda otáča deque o n krokov. Kladné n sa otáča doprava a záporné n sa otáča doľava.
  • spätne(): Táto metóda obráti poradie prvkov v deque.
Python
   from   collections   import   deque   # Create a deque   dq   =   deque  ([  10     20     30     40     50     20     30     20  ])   # 1. Counting occurrences of a value   print  (  dq  .  count  (  20  ))   # Occurrences of 20   print  (  dq  .  count  (  30  ))   # Occurrences of 30   # 2. Rotating the deque   dq  .  rotate  (  2  )   # Rotate the deque 2 steps to the right   print  (  dq  )   dq  .  rotate  (  -  3  )   # Rotate the deque 3 steps to the left   print  (  dq  )   # 3. Reversing the deque   dq  .  reverse  ()   # Reverse the deque   print  (  dq  )   

Výstup
3 2 deque([30 20 10 20 30 40 50 20]) deque([20 30 40 50 20 30 20 10]) deque([10 20 30 20 50 40 30 20])