Может ли кто-нибудь дать мне пример ситуации, когда нужна структура данных Deque?
Примечание - Пожалуйста, не объясняйте, что такое deque
?
Может ли кто-нибудь дать мне пример ситуации, когда нужна структура данных Deque?
Примечание - Пожалуйста, не объясняйте, что такое deque
?
При моделировании любой линии ожидания реального мира: сущности (биты, люди, автомобили, слова, частицы и т.д.) поступают с определенной частотой до конца строки и обслуживаются с другой частотой в начале линия. Ожидая, что некоторые сущности могут решить покинуть линию.... и т.д. Дело в том, что вам нужен "быстрый доступ" для вставки/удаления на обоих концах строки, следовательно, для deque.
A Deque - это двойная очередь, позволяющая вставлять и удалять с обоих концов.
В реальном сценарии мы можем привязать его к линии покупки билетов, он работает как очередь, но некоторое время. Иногда бывает, что кто-то купил билет и внезапно вернулся, чтобы спросить что-то впереди очереди. В этом случае, поскольку они уже приобрели билет, у них есть привилегия приходить и запрашивать дальнейший запрос. Таким образом, в таком сценарии нам нужна структура данных, в которой согласно требованию мы добавляем данные с фронта. И в том же сценарии пользователь также может оставить очередь сзади.
Таким образом, это полностью соответствует структуре данных Deque.
Одним из примеров, где можно использовать deque, является алгоритм планирования заданий A-Steal. Этот алгоритм реализует планирование задач для нескольких процессоров. Для каждого процессора поддерживается отдельный деб с потоками, которые должны выполняться. Чтобы выполнить следующий поток, процессор получает первый элемент из deque (используя операцию "удалить первый элемент" deque). Если текущие вилки резьбы, они возвращаются к передней части deque ( "элемент вставки спереди" ), и выполняется новый поток. Когда один из процессоров заканчивает выполнение собственных потоков (т.е. Его дека пуст), он может "украсть" поток из другого процессора: он получает последний элемент из deque другого процессора ( "удаляет последний элемент" ) и выполняет он.
http://en.wikipedia.org/wiki/Deque говорит, что есть алгоритмы планирования заданий, которые используют deques. На немецкой странице wikipedia (http://de.wikipedia.org/wiki/Deque) упоминаются алгоритмы сопоставления образцов и реализация недетерминированных машин конечного состояния в качестве вариантов использования для deques.
"Очередь" может быть реализована с использованием одной из двух структур данных
Как правило, deque полезен для очередности очередности, сканирование очереди происходит значительно быстрее с помощью deque, чем связанного списка.
Deque может моделировать железнодорожную станцию, где автомобили могут въезжать и уходить с левой или правой стороны линии, но только автомобили на концах могут двигаться и выходить. Это связано с тем, что автомобили внутри не могут попасть в автомобили снаружи, чтобы уйти, поэтому им просто нужно подождать.
Существует пример практического использования при цепочке итераторов. Я использовал его для реализации расширяемого итератора:
import java.util.Deque;
import java.util.Iterator;
import java.util.concurrent.ConcurrentLinkedDeque;
public class ExtendableIterator<T> implements Iterator<T> {
public Deque<Iterator<T>> its = new ConcurrentLinkedDeque<Iterator<T>>();
public ExtendableIterator() {
}
public ExtendableIterator(Iterator<T> it) {
this();
this.extend(it);
}
@Override
public boolean hasNext() {
// this is true since we never hold empty iterators
return !its.isEmpty() && its.peekLast().hasNext();
}
@Override
public T next() {
T next = its.peekFirst().next();
if (!its.peekFirst().hasNext()) {
its.removeFirst();
}
return next;
}
public void extend(Iterator<T> it) {
if (it.hasNext()) {
its.addLast(it);
}
}
}