Dưới đây là một khoản thuế tiêu thụ đặc biệt:graph - Làm thế nào để tìm được chu trình tối thiểu được chỉ định (tổng trọng lượng tối thiểu)?
Cho G là biểu đồ có trọng số theo hướng với n đỉnh và cạnh m, trong đó tất cả các cạnh đều có trọng số dương. Chu trình chỉ đạo là một đường dẫn được hướng dẫn bắt đầu và kết thúc tại cùng một đỉnh và chứa ít nhất một cạnh. Đưa ra thuật toán O (n^3) để tìm chu trình theo hướng G trong tổng trọng lượng tối thiểu. Tín dụng một phần sẽ được đưa ra cho một thuật toán O ((n^2) * m).
Đây là thuật toán của tôi.
Tôi thực hiện DFS
. Mỗi khi tôi tìm thấy một back edge
, tôi biết tôi đã có một chu kỳ chỉ đạo.
Sau đó, tôi sẽ tạm thời lùi lại dọc theo parent array
(cho đến khi tôi di chuyển qua tất cả các đỉnh trong chu kỳ) và tính total weights
.
Sau đó, tôi so sánh số total weight
của chu kỳ này với min
. min
luôn có tổng trọng số tối thiểu. Sau khi DFS kết thúc, chu trình đạo trình tối thiểu của chúng tôi cũng được tìm thấy.
Ok, sau đó về độ phức tạp của thời gian.
Thành thật mà nói, tôi không biết độ phức tạp của thuật toán của mình.
Đối với DFS, traversal lấy O (m + n) (nếu m là số cạnh và n là số đỉnh). Đối với mỗi đỉnh, nó có thể trỏ trở lại một trong những tổ tiên của nó và do đó tạo thành một chu kỳ. Khi một chu trình được tìm thấy, phải mất O (n) để tóm tắt tổng trọng số.
Vì vậy, tôi nghĩ tổng thời gian là O (m + n * n). Nhưng rõ ràng nó là sai, như đã nêu trong excise thời gian tối ưu là O (n^3) và thời gian bình thường là O (m * n^2).
bất cứ ai có thể giúp tôi với:
- là thuật toán của tôi có đúng không?
- Độ phức tạp về thời gian nếu thuật toán của tôi là chính xác?
- Có bất kỳ thuật toán nào tốt hơn cho vấn đề này không?
Không rõ bạn đang yêu cầu trợ giúp với điều gì. Bạn đang yêu cầu giúp đỡ xác định thời gian phức tạp của bạn? – Keeblebrox
Ok, tôi đã chỉnh sửa câu hỏi của tôi –
Thuật toán của bạn chưa hoàn thành. Bạn sẽ làm gì nếu bạn gặp phải một đỉnh mà bạn đã thấy? –