Classificação topológica no OCaml
Estou tentando escrever a classificação topológica no ocaml, mas sou iniciante (nos algoritmos OCaml e de gráficos) e não consigo fazer isso sozinho.
É mais fácil para mim pensar em classificação topológica, por exemplo, em C ++ (e há muitos exemplos de classificação topológica em C ++ na Internet), mas quero aprender algo novo. Além disso, encontrei alguns exemplos de classificação topológica escritos no OCaml, mas não os entendo, francamente.
Digamos que eu tenho uma lista(int * int list) list
, por exemplo:
myList = [(1, [2]); (5, [6; 7]); (3, [2]); (6, [3; 7]); (8, [7]); (4, [3; 1])];;
e isso significa que eu preciso "fazer" a tarefa1
antes da tarefa2
tarefa4
antes das tarefas3
e1
etc.
Eu acho que essa saída para esta lista deve ser:
[8; 5; 6; 7; 4; 3; 1; 2]
(no entanto, não tenho certeza, porque acabei de fazer este exemplo, por isso, se estiver errado, corrija-me, por favor)
Além disso, eu li que esse tipo de topologia não funciona para ciclos em gráficos; portanto, deve haver algum tipo de condição para ciclos - quando determinado gráfico tem ciclo (s), geramos exceção (acho que é uma boa ideia) .
AFAIK, preciso usar o DFS no algoritmo para classificação topológica, que (DFS) não sei implementar no OCaml (entendo a ideia principal, mas não seisentir, como isso funciona na OCaml / programação funcional).
Eu realmente aprecio sua ajuda para me entender esses conceitos (refiro-me à classificação topológica, DFS em OCaml / programação funcional). Se você puder, seria ótimo se você me mostrar exemplos de códigos, porque a leitura de código é (para mim) o melhor método para entender o conceito de algoritmo.
Eu sei que para a maioria de vocês esta é uma pergunta simples, mas espero que isso não impeça que você me ajude.
PS: Estou aprendendo o OCaml sozinho (estou no ensino médio), por isso não tenho sólida formação teórica (no OCaml ou em algoritmos). Comecei a aprender o OCaml, porque queria entender o conceito de recursão, e agora essa linguagem parece ser interessante, porque é realmente diferente do C ++, então ainda estou tentando aprender algo novo no OCaml.