为什么优先级队列大多使用0作为最重要的优先级?
问题描述:
为什么最优先级/堆队列实现为0是最高优先级?我假设我错过了一些关键的数学原理。由于最近我正在实现自己的优先级队列,如果优先级与整数值一起写入插入函数似乎更容易,但显然人们比我更聪明,认为它应该以其他方式。为什么优先级队列大多使用0作为最重要的优先级?
任何想法?
答
我不认为有任何的设计理由。这可能只是因为大多数程序员习惯于将0视为第一个元素。另一个原因可能是因为枚举从0开始,因此第一个定义枚举“最高”整数值为0
答
如果它是不断增加的,你怎么可能永远设置什么的最高优先级? (+1 rossfab的答案:)
答
作为一个反例,在什么肯定是最容易获得的一个(如果不使用)优先级队列实现,即STL的std::priority_queue
,该top()
元素是根据一个数值最高operator<
。当然,每个人都习惯于排序顺序最低的排队顺序,因此在第一次使用它时会吸引很多人。
答
它往往是另一种方式是,优先级队列采用了类似的Dijkstra和A *,其中优先级的节点的距离算法,并且要首先处理更接近节点的原因。
答
没有什么内在的有关优先级队列,使0当务之急是更好的选择。然而,对于编写可重用实现的人来说,您将不得不挑选一些东西,而且无论您为优先级使用哪种类型的积分或浮点值,定义好的0都是明确的。
即使在编写私有实现时,如果您决定只需要256个优先级,并使用无符号字符作为优先级,并且255是您的首要任务,那么如果您决定要仔细查看所有代码你需要更多的水平。
学到新的东西。谢谢! – 2009-11-19 23:35:48