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'])
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.
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.
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.
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])