Data structures 为什么在现实世界中我们需要Deque数据结构?
有人能给我举一个需要数据结构的例子吗 注意-请不要解释什么是Data structures 为什么在现实世界中我们需要Deque数据结构?,data-structures,deque,Data Structures,Deque,有人能给我举一个需要数据结构的例子吗 注意-请不要解释什么是deque?说有使用deque的作业调度算法。德语维基百科页面(http://de.wikipedia.org/wiki/Deque)提到模式匹配算法和非确定性有限状态机的实现作为DEQUE的用例。 一个可以使用deque的例子是a-Steal作业调度算法。该算法实现了多处理器的任务调度。为每个处理器维护一个单独的deque,其中包含要执行的线程。为了执行下一个线程,处理器从deque中获取第一个元素(使用“RemoveFirstEle
deque
?说有使用deque的作业调度算法。德语维基百科页面(http://de.wikipedia.org/wiki/Deque)提到模式匹配算法和非确定性有限状态机的实现作为DEQUE的用例。
一个可以使用deque的例子是a-Steal作业调度算法。该算法实现了多处理器的任务调度。为每个处理器维护一个单独的deque,其中包含要执行的线程。为了执行下一个线程,处理器从deque中获取第一个元素(使用“RemoveFirstElement”deque操作)。如果当前线程分叉,则将其放回deque的前面(“前面插入元素”),并执行一个新线程。当其中一个处理器完成其自身线程的执行(即其deque为空)时,它可以从另一个处理器“窃取”线程:它从另一个处理器的deque获取最后一个元素(“删除最后一个元素”)并执行它
在最近的一篇文章中,Richter描述了.NET4.0中对ThreadPool所做的改进。这绝对值得一读,尤其是关于偷工减料的。Richter描述的算法看起来与Wikipedia中的示例非常相似,因此我怀疑Deque也在那里使用。可以使用两种数据结构之一实现“队列”
通常情况下,deque对优先级排队很有用,使用deque扫描队列的速度明显快于链表。对任何类型的真实排队进行建模时:实体(位、人、车、字、粒子等)以一定的频率到达线路末端,并在线路开始时以不同的频率提供服务。在等待时,一些实体可能会决定离开线路……等等。
关键是您需要“快速访问”来在行的两端插入/删除,因此需要deque。deque是一个双端队列,允许从两端插入和删除 在真实场景中,我们可以将其连接到购票线路上,它的性能类似于队列,但有时一些人购买了票,突然他们回来询问队列前面的一些事情。在这种场景中,因为他们已经购买了票,所以他们有权来询问任何进一步的查询。所以在这种情况下,我们需要一个数据结构,根据需要,我们从前面添加数据。在相同的情况下,用户也可以从后面离开队列 所以它完全遵循Deque的数据结构
deque可以模拟火车站,在火车站中,车辆可以在线路的左侧或右侧进出,但只有末端的车辆可以进出。这是因为内侧的车辆无法撞击外侧的车辆离开,所以他们只需等待。链接迭代器时有一个实际使用示例。我用它来实施一项:
import java.util.Deque;
导入java.util.Iterator;
导入java.util.concurrent.concurrentLinkedQue;
公共类ExtendableTerator实现迭代器{
public Deque its=new concurrentlinkedque();
公共可扩展计数器(){
}
公共扩展迭代器(迭代器it){
这个();
这个。扩展(它);
}
@凌驾
公共布尔hasNext(){
//这是真的,因为我们从不持有空迭代器
return!its.isEmpty()&&its.peekLast().hasNext();
}
@凌驾
公共交通工具{
T next=its.peekFirst().next();
如果(!its.peekFirst().hasNext()){
它的.removeFirst();
}
下一步返回;
}
公共void扩展(迭代器it){
if(it.hasNext()){
its.addLast(it);
}
}
}
信息:在维基百科上。加上一个“请不要解释什么是德克”“这个家伙知道StActOp溢出。程序员的复制品。SE。我不确定这是多么现实。考虑到你不能用DeQuo来模拟一个真实的世界线,除非只有最后一个人才能离开这条线。如果假设第三个家伙想要离开,那么这个假设线也行。
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);
}
}
}