Tôi cần để có thể thao tác một đồ thị lớn (10^7 nút) trong python. Các dữ liệu tương ứng với mỗi nút/cạnh là tối thiểu, nói rằng, một số lượng nhỏ các chuỗi. Hiệu quả nhất, về bộ nhớ và tốc độ, cách thực hiện điều này là gì?Cấu trúc dữ liệu đồ thị hiệu quả nhất trong Python là gì?
Nguyên tắc dicts linh hoạt hơn và đơn giản hơn để triển khai, nhưng tôi trực giác mong đợi danh sách các danh sách sẽ nhanh hơn. Tùy chọn danh sách cũng sẽ yêu cầu tôi giữ dữ liệu riêng biệt với cấu trúc, trong khi dicts sẽ cho phép loại nội dung nào đó:
graph[I][J]["Property"]="value"
Bạn sẽ đề xuất điều gì?
Vâng, tôi phải hiểu rõ hơn về ý nghĩa của hiệu quả. Trong trường hợp cụ thể này, tôi có nghĩa là nó về truy xuất ngẫu nhiên.
Việc tải dữ liệu vào bộ nhớ không phải là vấn đề lớn. Điều đó được thực hiện một lần và cho tất cả. Phần tiêu tốn thời gian là truy cập các nút để tôi có thể trích xuất thông tin và đo các chỉ số mà tôi quan tâm.
Tôi đã không coi việc tạo từng nút là một thuộc tính (giống nhau cho tất cả các nút). như vậy sẽ thêm một lớp chi phí trên không? Tôi đã hy vọng một người nào đó sẽ có một số kinh nghiệm trực tiếp với một trường hợp tương tự mà họ có thể chia sẻ. Sau khi tất cả, đồ thị là một trong những trừu tượng phổ biến nhất trong CS.
NetworkX là tuyệt vời, nhưng thật đáng buồn nó có vấn đề xử lý 10^7 nút. Tôi thường xuyên đi qua RAM 16GB chỉ với 2M nút 15M cạnh và một vài thuộc tính int. Quên về việc nhận được bất cứ điều gì huyền ảo hơn thế. – Sint