Thuật toán của Dijkstra có phải là giải pháp thích hợp cho vấn đề định tuyến tín hiệu này không?


12

Tôi đang trong quá trình phát triển một mô-đun quản lý và định tuyến tín hiệu cho một hệ thống nghe nhìn tích hợp và đang thiết kế nó với mục đích linh hoạt nhất có thể trên các mạng phân phối tín hiệu khác nhau. Mục đích của mô-đun là xử lý định tuyến trên một số bộ chuyển đổi ma trận xếp chồng 1 và xử lý chuyển đổi định dạng cần thiết.

Giải pháp tốt nhất mà tôi đã khám phá vào thời điểm này là vạch ra mạng thành một biểu đồ với các đỉnh riêng biệt cho từng loại tín hiệu được hỗ trợ bởi các bộ chuyển đổi và sau đó được nối thông qua các nút đại diện cho bộ xử lý video xử lý chuyển đổi định dạng.

Biểu đồ ví dụ

Màu sắc đại diện cho các định dạng tín hiệu. Các nút tròn là công tắc, nguồn hoặc chìm. Các nút vuông là bộ xử lý video thực hiện chuyển đổi định dạng.

Từ đó tôi có thể sử dụng một triển khai thuật toán của Dijkstra để xác định đường dẫn phải được tạo để đưa đầu vào X đến đầu ra Y. Điều này sẽ cho phép dữ liệu về cấu hình đầu vào / đầu ra của tất cả các bộ chuyển đổi và bộ xử lý được truyền vào và các mô-đun thích ứng cho phù hợp.

Đây có phải là một giải pháp thích hợp hay có một cách tiếp cận khác có thể đáng để nghiên cứu?

1 aka 'chuyển đổi thanh ngang', bộ định tuyến video có đầu vào M đầu ra x N hỗ trợ các kết nối một-nhiều. Mỗi thiết bị thần kinh có thể xử lý nhiều định dạng tín hiệu và có thể hoặc không thể thực hiện bất kỳ chuyển đổi định dạng nào.

biên tập: Như Péter Török đã đề cập, biểu đồ sẽ không nhất thiết phải là một cái cây, sơ đồ là một ví dụ đơn giản để minh họa ý tưởng. Khi được triển khai trong 'nhiều đường dẫn' trong thế giới thực, có thể tồn tại các mức độ định nghĩa khác nhau (DVI> VGA> thành phần> hỗn hợp) mà tôi dự định đại diện cho trọng số cạnh.

chỉnh sửa 2: Đây là một ví dụ toàn diện hơn một chút với chỉ thị được chỉ định và hiển thị một mạng bao gồm hai loại tín hiệu. Ví dụ ban đầu đã được sửa đổi một chút để mỗi đầu vào và đầu ra trên một thiết bị được xác định là một nút riêng biệt vì điều này sẽ cung cấp dữ liệu cần thiết để kiểm soát việc chọn định tuyến / đầu vào ma trận. Ví dụ 2 - hai loại tín hiệu, bộ chuyển đổi xếp chồng


Bạn đang có ý định trọng số cạnh để được nhân?
Peter Taylor

Phụ gia. Lý thuyết là điều này sẽ cho phép nó được xác định sao cho định nghĩa của đường tín hiệu càng cao thì trọng số càng thấp. Các cạnh kết nối các nút thực hiện chuyển đổi định dạng sau đó sẽ được đặt trọng số cao hơn so với chỉ định cho các cạnh kết nối các nút không chuyển đổi. Điều này sẽ định tuyến tín hiệu ở định dạng gốc nếu có thể, chỉ liên quan đến chuyển đổi định dạng (và suy giảm tín hiệu liên quan và sử dụng thiết bị) khi cần thiết.
Kim Burgess

1
@PeterTaylor: Sẽ có vấn đề gì nếu chúng được nhân lên? Chúng có ngữ nghĩa chính xác giống như phụ gia (miễn là chúng dương) bằng cách áp dụng logarit. Hay là một cái gì đó phức tạp hơn đằng sau nó?
Herby

