Gần đây tôi đã so sánh ban đầu về thời gian chạy của thuật toán Dijkstra sử dụng hai cấu trúc dữ liệu, PriorityQueue dựa trên nền tảng nhị phân, nếu tôi ' m không nhầm lẫn) và một vùng Fibonacci. Tôi đã sử dụng currentTimeMillis() của Java để thực hiện các phép tính của mình. Kết quả tôi đã kết thúc với khá thú vị. Đây là đầu ra cho một trong những testcases của tôi:Dijkstra trên Java: Nhận kết quả thú vị Sử dụng Fibonacci Heap so với PriorityQueue
Running Dijkstra's with 8 nodes and 27 links
- Execution time with binary heap: 1 miliseconds
- Execution time with Fibonacci heap: 4 miliseconds
Phải thừa nhận rằng, tôi là ngắn trên tập hợp dữ liệu tại thời điểm này, với đồ thị trên là lớn nhất của tôi (tôi có kế hoạch để làm sớm hơn). Nhưng điều này có ý nghĩa gì không? Tôi đã luôn luôn nghĩ rằng Fibonacci heaps nhanh hơn so với các cấu trúc dữ liệu khác do thời gian chạy phân bổ của chúng so với các cấu trúc dữ liệu khác. Tôi không thực sự chắc chắn rằng sự khác biệt 3 milisecond này đến từ đâu. (Tôi đang chạy nó trên bộ vi xử lý Intel Core Ivy Bridge i7-3630M, nếu điều đó có ích.)
Lưu ý: Tôi tình cờ gặp phải this thread có thể giải thích được vấn đề, mặc dù tôi vẫn chưa rõ lý do tại sao vùng Fibonacci phiên bản mất nhiều thời gian hơn. Theo chủ đề đó, nó có thể là do đồ thị của tôi không đủ dày đặc và do đó số lượng các hoạt động giảm-Key không đủ lớn để hiệu suất của vùng Fibonacci thực sự tỏa sáng. Đây có phải là kết luận hợp lý duy nhất, hoặc có cái gì khác tôi đang mất tích?
Bạn sẽ cần tập dữ liệu một số đơn hàng có cường độ lớn hơn 8 nút và 27 liên kết để có điểm chuẩn có ý nghĩa. – EJP
Yup, tôi hiểu ngay bây giờ. Tôi sẽ phải nhìn vào nó và xem những gì tôi có thể làm. Cảm ơn. –