У меня есть список чисел, которые я не могу знать их реальные значения. Допустим, list = [a,b,c,d]
. Но у меня есть информация о том, как они связаны друг с другом:
a > b
b > d
d > c
Поэтому я могу сделать вывод, что список, отсортированный в порядке убывания: [ a, b, d, c]
.
Еще один более сложный пример
relationships =
- g > b
- d > c > a
- d > g
- f > e > a
- f > e > d
В этом случае у нас есть несколько возможных ответов
Result:
[ [f, e, d, c, a, g, b],
[f, e, d, g, c, a, b],
[f, e, d, g, c, b, a],
... ]
, просто чтобы назвать несколько
Я хочу, чтобы функция возвращала мне именно это: список всех возможных ответов. Отношения - это список списков, где каждый список представляет отношения сортировки в порядке убывания. Например relationships = [[a,b],[b,c]]
говорит мне, что "a> b" и "b> c". Внутренние списки внутри отношений не обязательно должны быть одинакового размера. В случае неверного / невозможного ввода алгоритм должен выдать ошибку. Например:
relationships = [[a,b],[b,c],[c,a]
- это невозможный случай
Какой лучший подход для этого также эффективен? Я думал об использовании теории графов, где графы не могут быть ациклически c. Например, A -> B означает, что узел A переходит в B, что означает A> B, поэтому B -> A не может существовать. Как-то похоже на двоичное дерево, но в этом случае вместо того, чтобы разрешить 2 дочерних узла на узел, мы можем разрешить только 1.
Это хорошая идея, чтобы начать с этого, или у кого-то есть идеи о том, как подойти к этому