@herby, điểm tốt, đã không nghĩ về điều đó. treo đầu trong sự xấu hổ
Peter Taylor

Câu trả lời:


4

Đây là một cái cây, Dijkstra là O ( n ^ 2 ) quá mức cần thiết. Trivial O ( n ) chiều rộng - tìm kiếm đầu tiên là đủ.

EDIT: Bắt đầu BFS trong bất kỳ nút nào có độ ít nhất hai.

EDIT2: Vì biểu đồ không được đảm bảo là cây, hãy sử dụng Dijkstra, nếu bạn muốn tối ưu hóa một chút, trước tiên bạn có thể "tước" biểu đồ tất cả các đỉnh của cấp một (đối với chúng, đường dẫn là tầm thường), bao gồm cả các điều đó xảy ra để có được bằng cấp một do tước bỏ hàng xóm cũ của họ và làm Dijkstra trên phần còn lại (đó chính xác là phần "không phải là cây").

Thêm vào đó, tôi muốn nói rằng bạn muốn các đường dẫn từ mọi nút đến nhau, phải không? Thuật toán của Dijsktra chỉ thực hiện các đường dẫn từ một đến tất cả các thuật toán khác. Có thể làm thuật toán Floyd-Warshall trên phần còn lại bị tước. Tất nhiên, nếu cấu trúc liên kết rất năng động, tốt nhất là thực hiện (tước và) Dijkstra, ad hoc.


2
Tôi tin rằng biểu đồ được hiển thị ở trên là một ví dụ đơn giản (ified) và trong cuộc sống thực thường có thể có nhiều đường dẫn thay thế giữa hai nút (định dạng), tức là bạn không thể dựa vào biểu đồ luôn là một cây.
Péter Török

Được triển khai phù hợp, thuật toán của Dijkstra cũng sẽ là O ( n ), mặc dù phức tạp hơn và vẫn còn quá mức cần thiết.
Peter Taylor

@ PéterTörök: Trong trường hợp đó, vâng. Chỉ người hỏi mới biết chắc chắn. Nhưng khi nó là một cái cây, bfs là đủ (và chết đơn giản).
Herby

@PeterTaylor: Thú vị. Bất kỳ nguồn nào, xin vui lòng?
Herby

@ PéterTörök là chính xác. Xem câu hỏi được chỉnh sửa.
Kim Burgess

2

Bạn có thể sử dụng A * (dạng thuật toán chung hơn của Dijkstra) để tìm kiếm biểu đồ được đề cập. Bạn đề cập đến chi phí của trọng số trong bình luận của bạn:

Phụ gia. Lý thuyết là điều này sẽ cho phép nó được xác định sao cho định nghĩa của đường tín hiệu càng cao thì trọng số càng thấp. Các cạnh kết nối các nút thực hiện chuyển đổi định dạng sau đó sẽ được đặt trọng số cao hơn so với chỉ định cho các cạnh kết nối các nút không chuyển đổi. Điều này sẽ định tuyến tín hiệu ở định dạng gốc nếu có thể, chỉ liên quan đến chuyển đổi định dạng (và suy giảm tín hiệu liên quan và sử dụng thiết bị) khi cần thiết

Nếu tôi hiểu chính xác, bạn muốn tìm đường dẫn chi phí thấp nhất từ ​​đầu đến mục tiêu. Nếu bạn cung cấp cho mỗi nút cả chi phí thực tế và ước tính (heuristic) cho mục tiêu (cả hai đều được chấp nhận và nhất quán), thì A * được đảm bảo cung cấp một giải pháp tối ưu. Nó có thể là quá mức cần thiết, tùy thuộc vào mức độ tôi hiểu vấn đề của bạn.


+1: IIRC, heuristic phải luôn ước tính chi phí thấp hơn chi phí thực tế để đảm bảo đường dẫn tối ưu. Trong trường hợp xấu nhất, nếu bạn không thể có quyền heuristic, chỉ cần trả về 0 từ heuristic và bạn đã có thuật toán của dijkstra.
Steven Evers
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.