Cập nhật:
Giải pháp này không đúng.
Thật không may, giải pháp chỉ đúng (và đơn giản) cho cây! Tìm đường kính của cây thậm chí không cần điều này. Đây là một ví dụ cho đồ thị (đường kính là 4, thuật toán trả về 3 nếu bạn chọn này ):v
Nếu đồ thị được định hướng thì điều này khá phức tạp, đây là một số bài báo khẳng định kết quả nhanh hơn trong trường hợp dày đặc hơn là sử dụng thuật toán cho các đường dẫn ngắn nhất của tất cả các cặp.
Tuy nhiên, điểm chính của tôi là về trường hợp đồ thị không được định hướng và với các âm lượng không âm, tôi đã nghe về một mẹo hay nhiều lần:
- Chọn một đỉnh v
- Tìm sao cho d ( v , u ) là cực đạiud(v,u)
- Tìm sao cho d ( u , w ) là tối đawd(u,w)
- Trả về d(u,w)
Độ phức tạp của nó giống như hai lần tìm kiếm đầu tiên liên tiếp, đó là nếu biểu đồ được kết nối².O(|E|)
Có vẻ như văn hóa dân gian nhưng hiện tại, tôi vẫn đang cố gắng để có được một tài liệu tham khảo hoặc để chứng minh sự điều chỉnh của nó. Tôi sẽ cập nhật khi tôi đạt được một trong những mục tiêu này. Có vẻ như rất đơn giản, tôi đăng câu trả lời của mình ngay bây giờ, có thể ai đó sẽ nhận được nó nhanh hơn.
¹ nếu đồ thị có trọng số, wikipedia dường như nói nhưng tôi chỉ chắc chắn về O ( | E | log | V | ) .O(|E|+|V|log|V|)O(|E|log|V|)
² Nếu đồ thị không được kết nối, bạn nhận được nhưng bạn có thể phải thêm O ( α ( | V | ) ) để chọn một phần tử từ mỗi thành phần được kết nối. Tôi không chắc chắn nếu điều này là cần thiết và dù sao, bạn có thể quyết định rằng đường kính là vô hạn trong trường hợp này.O(|V|+|E|)O(α(|V|))