我正在阅读关于算法的罗伯特塞德威克书中的队列
当数据结构中的项本身就是数组索引时,那么 我们将这样的项目称为“索引项目”。通常,我们有一套M. 对象,保存在另一个数组中,我们需要通过一个 广义队列结构作为更复杂算法的一部分。 对象按索引放在队列中,并在它们处理时进行处理 删除,每个对象只需处理一次。平时 没有重复项的队列中的数组索引会影响此目标 直接
我在最后一句中的问题“对象按索引放在队列中,并在删除时进行处理,每个对象只需处理一次”?我们只使用一个数组而不是两个数组?
作者的意思是“通常,没有重复的队列中的数组索引会直接包含此目标。” ?
感谢您的时间和帮助
答案 0 :(得分:6)
嗯,作者希望解决处理存储在数组中的数据的算法任务:
+-----+-----+---------+-----+
Data = | Foo | Bar | Grandma | Zip |
+-----+-----+---------+-----+
我们需要按照我们的算法确定的某种顺序处理这些数据,并且我们要接下来要处理的项目有一些“待办事项”。复制实际数据对象可能是不合需要的或不可能的(对象可能很大或不可复制)。 索引的队列可以解决这个问题:
--+---+---+--\
ToDo = [2] --> | 0 | 3 | -----> (1)
--+---+---+--/
队列告诉我们Data[1]
是下一个要处理的项目。 Data[3]
和Data[0]
正在等待,我们刚刚决定Data[2]
作为最近的任务进入。
(例如,队列用于树结构的广度优先搜索:您在一侧弹出要从队列中访问的节点,然后将该节点的子节点推送到每个节点应该只访问一次。上面的索引队列允许你将实际的树元素存储在Data
数组中,并仅通过轻量级索引来引用它们。 )