Qual é a melhor maneira de classificar uma lista parcialmente ordenado?
-
20-08-2019 - |
Pergunta
Provavelmente melhor ilustrado com um pequeno exemplo.
Dadas as relações
A < B < C
A < P < Q
saídas correto seria
ABCPQ or APQBC or APBCQ ... etc.
Em outras palavras, qualquer ordenação é válida em que as relações dadas segurar.
Estou mais interessado na solução que é mais fácil de implementar, mas o melhor O (n) em velocidade e tempo é interessante também.
Solução
Isso é chamado topológica classificação .
O algoritmo padrão é a saída de um elemento mínimo, em seguida, removê-lo e repita até feito.
Outras dicas
Faça vários tipos. Primeiro tipo de acordo com a primeira regra, em seguida, de acordo com o segundo e assim por diante. Deve funcionar, a menos que suas regras contêm contradições. Certifique-se bastante fácil de implementar.
Você poderia chamar repetidamente make_heap, pop_heap em C ++ com a seqüência em questão.