Tôi phải tìm một chu kỳ âm trong đồ thị có trọng số theo hướng. Tôi biết thuật toán Bellman Ford hoạt động như thế nào và nó cho tôi biết nếu có một chu kỳ tiêu cực có thể tiếp cận. Nhưng nó không đặt tên rõ ràng.
Làm thế nào tôi có thể nhận được đường dẫn thực tế của chu kỳ?
Sau khi áp dụng thuật toán tiêu chuẩn, chúng tôi đã thực hiện bước lặp và không thể cải thiện thêm. Nếu chúng ta vẫn có thể hạ thấp khoảng cách đến một nút, một chu kỳ âm tồn tại.
Ý tưởng của tôi là: Vì chúng tôi biết cạnh vẫn có thể cải thiện đường dẫn và chúng tôi biết tiền thân của mỗi nút, chúng tôi có thể theo dõi đường trở lại từ cạnh đó cho đến khi chúng tôi gặp lại nó. Bây giờ chúng ta nên có chu kỳ của chúng tôi.
Đáng buồn thay, tôi đã không tìm thấy bất kỳ bài báo cho tôi biết nếu điều này là chính xác. Vì vậy, nó thực sự làm việc như vậy?
Chỉnh sửa: Ví dụ này chứng minh rằng ý tưởng của tôi là sai. Đưa ra biểu đồ sau, chúng tôi chạy Bellman-Ford từ nút .
Chúng tôi xử lý các cạnh theo thứ tự . Sau khi lặp chúng ta nhận được khoảng cách nút:
và bảng cha mẹ: có cha mẹ có cha mẹ có cha mẹ
Bây giờ, thực hiện lần lặp thứ chúng ta thấy rằng khoảng cách của nút vẫn có thể được cải thiện bằng cách sử dụng cạnh . Vì vậy, chúng ta biết rằng một chu kỳ tiêu cực tồn tại và là một phần của nó.
Nhưng, bằng cách lần theo lại cách chúng tôi thông qua bảng phụ huynh, chúng tôi gặp khó khăn trong một chu kỳ tiêu cực và không bao giờ gặp lần nữa.
Làm thế nào chúng ta có thể giải quyết vấn đề này?