І на Python

І на Python

Deque розшифровується як Double-Ended Queue. Це особливий тип структури даних, який дозволяє ефективно додавати та видаляти елементи з обох кінців.

На відміну від звичайних черг (які зазвичай слідують за схемою «Першим прийшов, першим вийшов»), двостороння чергу підтримує операції як FIFO, так і LIFO. Це робить його дуже гнучким і корисним у реальних програмах, таких як проблеми з розсувним вікном планування завдань і обробка даних у реальному часі.

приклад:

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

Вихід
deque(['name' 'age' 'DOB'])  
тому

Навіщо нам потрібна deque

  • Він підтримує час O(1) для додавання/видалення елементів з обох кінців.
  • Це ефективніше, ніж списки для зовнішніх операцій.
  • Він може працювати і як черга (FIFO), і як стек (LIFO).
  • Ідеально підходить для планування проблем із ковзним вікном і обробки даних у реальному часі.
  • Він пропонує потужні вбудовані методи, наприклад appendleft() popleft() і rotate().

Типи обмеженого введення Deque

  • Deque з обмеженим введенням :  Введення обмежено з одного боку, а видалення дозволено з обох кінців.
  • Обмеження виведення Deque : вихід обмежений на одному кінці, але вставлення дозволено на обох кінцях.

Операції над deque 

Ось таблиця зі списком вбудованих операцій deque в Python з описами та їх відповідними часовими складностями:

Операція опис Часова складність
додати (x) Додає x до правого кінця дека. О(1)
appendleft(x) Додає x до лівого кінця дека. О(1)
поп() Видаляє та повертає елемент із правого кінця ряду. О(1)
popleft() Видаляє та повертає елемент із лівого кінця двох рядів. О(1)
розширити (ітерований) Додає всі елементи з iterable до правого кінця дека. добре)
extendleft (ітераційний) Додає всі елементи з iterable до лівого кінця дека (у зворотному порядку). добре)
видалити (значення) Видаляє перше входження value від дек. Піднімає ValueError якщо не знайдено. O(n)
обертати (n) Обертає деку n кроки вправо. Якщо n від'ємне обертається вліво. добре)
очистити() Видаляє всі елементи з deque. O(n)
кількість (значення) Підраховує кількість випадків value в деке. O(n)
індекс (значення) Повертає індекс першого входження value в деке. Піднімає ValueError якщо не знайдено. O(n)
зворотний() Перевертає елементи дека на місце. O(n)

Додавання та видалення елементів із черги

  • додати (x): Додає x у правий кінець двох рядків.
  • appendleft(x): Додає x до лівого кінця двох рядів.
  • розширити (ітерований): Додає всі елементи від iterable до правого кінця.
  • extendleft (ітераційний): Додає всі елементи від iterable до лівого кінця (у зворотному порядку).
  • видалити (значення): Видаляє перше входження вказаного значення з другої черги. Якщо значення не знайдено, виникає помилка ValueError.
  • поп(): Видаляє та повертає елемент з правого кінця.
  • popleft(): Видаляє та повертає елемент з лівого кінця.
  • очистити(): Видаляє всі елементи з 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  )   

Вихід:

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

Доступ до елемента та довжина чергової черговості

  • Індексація: Доступ до елементів за позицією за додатними або від’ємними індексами.
  • тільки(): Повертає кількість елементів у двох рядках.
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  ))   

Вихід
1 4 7  

Підрахунок ротації та розвороту двійки

  • кількість (значення): Цей метод підраховує кількість входжень певного елемента в дві чергу.
  • обертати (n): Цей метод обертає двічі на n кроків. Додатне n обертається вправо, а від’ємне n – ліворуч.
  • зворотний(): Цей метод змінює порядок елементів у двох рядках.
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  )   

Вихід
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])