2017-08-27 64 views
2

说我有时可以比较的非数字对象,但有时没有用于比较的数据。使用有限数据对非数字对象进行排序

例如:

  • A大于B更大,但不与之比较的C.
  • BC更大。

这清楚地创建了一个排序列表AB,C

但是,让我们添加大于CD。由于没有比较DAB的数据,因此最终排名并不明确。

我在寻找的是一种用“尽力而为”的方式来排列这些类型的数据点,知道数据有限,最终的排序列表只会被部分排序。

此外,我打算代表这不是一维数组。也许是某种树?

另一个想法是将数据点与大量数据组合在一起,因为它们可以很容易地排序。然后使用组间比较来对组进行排名。问题在于有时一个数据点可以与多个组进行比较。

回答

2

如果我正确记得大学,这通常是用图算法完成的。对边缘从较大元素变为较小元素的所有项目制作有向图,并跟踪节点有多少入局边。从图形中删除没有传入边的节点 - 减少删除的节点指向的所有节点的传入边数 - 清洗,重复。有关详细信息和算法提示,请致电topological sorting

如果在任何时候你最终得到一个非空图,其中所有节点都有一个入边,那么你的排序就有一个循环,因此不是一个排序。

+0

谢谢,我会试试这个。我会保留这个问题,直到有机会尝试它,以防其他人有其他想法。我有一种感觉会有循环。 – Sarke

+0

假设我得到一个循环,也许我可以将该组合成一个项目,然后继续。然后在最后再次扩大组。 – Sarke

+0

我认为这可能没有帮助 - 循环将在组中的项目之间 - 但它就像在这里4点,所以不要太强烈地抱怨我。 – millimoose

相关问题