Tôi muốn liệt kê tất cả các đồ thị vô hướng có kích thước , nhưng tôi chỉ cần một thể hiện của mỗi lớp đẳng cấu . Nói cách khác, tôi muốn liệt kê tất cả các đồ thị không đẳng hình (không định hướng) trên n đỉnh. Tôi có thể làm cái này như thế nào?
Chính xác hơn, tôi muốn một thuật toán sẽ tạo ra một chuỗi các đồ thị vô hướng , với thuộc tính sau: với mỗi đồ thị vô hướng G trên n đỉnh, tồn tại một chỉ số i sao cho G là đẳng cấu đến G i . Tôi muốn thuật toán có hiệu quả nhất có thể; nói cách khác, số liệu tôi quan tâm là thời gian chạy để tạo và lặp qua danh sách biểu đồ này. Một mục tiêu thứ yếu là nó sẽ tốt nếu thuật toán không quá phức tạp để thực hiện.
Lưu ý rằng tôi cần phải có ít nhất một biểu đồ từ mỗi lớp đẳng cấu, nhưng sẽ ổn nếu thuật toán tạo ra nhiều hơn một thể hiện. Cụ thể, sẽ ổn nếu chuỗi đầu ra bao gồm hai biểu đồ đẳng hình, nếu điều này giúp dễ dàng tìm thấy thuật toán như vậy hoặc cho phép các thuật toán hiệu quả hơn, miễn là nó bao gồm tất cả các biểu đồ có thể.
Ứng dụng của tôi như sau: Tôi có một chương trình mà tôi muốn thử nghiệm trên tất cả các đồ thị có kích thước . Tôi biết rằng nếu hai biểu đồ là đẳng cấu, chương trình của tôi sẽ hoạt động giống nhau trên cả hai (nó sẽ đúng trên cả hai hoặc không chính xác trên cả hai), do đó, nó đủ để liệt kê ít nhất một đại diện từ mỗi lớp đẳng cấu, và sau đó kiểm tra chương trình về những đầu vào đó. Trong ứng dụng của tôi, n khá nhỏ.
Một số thuật toán ứng viên tôi đã xem xét:
Tôi có thể liệt kê tất cả các ma trận kề, có thể, tất cả các ma trận đối xứng 0 hoặc 1 có tất cả 0 trên các đường chéo. Tuy nhiên, điều này đòi hỏi liệt kê 2 n ( n - 1 ) / 2 ma trận. Nhiều ma trận trong số đó sẽ biểu thị các đồ thị đẳng hình, vì vậy điều này có vẻ như nó đang lãng phí rất nhiều nỗ lực.
Tôi có thể liệt kê tất cả các ma trận kề có thể, và đối với từng ma trận, hãy kiểm tra xem nó có phải là đẳng cấu với bất kỳ đồ thị nào tôi đã đưa ra trước đó không; nếu nó không phải là đẳng cấu với bất cứ thứ gì xuất ra trước đó, hãy xuất nó. Điều này sẽ rút ngắn đáng kể danh sách đầu ra, nhưng nó vẫn cần ít nhất bước tính toán (ngay cả khi chúng tôi giả sử kiểm tra đẳng cấu đồ thị là siêu nhanh), do đó, số liệu của tôi không tốt hơn nhiều.
Có thể liệt kê một tập hợp các ma trận kề. Đặc biệt, nếu là một đồ thị trên n đỉnh V = { v 1 , ... , v n } , mà không mất tính tổng quát tôi có thể giả định rằng các đỉnh được sắp xếp sao cho DEG v 1 ≤ ° v 2 ≤ ⋯ ≤ ° v n. Nói cách khác, mọi đồ thị là đẳng cấu với một trong đó các đỉnh được sắp xếp theo thứ tự không giảm. Vì vậy, nó chỉ đủ để liệt kê các ma trận kề có tài sản này. Tôi không biết chính xác có bao nhiêu ma trận kề nhau như vậy, nhưng nó ít hơn và chúng có thể được liệt kê với ít hơn 2 n ( n - 1 ) / 2 bước tính toán. Tuy nhiên, điều này vẫn còn rất nhiều dư thừa: nhiều lớp đẳng cấu sẽ vẫn được đề cập nhiều lần, vì vậy tôi nghi ngờ điều này là tối ưu.
Chúng ta có thể làm tốt hơn không? Nếu tôi hiểu chính xác, có khoảng các lớp tương đương của đồ thị không đẳng hình. Chúng ta có thể tìm thấy một thuật toán có thời gian chạy tốt hơn các thuật toán trên không? Khoảng cách giữa chúng tôi có thể nhận được đến ~ 2 n ( n - 1 ) / 2 / n ! chặn dưới? Tôi quan tâm chủ yếu về khả năng di chuyển cho n nhỏ (giả sử, n = 5 hoặc n = 8hoặc là; đủ nhỏ để người ta có thể chạy một thuật toán như vậy để hoàn thành một cách hợp lý), không quá nhiều về sự tiệm cận đối với lớn .
Liên quan: Xây dựng ma trận nhị phân không tương đương (mặc dù không may là người ta dường như không nhận được câu trả lời hợp lệ).