Ja Pythonissa

Ja Pythonissa

Deque tarkoittaa kaksipäistä jonoa. Se on erityinen tietorakenne, jonka avulla voit lisätä ja poistaa elementtejä molemmista päistä tehokkaasti.

Toisin kuin tavalliset jonot (jotka yleensä seuraavat First In First Out -toimintoa) deque tukee sekä FIFO- että LIFO-toimintoja. Tämä tekee siitä erittäin joustavan ja hyödyllisen reaalimaailman sovelluksissa, kuten tehtävien ajoituksen liukuvan ikkunan ongelmissa ja reaaliaikaisessa tietojenkäsittelyssä.

Esimerkki:

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

Lähtö
deque(['name' 'age' 'DOB'])  
Siksi

Miksi tarvitsemme deque

  • Se tukee O(1)-aikaa elementtien lisäämiseen/poistamiseen molemmista päistä.
  • Se on tehokkaampi kuin käyttöliittymätoimintojen luettelot.
  • Se voi toimia sekä jonona (FIFO) että pinona (LIFO).
  • Ihanteellinen liukuikkunoiden ongelmien ajoittamiseen ja reaaliaikaiseen tietojenkäsittelyyn.
  • Se tarjoaa tehokkaita sisäänrakennettuja menetelmiä, kuten appendleft() popleft() ja kiertää().

Rajoitettujen deque-tulojen tyypit

  • Input Restricted Deque :  Syöte on rajoitettu toisessa päässä, kun taas poistaminen on sallittu molemmissa päissä.
  • Lähtörajoitettu deque : lähtö on rajoitettu toisessa päässä, mutta lisäys on sallittu molemmissa päissä.

Leikkaukset dequessa 

Tässä on taulukko, jossa luetellaan Pythonin dequen sisäänrakennetut toiminnot kuvauksineen ja niitä vastaavat aikamonimutkaisuudet:

Toiminta Kuvaus Aika monimutkaisuus
liitä (x) Lisää x dequen oikeaan päähän. O(1)
liite vasen (x) Lisää x dequen vasempaan päähän. O(1)
pop() Poistaa ja palauttaa elementin dequen oikeasta päästä. O(1)
popleft() Poistaa ja palauttaa elementin dequen vasemmasta päästä. O(1)
laajentaa (iteroitavissa) Lisää kaikki elementit kohteesta iterable dequen oikeaan päähän. O(k)
pidennetty vasen (iteroitava) Lisää kaikki elementit kohteesta iterable dequen vasempaan päähän (käänteinen järjestys). O(k)
poista (arvo) Poistaa ensimmäisen esiintymän value dequesta. Nostaa ValueError jos ei löydy. O(n)
pyöritä (n) Pyörittää deque n askeleet oikealle. Jos n on negatiivinen pyörii vasemmalle. O(k)
selvä () Poistaa kaikki elementit dequesta. O(n)
määrä (arvo) Laskee tapahtumien määrän value dequessa. O(n)
indeksi(arvo) Palauttaa ensimmäisen esiintymän indeksin value dequessa. Nostaa ValueError jos ei löydy. O(n)
käänteinen () Kääntää dequen elementit paikoilleen. O(n)

Jonon kohteiden lisääminen ja poistaminen

  • liitä (x): Lisää x:n dequen oikeaan päähän.
  • liite vasen (x): Lisää x:n dequen vasempaan päähän.
  • laajenna (iteroitavissa): Lisää kaikki elementit iteroitavasta oikeaan loppuun.
  • jatke vasemmalle (iteroitava): Lisää kaikki elementit iteroitavasta vasempaan loppuun (käänteisessä järjestyksessä).
  • poista(arvo): Poistaa määritetyn arvon ensimmäisen esiintymän deque-tiedostosta. Jos arvoa ei löydy, se aiheuttaa ValueError-ilmoituksen.
  • pop(): Poistaa ja palauttaa elementin oikeasta päästä.
  • popleft(): Poistaa ja palauttaa elementin vasemmasta päästä.
  • selvä(): Poistaa kaikki elementit dequesta.
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  )   

Lähtö:

 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([])

Kohteen käyttö ja dequen pituus

  • Indeksointi: Käytä elementtejä sijainnin mukaan käyttämällä positiivisia tai negatiivisia indeksejä.
  • vain(): Palauttaa dequen elementtien määrän.
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  ))   

Lähtö
1 4 7  

Laskun kierto ja dequen kääntäminen

  • count(arvo): Tämä menetelmä laskee tietyn elementin esiintymisten määrän dequessa.
  • pyöritä(n): Tämä menetelmä kiertää laskua n askelta. Positiivinen n pyörii oikealle ja negatiivinen n vasemmalle.
  • käänteinen(): Tämä menetelmä kääntää deque-elementtien järjestyksen.
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  )   

Lähtö
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])