хорошо, я сразу признаю, что у меня нет оценки сложности времени для среднего случая, но, возможно, помогут следующие два наблюдения.
Во-первых, это очевидный кандидат на библиотеку ограничений. если бы вы делали это на практике (например, это была какая-то задача на работе), то вы бы получили средство решения ограничений, присвоили бы ему различные попарные порядки, которые у вас есть, а затем запросили список всех результатов.
секунда, которая обычно реализуется как поиск. если у вас есть N символов, рассмотрите дерево, у корневого узла которого есть N дочерних элементов (выбор первого символа); следующий узел имеет N-1 потомков (выбор второго символа); и т.д. ясно, что это N! худший случай для полного исследования.
даже с «тупым» поиском вы можете заметить, что вы часто можете обрезать результаты поиска, сверяя свой заказ в любой точке с имеющимися у вас парами.
но, поскольку вы знаете, что существует общий порядок, даже если у вас (возможно) есть только частичная информация, вы можете сделать поиск более эффективным. например, вы знаете, что первый символ не должен появляться справа от <для любой пары (если мы предположим, что каждому символу присваивается числовое значение, причем первый символ является наименьшим). аналогично, перемещаясь вниз по дереву, для соответственно уменьшенных данных. </p>
Короче говоря,
, вы можете перечислить возможные решения, исследуя дерево, используя неполную информацию об упорядочении, чтобы ограничить возможные варианты выбора в каждом узле.
надеюсь, что это поможет некоторым.