24 用优先队列进行调查(第2/3页)

“我知道什么是优先队列,”警长说,“我们用它来存储噪声投诉清单。叫得越响,优先级越高,所以我们总是先解决最糟糕的情况。我听说他们也采用这种方法来处理附近污水臭味的投诉,虽然看起来那里的所有事项的优先级都一样——都令人非常难以忍受。不过,你想说什么?”

“您这里有优先队列吗?”Notation问道。

警长摇摇头,感到迷惑不解,并压制着自己的愤怒:“没有多余的了”,他说,“所有的优先队列都已经投入了使用,有一个用于噪声投诉,有三个用于不同类型的犯罪,还有一个用于最高通缉犯,最后一个用于度假申请的安排。你想说什么?”

“最佳优先搜索。”Notation说。

“最佳优先搜索?”警长问道,“Frank告诉我,他使用的就是最佳优先搜索。”

“没错。”Frank点头道。

“优先队列会更有效率,”Notation解释道,“每次我们找到一条新线索,就可以把它放到优先队列中,通过其得分来显示该线索的质量。接下来,当我们准备调查下一条线索时,就可以从优先队列中提取最有用的线索。这样,我们总会按照下一条最有用的线索进行调查。”

Frank叹了口气,摇了摇头。他知道警长完全能猜出这番谈话的目的。警长擅长给大家上课,他不会凶巴巴地骂人或说脏话,但会以平静的方式让一名新警官意识到自己的愚蠢。“你之前是怎么做的?”警长耐心地问。

“我把线索都记在一个笔记本里,”Notation答道,“每次我们准备调查一条新的线索时,我就会看一遍整个清单,找到最好的那个。”

“那你有多少条线索呢?”警长问道,“平均而言。”

“平均而言?”Notation想了一会说道,“我猜有二到五条吧。”

“你想让我使用优先队列来处理只有二到五条记录的列表吗?”如果警长采用他一贯吼叫的方式来问,那这个问题听起来可能不太严重。相反,他的冷静和耐心的口气让整个讨论的不必要性更突显了。

Notation脸红了。“嗯,优先队列并不是很昂贵……”她开口道,话没说完又咽回去。

“Notation警官,”警长说,“我同意优先队列对于最佳优先搜索很有用。待会我就可以订购一套全新的系统,每个侦探配一套。但现在你还用不到,因为你还没有足够多的线索,而且更重要的是,这案子不归你管。”

警长越说,Notation的脸越红,现在已红得像甜菜汤了。她深吸一口气,直视警长的眼睛,咕哝道:“我明白了,长官。”

Frank感到非常遗憾。Notation犯了典型的菜鸟错误,过度优化解决方案。他得告诉她使用优先队列来追踪线索的想法是完全合理的,事实上,他一直在使用优先队列。然而,她问问题的时机却糟到不能更糟了。

“Notation,”警长继续说,“你在这里很有前途。你聪明、上进、有良好的直觉。但是你必须学会服从命令。别最后像Frank那样。”

Notation想开口抗议,但她看了一眼Frank,扮了个鬼脸,然后紧闭着嘴,一声不吭。她微微点点头,敬了个礼,大步走出办公室。

“Frank,你现在有得忙活了。去吧。”

Frank转身跟着Notation出去,连头都懒得点一下。

直到来到楼梯前,Frank才开口说话。

“你应该知道Orb区有一个行家,能帮你做便宜的优先队列,他叫Heaperous。他只在上午工作,所以你得等到明天才能找他。”

Notation停了下来,非常疑虑地看了他一眼,问道:“你为什么要告诉我这个,Frank?”

Frank努力做出同情的表情:“我听了警长的许多长篇大论。更重要的是,我知道好的数据结构对于调查的价值。”

“如果好的数据结构更有价值,那你为什么不使用优先队列?”她反问。