|
|
|
|
移动端

3.7.3 队列的应用

《数据结构与算法分析:Java语言描述(原书第3版)》第3章表、栈和队列,本章讨论最简单和最基本的三种数据结构。实际上, 每一个有意义的程序都将显式地至少使用一种这样的数据结构, 而栈则在程序中总是要被间接地用到, 不管我们在程序中是否做了声明。本节为大家介绍队列的应用。

作者:冯舜玺/陈越 译来源:机械工业出版社|2016-04-13 18:00

有奖调研 | 1TB硬盘等你拿 AI+区块链的发展趋势及应用调研


3.7.3 队列的应用

有许多使用队列给出高效运行时间的算法。它们当中有些可以在图论中找到, 我们将在第9章讨论它们。这里, 先给出某些应用队列的简单例子。

当作业送交给一台行式打诱机的时候, 它们就以到达的顺序被排列起来。因此, 被送往行式打诱机的作业基本上被放到一个队列中。 我们说基本上是因为作业可以被取消。这等于从队列的中间进行一次删除, 它违反了队列的严格定义。

事实上每一个实际生活中的排队都(应该)是一个队列。例如, 在一些售票口排列的队伍都是队列, 因为服务的顺序是先到先买票。

另一个例子是关于计算机网络的。有多种PC机的网络设置, 其中磁盘是放在一台叫作文件服务器(file server)的机器上的。使用其他计算机的用户是按照先到先使用的原则访问文件的, 因此其数据结构是一个队列。

进一步的例子如下:

当所有的接线员忙不开的时候, 对大公司的呼叫一般都被放到一个队列中。

在大型的大学里, 如果所有的终端都被占用, 由于资源有限, 学生们必须在一个等待表上签字登记。在终端上停留时间最长的学生将首先被强制离开, 而等待时间最长的学生则将是下一个被允许使用终端的用户。

称为排队论(queueing theory)的整个数学分支处理用概率的方法计算用户预计要排队等待多长时间才会得到服务、 等待服务的队伍能够排多长以及其他一些诸如此类的问题。问题的答案依赖于用户到达排队的经常程度以及一旦用户得到服务时处理服务花费的时间。这两个参数作为概率分布函数给出。在一些简单的情况下, 答案可以解析地算出。一种简单情况的例子是一条电话线有一个接线员。如果接线员忙, 打来的电话就被放到一个等待队列中(这还与某个容许的最大限度有关)。这个问题在商业上很重要, 因为研究表明, 人们会很快挂上电话。

如果我们有k个接线员, 那么这个问题解决起来要困难得多。解析地求解起来困难的问题往往使用模拟的方法进行。此时, 我们需要使用一个队列来进行模拟。如果k很大, 那么我们还需要其他一些数据结构来使得模拟更有效地进行。95在第6章将会看到模拟是如何进行的。那时我们将对k的若干值进行模拟并选择能够给出合理等待时间的最小的k。

正如栈一样, 队列还有其他丰富的用途, 这样一种简单的数据结构竟然能够如此重要, 实在令人惊奇。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网管员必读—网络基础

本书共分两篇,15章。其中前6章为网络理论基础篇,介绍的是基本的网络技术,包括计算机网络分类、网络通信协议、IP地址和网线制作等。在第...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