【发布时间】:2014-11-01 15:41:38
【问题描述】:
大多数排序算法(插入排序、冒泡排序、快速排序、合并排序等)都用列表进行了解释。我们没有针对 Map、Graph、Tree 的特定排序算法吗?
【问题讨论】:
大多数排序算法(插入排序、冒泡排序、快速排序、合并排序等)都用列表进行了解释。我们没有针对 Map、Graph、Tree 的特定排序算法吗?
【问题讨论】:
这是可能的,但不常见。
如果你想要一个排序树,你通常按排序顺序构建它。在树中重新排列节点/分支是相当常见的。如果您正在构建二叉搜索树,您可能会重新排列节点以保持平衡。如果您在编译器中使用抽象语法树,您可能会重新排列节点以优化计算。
映射是一种更抽象的结构,可以用二叉搜索树、跳过列表、B 树、哈希表等来实现。其中大多数都预先假定了某些特定的内容顺序。
图基本上是一棵树的概括。当然可以对图应用某些类型的排序(例如,图上的拓扑排序是非常常规的)。如果数据有自己的结构,您通常会使用图,将其简化为有序序列会丢失图中的大量数据。
例如,图的典型用途可能是将火车站表示为节点,并将这些车站之间的火车连接表示为图中的弧线。然后,您可以在图表中查找通过这些铁路连接从一个城市前往另一个城市的方式。
从图表中提取数据子集(例如城市名称)并将该数据排序成一个序列可能是有意义的,例如从特定车站获取出发时间列表,按出发时间排序,以及列出每个人的目的地。您可能还需要生成(主要)目的地的排序列表,以及每个目的地的出发时间。
这些实际上是提取数据,然后对提取的数据进行排序,而不是对图形本身进行排序。首先,将图表构建为图表的全部原因(或大多数原因)是因为它包含的数据不会轻易地以特定顺序简化为单个列表。
【讨论】: