Algorithm 一组已知对序元素的排序算法

Algorithm 一组已知对序元素的排序算法,algorithm,set,Algorithm,Set,这是一个我正在寻找算法解决方案的问题。假设我们有一组n个元素,A1,A2,…,An 我们有一套规则,如A1>A2、A1

这是一个我正在寻找算法解决方案的问题。假设我们有一组n个元素,A1,A2,…,An 我们有一套规则,如A1>A2、A1
提前感谢。

基于比较的排序算法只有在有a的情况下才有效,也就是说,对于每对
x,y
x!=y
,我们知道是
x
还是
y
。你所拥有的是一组元素中的一个,而你所寻找的是一组按照这个偏序排列的元素

要找到它,请将输入解释为带有边的图形
(a,b)
,其中
a
是一个输入对。然后在该图形上执行以下操作:

dfs(x):
  if x is visited: return
  for every rule x < y or y > x:
    dfs(y)
  add x to front of output

output = []
for every element x:
  dfs(x)
dfs(x):
如果访问了x:返回
对于每个规则xx:
dfs(y)
将x添加到输出的前面
输出=[]
对于每个元素x:
dfs(x)
运行时是
O(n+m)
,其中
n
是元素(节点)的数量,
m
是规则(边)的数量。

当然,请选择


任何比较都可以;只要将规则放入单个函数中的一个大if/else语句中,比较排序将非常乐意按照您的喜好对它们进行排序。

@Arash您能详细说明我正在寻找标准的含义吗solution@user2864740:不太好。典型的排序算法仅在对具有
x!=y
,或者
x
或者
x>y
是已知的。@user2864740抱歉,但这并不意味着。我们没有针对每个可能的比较的规则,我们有针对可能比较的子集的规则,这些子集足以得到总的顺序。@Girishlwani2010的标准解决方案我指的是一种分类方法,就像我们说的“a*算法”或“快速排序”或“DLX”。我不认为这是真的。假设我们有
n
输入元素和规则
1<2,2<3,…,n-1
。最终顺序已完全确定,但基于比较的排序将进行大约
n*log n
比较,但我们只知道这些排序中最多
n
的结果。我们如何回答其他比较?谢谢。我会在阅读其他建议时考虑这个问题。这似乎是目前为止唯一的答案@阿拉什:是的,建议的基于比较的排序无法解决这个问题。@阿拉什:即使没有循环,也可以使用DFS来获取深度优先的林。它的属性是,对于每个节点
x
,图中从该节点可访问的所有节点都位于
x
的子树中。对于BFS森林来说,情况并非如此。假设你有
A
。一个有效的BFS树应该是
A->B,A->D,B->C
。您丢失了一段信息
B
,因此该树不足以提取有效的拓扑顺序。非常感谢您提供的解决方案和此评论。