【问题标题】:how to sort a set when elements have multiple relationships with each other当元素彼此具有多种关系时如何对集合进行排序
【发布时间】:2016-04-22 13:38:22
【问题描述】:

当元素之间的关系可能相互矛盾时,我正在寻找一种算法来执行某种扩展数组排序。

所以我们有一个由 n 个项目组成的 I(项目)i1...in

I

中的项目之间定义了一组R(关系),由m个关系组成

这些关系可以相互矛盾,例如,一个关系说A>B,另一个说A<B

例如

r1:i1<i35

r2:i100<i4

...

rm:i45>i3

通常,rm(集合的大小)可以是任何正整数。

任务是对进行排序,以便项目以最好较低的项目(基于关系)排在较高的项目之前的方式排列......

我正在寻找一种算法来对集合进行排序,使其尽可能接近“最佳”顺序。我想一定有一个众所周知的算法来解决这样的问题。

谢谢!

【问题讨论】:

标签: arrays algorithm sorting set


【解决方案1】:

我认为衡量特定排序质量的最明智的方法是它违反的给定关系的数量。如果你决定使用这个度量,那么问题就相当于(Minimum) Feedback Arc Set。不幸的是,这个问题是 NP-hard,因此可能不存在有效的(多项式时间)算法。

在反馈弧集问题中,给您一个有向图,并要求您找到最小尺寸的边集,如果删除该边集,将破坏图中的所有环。

要了解这与您的问题有何对应,请注意我们可以将每个项目表示为图中的一个顶点,并将每个关系表示为两个顶点之间的有向边(例如,指向较小的那个)。当且仅当此图中存在 循环 时,才会存在冲突——也就是说,如果存在 2 个或更多不同顶点 v_1、v_2、...、v_k 的有序列表,使得v_i directed acyclic graph——那么topological sort 可以快速(在线性时间内)找到不违反约束的有效顺序。因此,反馈弧集的大小是您需要删除的最小边数,以便获得可以在不违反任何约束的情况下进行排序的图——或者等效地,在 任何排序。

【讨论】:

猜你喜欢
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 2014-03-08
  • 2012-04-30
相关资源
最近更新 更多