避免使用索引项重复输入

时间:2012-08-24 11:59:36

标签: c++ algorithm

我正在阅读关于算法的罗伯特塞德威克书中的队列

  

当数据结构中的项本身就是数组索引时,那么   我们将这样的项目称为“索引项目”。通常,我们有一套M.   对象,保存在另一个数组中,我们需要通过一个   广义队列结构作为更复杂算法的一部分。   对象按索引放在队列中,并在它们处理时进行处理   删除,每个对象只需处理一次。平时   没有重复项的队列中的数组索引会影响此目标   直接

我在最后一句中的问题“对象按索引放在队列中,并在删除时进行处理,每个对象只需处理一次”?我们只使用一个数组而不是两个数组?

作者的意思是“通常,没有重复的队列中的数组索引会直接包含此目标。” ?

感谢您的时间和帮助

1 个答案:

答案 0 :(得分:6)

嗯,作者希望解决处理存储在数组中的数据的算法任务:

       +-----+-----+---------+-----+
Data = | Foo | Bar | Grandma | Zip |
       +-----+-----+---------+-----+

我们需要按照我们的算法确定的某种顺序处理这些数据,并且我们要接下来要处理的项目有一些“待办事项”。复制实际数据对象可能是不合需要的或不可能的(对象可能很大或不可复制)。 索引的队列可以解决这个问题:

             --+---+---+--\
ToDo = [2] --> | 0 | 3 | -----> (1)
             --+---+---+--/

队列告诉我们Data[1]是下一个要处理的项目。 Data[3]Data[0]正在等待,我们刚刚决定Data[2]作为最近的任务进入。

(例如,队列用于树结构的广度优先搜索:您在一侧弹出要从队列中访问的节点,然后将该节点的子节点推送到每个节点应该只访问一次。上面的索引队列允许你将实际的树元素存储在Data数组中,并仅通过轻量级索引来引用它们。 )