Esiste un enorme numero di algoritmi di ordinamento, ma la maggior parte di essi funziona solo su insiemi totalmente ordinati perché presuppone che due elementi siano comparabili. Tuttavia, ci sono dei buoni algoritmi là fuori per ordinare i posets, dove alcuni elementi sono incomparabili? Cioè, dato un insieme S di elementi che parte da un poset, qual è il modo migliore per produrre un ordinamento x , x 2 , ..., x n tale che se x i ≤ x j, i ≤ j?Ordinamento di un poset?
risposta
C'è un documento intitolato Sorting and Selection in Posets disponibile su arxiv.org che descrive i metodi di ordinamento di ordine O ((w^2) nlog (n/w)), dove w è la "larghezza" del poset. Non ho letto il documento, ma sembra che copra quello che stai cercando.
Grazie per il link! Questo sembra molto promettente! – templatetypedef
Vorrei iniziare con lo scambio di selezione. Quello è O (n^2) e non penso che farai di meglio.
Topological sort è adatto per l'ordinamento di un set parzialmente ordinato. La maggior parte degli algoritmi è O (n^2). Ecco un algoritmo da Wikipedia:
L ← Empty list that will contain the sorted elements
S ← Set of all nodes with no incoming edges
while S is non-empty do
remove a node n from S
add n to tail of L
for each node m with an edge e from n to m do
remove edge e from the graph
if m has no other incoming edges then
insert m into S
if graph has edges then
return error (graph has at least one cycle)
else
return L (a topologically sorted order)
C'è un helpful video example. La maggior parte dei sistemi Unix ha il comando tsort
. Si potrebbe risolvere esempio brownie del video con tsort
come segue:
$ cat brownies.txt
preheat bake
water mix
dry_ingredients mix
grease pour
mix pour
pour bake
$ tsort brownies.txt
grease
dry_ingredients
water
preheat
mix
pour
bake
- 1. Ordinamento un insieme di valori
- 2. Ordinamento di un Guava BiMap
- 3. Python: ordinamento di un dizionario di liste
- 4. Ordinamento di un elenco di oggetti personalizzati
- 5. Ordinamento di un elenco generico da parte di un ordinamento esterno
- 6. Ordinamento di un array da due valori
- 7. Ordinamento di un indice datetime panda
- 8. Ordinamento di un array basato su alfabeti?
- 9. ordinamento di un file enorme in Java
- 10. ordinamento di un array Riferimento hash
- 11. ordinamento di un oggetto JSON in Javascript
- 12. Un algoritmo di ordinamento O (n)
- 13. Java: ordinamento di un ArrayList sul posto
- 14. Ordinamento di un array associativo in PHP
- 15. Ordinamento di un elenco collegato in Java
- 16. Ordinamento di un elenco collegato in C
- 17. ordinamento di un vettore in ordine decrescente
- 18. Ordinamento di un XML in Java
- 19. Ordinamento di un array multidimensionale per stringa?
- 20. Ordinamento Python - Un elenco di oggetti
- 21. Ordinamento di un array multidimensionale in VBA
- 22. Esiste un algoritmo di "ordinamento binario"?
- 23. Ordinamento di un NSArray nell'ordine inverso
- 24. Multi-ordinamento di un array multi-dimensionale
- 25. Conservare un ordinamento di enumerazioni in Java
- 26. Ordinamento un dizionario da Value
- 27. ordinamento dati in un albero
- 28. Ordinamento su un ordine personalizzato
- 29. Ordinamento di un elenco VB.net per un valore di classe
- 30. Ordinamento di un array con un numero minimo di confronti
Non è solo questo genere topologico? –
@ jleedev- Potresti farlo con un ordinamento topologico solo se sapessi come ogni coppia di elementi in S è paragonata l'una all'altra a priori; altrimenti dovresti passare O (| S |^2) tempo facendo tutti i confronti. – templatetypedef