Tập hợp các danh sách (A):(Set of) Danh sách bộ (s) Descartes sản phẩm() từ đồ thị tương ứng với tập hợp danh sách
{[a,b,d,f],
[a,c,d,f],
[a,b,e,f],
[a,c,e,f]}
đó a, b, c, d, đ và f là mặt hàng (không nhất thiết phải ký tự trong một từ), có thể là yếu tố như một đồ thị acyclic đạo (DAG, B, tất cả các cạnh điểm từ trái -> sang phải):
b-->d
/\/\
a X f
\/\/
c-->e
hoặc là sản phẩm Descartes của 4 bộ mặt hàng (C, trục được đặt tên):
{a} * {b,c} * {d, e} * {f}
Ổi có số đẹp method để tạo bộ danh sách (A) từ danh sách các bộ (C).
Tôi đang thử một thuật toán chấp nhận đồ thị như B và trả về danh sách các trục như C (thực tế một hoặc nhiều hơn, xem ví dụ bên dưới), có thể được sử dụng với phương pháp ở trên để tạo một tập hợp danh sách như A.
Tuy nhiên, không đảm bảo rằng tập hợp danh sách sẽ là sản phẩm Descartes. Ví dụ:
{[a,b,d,f],
-missing-
[a,b,e,f],
[a,c,e,f]}
tương ứng với DAG:
b-->d
/\ \
a \ f
\ \/
c-->e
không thể được diễn tả như sản phẩm Descartes nhưng có thể được thể hiện dưới dạng 2:
{a}*{b}*{d,e}*{f} and {a}*{c}*{e}*{f}
tương ứng với đồ thị:
d
/\
a-->b f and a-->c-->e-->f
\/
e
Danh sách phải có mức độ liên quan nào đó (nghĩ: mẫu ngẫu nhiên của sản phẩm Cartesian rất lớn).
Lưu ý: danh sách các độ dài khác nhau không thể chia sẻ cùng một tập hợp các trục.
Có một thuật toán thực hiện điều này và tôi vừa không tìm được đúng thuật ngữ đúng không? Nếu không, chúng ta có thể tạo ra nó?
Độ phức tạp của thuật toán có thể là vấn đề vì tập hợp có thể có 10^2 danh sách và mỗi danh sách có thể có 10^2 mục, tức là biểu đồ khá lớn. Tôi có thể đảm bảo rằng các biểu đồ đầu vào sẽ có số lượng nút tối thiểu có thể đại diện cho tập các danh sách ... và các nút không phân nhánh được kết nối (a-> c-> e-> f) có thể được cuộn thành một đối tượng (acef).
PS. Tôi không nghĩ rằng điều này giống như Cartesian product of graphs, nhưng có thể có một số trùng lặp.
Có thư viện biểu đồ (Tôi đang nghĩ về jgrapht ở đây, nhưng có thể có những người khác), bạn đã thử và chọc họ để xem họ có điều gì đó tiếp cận chưa? – fge
@fge Tôi quen thuộc với JGraphT và nó không có một thuật toán như vậy. – Jon
Tôi sẽ xem xét danh sách dưới dạng từ và cố định vị trí các hậu tố phổ biến dài nhất. –