Tất cả các đường dẫn có độ dài nhỏ hơn độ dài cho trước trong một đồ thị có hướng giữa một vài nút


8

Đếm tất cả các đường dẫn có thể, hoặc tất cả các đường dẫn có thể có độ dài nhất định, giữa một vài nút trong biểu đồ có hướng hoặc không có hướng là một vấn đề cổ điển. Cần chú ý đến tất cả các phương tiện, do các chu kỳ sở hữu.

Câu hỏi này hơi khác nhau, hoặc ít nhất là tôi nghĩ.

INPUT: Be G một đồ thị có hướng. G có thể có chu kỳ và các nút tự kết nối. Đặt A (G) là ma trận kề của G (với 1 trong G i, j nếu có một liên kết đi từ i đến j và 0 khác). Xác định TB hai tập con của các nút của G , có thể có giao điểm void.

KẾT QUẢ: Một danh sách của tất cả các con đường có độ dài tối đa là k đi từ một nút trong T với một nút trong B . Các đường dẫn có thể chứa nhiều thời gian các cạnh giống nhau, miễn là chúng đi từ nút nguồn đến nút đích theo đúng ít hơn k + 1 bước.

HỎI: Tôi muốn biết thuật toán nào thực hiện tốt nhất trong nhiệm vụ này. Tôi đang cố gắng phát triển một câu trả lời có thể dựa trên thực tế là sức mạnh thứ n của ma trận kề, nếu được tính toán một cách tượng trưng (với một biến khác nhau cho mỗi mục thay vì 1), hãy theo dõi tất cả các đường dẫn này (và nó giảm việc đếm các đường dẫn nếu được tính bằng số với 1 trong các mục). Nhưng tôi thực sự không biết liệu đây có phải là cách nhanh nhất để thực hiện nhiệm vụ (có thể không).

CAVEAT: Tôi không yêu cầu vấn đề đếm, cũng như đối với các đường dẫn ngắn nhất, độ dài của một đường dẫn được xác định là số cạnh được sử dụng (đếm số lần lặp lại). Tôi đang sử dụng R, nhưng nếu bạn thích nghĩ về nó bằng bất kỳ ngôn ngữ nào khác! Tôi thực sự xin lỗi nếu câu hỏi đã được đặt ra và giải quyết. Cảm ơn bạn đã giúp đỡ!

Thông tin bổ sung: Tôi đã thử một cách tiếp cận chuỗi ma trận (A ^ 3 cho cả 3 đường dài, ...) và dfs / bfs. Tôi nghĩ rằng hai thứ hai không còn lạc quan nữa vì chúng không tính đến việc tôi đang làm việc trên các bộ nguồn và mục tiêu, và do đó thực hiện rất nhiều công việc dư thừa ...


Chào bạn Bạn vẫn quan tâm đến việc nhân các ma trận một cách tượng trưng trong R?
Ferdinand.kraft

Đúng, mặc dù nó giống chuỗi hơn về mặt tượng trưng (xem câu hỏi trong stackoverflow). Cảm ơn.
gvdr

Sau đó xem câu trả lời của tôi tại Stackoverflow .
Ferdinand.kraft

Câu trả lời:


7

Nếu tôi không thiếu điều gì về câu hỏi của bạn, bạn có thể áp dụng mẹo tiêu chuẩn để giảm câu hỏi về nhiều nguồn và đích cho trường hợp nguồn đơn và đích đơn:

  1. Thêm hai nút mới và , st
  2. Kết nối với tất cả các nguồn, s
  3. Kết nối tất cả các điểm đến .t

Sau phần giảm này, chúng tôi đang ở trong cài đặt câu hỏi tiêu chuẩn có thêm hai đỉnh và và chúng tôi muốn tìm các bước đi từ đến chiều dài tối đa .ststk+2


Làm thế nào tôi không thể nhìn thấy mánh khóe? Điều đó chỉ làm cho công việc, sau khi tất cả dường như khá đơn giản.
gvdr

1
Bạn cũng có thể sử dụng cách tiếp cận cấp nguồn ma trận trực tiếp trên ma trận kề kề ban đầu: là số đường dẫn có độ dài từ đến . (Ak)ijkij
Yuval Filmus

@YuvalFilmus, như đã nói tôi không đếm các con đường, nhưng thực sự tìm thấy chúng. Do đó tôi không thể đơn giản sử dụng năng lượng ma trận, nhưng phiên bản "chuỗi" của điều đó.
gvdr

2
@Yuval Filmus: Yuval đã đúng! Khi ông đề cập đến "số lượng đường dẫn", điều này không nên được hiểu là để giải quyết vấn đề đếm chúng mà chỉ để biết chỉ số nào cần xem xét trong ma trận kề kề trước . Nếu thì tìm kiếm ngược trong dfs hoặc bfs kiểm tra tất cả các nút khi và chỉ if cũng bằng 1Ak1(Ak)ij=1(Ak1)iω=1(Ak1)ωj
Carlos Linares López

Xin lỗi Carlos, tôi đã bỏ lỡ câu trả lời của bạn.
gvdr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.