Có một số lượng lớn các thuật toán sắp xếp trên mạng, nhưng hầu hết chúng chỉ hoạt động trên các tập hợp được sắp xếp hoàn toàn bởi vì chúng giả định rằng bất kỳ hai phần tử nào có thể so sánh được. Tuy nhiên, có bất kỳ thuật toán tốt nào để phân loại các vị trí, trong đó một số phần tử không thể so sánh được? Đó là, cho một tập S các yếu tố rút ra từ một poset, cách tốt nhất để đầu ra là những gì một trật tự x , x , ..., x n ví dụ rằng nếu x i ≤ x j, i ≤ j?Sắp xếp một poset?
Trả lời
Có một giấy có tiêu đề Sorting and Selection in Posets có sẵn trên arxiv.org thảo luận về phương pháp sắp xếp thứ tự O ((w^2) nlog (n/w)), trong đó w là "chiều rộng" của vị trí đặt. Tôi đã không đọc bài báo, nhưng nó có vẻ như nó bao gồm những gì bạn đang tìm kiếm.
Cảm ơn bạn đã liên kết! Điều này có vẻ rất hứa hẹn! – templatetypedef
Tôi bắt đầu với loại sắp xếp trao đổi. Đó là O (n^2) và tôi không nghĩ rằng bạn sẽ làm tốt hơn thế.
Topological sort rất phù hợp để sắp xếp bộ đặt hàng một phần. Hầu hết các thuật toán là O (n^2). Đây là một thuật toán từ 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ó một helpful video example. Hầu hết các hệ thống giống Unix đều có lệnh tsort
. Bạn có thể giải quyết ví dụ về brownie của video với số tsort
như sau:
$ 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. Sắp xếp một LinkedHashSet
- 2. Sắp xếp một NSMutableDictionary
- 3. Sắp xếp lại() không sắp xếp lại một cách chính xác một biến tố trong ggplot
- 4. Sắp xếp một danh sách chung bởi một thứ tự sắp xếp bên ngoài
- 5. Sắp xếp nhiều khóa với Unix sắp xếp
- 6. Cách sắp xếp/sắp xếp dữ liệu trong Riak?
- 7. Cách sắp xếp/sắp xếp bảng phụ thuộc 2D
- 8. Powershell Sắp xếp Sắp xếp tùy chỉnh với biểu
- 9. KendoUI: lập trình sắp xếp lưới sắp xếp
- 10. Sắp xếp học tập Sắp xếp theo Ruby
- 11. Bộ sắp xếp bảng jQuery: dừng sắp xếp
- 12. Sắp xếp lại một danh sách lệnh
- 13. Sắp xếp một DataGridView trên nhiều cột?
- 14. Sắp xếp một IList trong C#
- 15. Sắp xếp lại một mảng trong Jquery?
- 16. Sắp xếp một phần trong JavaScript
- 17. Đi sắp xếp một phần của rune?
- 18. Sắp xếp một dữ liệu Bảng
- 19. Cách sắp xếp một ArrayCollection trong Flex
- 20. Một vài câu hỏi sắp xếp
- 21. Sắp xếp một ArrayCollection trong Flex
- 22. Sắp xếp thứ tự một phần?
- 23. Sắp xếp một Hashset .Net 3.5
- 24. Sắp xếp một mảng int với orderby
- 25. Có thể sắp xếp một HashTable không?
- 26. Cách sắp xếp một mảng trong JavaScript
- 27. Cách sắp xếp một HashMap trong Java
- 28. Sắp xếp một Bảng [] trong Lua
- 29. Java: sắp xếp một ArrayList tại chỗ
- 30. Multi-sắp xếp một mảng đa chiều
Đây không phải là loại hình tô pô chỉ? –
@ jleedev- Bạn có thể làm điều đó với một loại topo chỉ khi bạn biết làm thế nào mỗi cặp của các yếu tố trong S so sánh với nhau một ưu tiên; nếu không bạn sẽ phải dành thời gian O (| S |^2) để thực hiện tất cả các so sánh. – templatetypedef