2012-03-29 35 views
7

Tôi đang làm việc trên một dự án liên quan đến các thuật toán đang chạy trên các biểu đồ lớn. Lớn nhất hai có khoảng 300k và 600k đỉnh (khá thưa thớt tôi nghĩ). Tôi hy vọng sẽ tìm thấy một thư viện java có thể xử lý các đồ thị lớn và cũng có các cây có kích thước hơi nhỏ hơn, vì một trong các thuật toán tôi sẽ sử dụng liên quan đến việc phân tách biểu đồ thành một cây. Lý tưởng nhất là thư viện cũng sẽ bao gồm tìm kiếm đầu tiên rộng rãi và các thuật toán đường đi ngắn nhất của Dijkstra hoặc các thuật toán ngắn nhất khác.Thư viện Java để lưu trữ và xử lý đồ thị lớn (lên tới 600k đỉnh)

Dựa trên another question, tôi đã nhìn vào một vài thư viện (JGraphT, JUNG, jdsl, yworks) nhưng tôi có một thời gian khó khăn để tìm ra có bao nhiêu đỉnh họ thực tế có thể xử lý. Nhìn vào tài liệu của họ, tất cả những gì tôi có thể tìm thấy là một chút trong số JUNG FAQ cho biết nó có thể dễ dàng xử lý các đồ thị có đỉnh lên tới 150k đỉnh, vẫn còn nhỏ hơn một chút so với đồ thị của tôi ... hoặc nhiều thư viện này và có thể cho tôi biết nếu nó sẽ xử lý các kích thước biểu đồ tôi cần hoặc nếu có một số thư viện khác sẽ tốt hơn.

Để lưu bản ghi, tôi không cần bất kỳ công cụ trực quan nào; điều này là nghiêm chỉnh về đại diện cho các đồ thị và cây trong cấu trúc dữ liệu và chạy các thuật toán trên chúng.

Bối cảnh nếu có ai thực sự quan tâm: đối với một lớp, tôi phải triển khai thuật toán được mô tả trong một bài nghiên cứu và chạy thử nghiệm trong bài báo tốt nhất có thể. Giấy và tập dữ liệu tôi sẽ sử dụng có thể được tìm thấy here. Giáo sư của tôi nói rằng tôi có thể sử dụng bất kỳ thư viện nào mà tôi có thể tìm thấy miễn là tôi có thể cho biết sự phức tạp về thời gian/không gian của các thuật toán/cấu trúc dữ liệu là gì.

+1

Chỉ tìm thấy một số thông tin về [JGraphT] (http://jgrapht-users.107614.n3.nabble.com/Max-limit-of-vertices-td1194057.html). Rõ ràng nó sẽ xử lý các đồ thị này không có vấn đề gì ... – Maltiriel

Trả lời

3

Bạn nên xem Neo4J là cơ sở dữ liệu đồ họa có thể là giải pháp tốt cho sự cố của bạn.

+0

Cảm ơn, tôi đang xem xét điều này ngay bây giờ. Nó chắc chắn có thể xử lý các bộ dữ liệu đó. – Maltiriel

+1

Lần đầu tiên tôi sẽ thử một trong các thư viện trong bộ nhớ, vì đó là những gì được thực hiện trong bài báo vì vậy tôi nghĩ rằng prof của tôi sẽ tốt hơn, nhưng nếu điều đó không hiệu quả thì tôi sẽ đi với Neo4J. Nó có vẻ dễ sử dụng và nó có tất cả các thuật toán tôi cần. Cám ơn vì sự gợi ý! – Maltiriel

3

Thanh toán JGraph. Tuy nhiên nó được định hướng theo hình ảnh.

Ngoài ra, có thể Apache Hama - một khung công tác tính toán phân tán cho các phép tính khoa học khổng lồ, ví dụ: ma trận, đồ thị và thuật toán mạng.

Annas cũng có thể bạn quan tâm - framework mã nguồn mở Java đã được xây dựng cho các nhà phát triển và các nhà nghiên cứu trong các lĩnh vực Lý thuyết đồ thị - AI, con đường tìm kiếm, hệ thống phân phối, vv

+0

Hmm. Các thông tin tôi đã nhìn thấy làm cho nó có vẻ như thế này sẽ không được như phù hợp ... Trong hướng dẫn sử dụng họ bắt đầu bằng cách đi về swing ví dụ. Tôi không muốn phải rối tung với những thứ trực quan. Có thể, bạn có biết? – Maltiriel

+0

@Maltiriel, bạn có khả năng làm việc trên mô hình đồ thị độc lập. Tuy nhiên, nếu bạn không cần phải hình dung đồ thị, nó là một quá mức cần thiết. – tenorsax

+0

Cảm ơn các đề xuất bổ sung. Hama có thể hơi nhiều cho những gì tôi đang làm, nhưng Annas trông rất thú vị. Tôi đã không đi qua một trong những tìm kiếm của tôi trước khi điều này. – Maltiriel

1

Cassovary https://github.com/twitter/cassovary -project từ Twitter có thể xử lý các đồ thị rất lớn với Scala (do đó JVM) trong bộ nhớ.

Ngoài ra, phiên bản Java GraphChi có thể xử lý đồ thị thậm chí lớn hơn, bằng cách sử dụng đĩa: http://code.google.com/p/graphchi-java/

Tuy nhiên, GraphChi sẽ không được hiệu quả cho các thuật toán loại chính xác ngắn nhất con đường, như họ yêu cầu nhanh chóng truy cập ngẫu nhiên.

Các vấn đề liên quan