Tôi có một tập dữ liệu là một biểu đồ tuần hoàn không trọng số lớn Các chu kỳ xảy ra trong các vòng lặp khoảng 5-6 đường dẫn. Nó bao gồm khoảng 8000 nút và mỗi nút có từ 1-6 (thường khoảng 4-5) kết nối. Tôi đang thực hiện các phép tính đường dẫn ngắn nhất một cặp và đã triển khai mã sau để thực hiện tìm kiếm theo chiều rộng.Tìm kiếm theo chiều rộng đầu tiên này có thể nhanh hơn không?
from Queue import Queue
q = Queue()
parent = {}
fromNode = 'E1123'
toNode = 'A3455'
# path finding
q.put(fromNode)
parent[fromNode] = 'Root'
while not q.empty():
# get the next node and add its neighbours to queue
current = q.get()
for i in getNeighbours(current):
# note parent and only continue if not already visited
if i[0] not in parent:
parent[i[0]] = current
q.put(i[0])
# check if destination
if current == toNode:
print 'arrived at', toNode
break
Đoạn mã trên sử dụng các mô-đun Python 2.6 Queue và getNeighbours() chỉ đơn giản là một chương trình con mà làm cho một cuộc gọi MySQL đơn và trả về những người hàng xóm như một danh sách các hàng ví dụ (('foo',), ('bar',)). Cuộc gọi SQL nhanh chóng.
Mã công trình ok tuy nhiên thử nghiệm để xuống độ sâu khoảng 7 lớp mất khoảng 20 giây để chạy (2.5GHz Intel 4GB RAM OS X 10.6)
tôi hoan nghênh bất kỳ bình luận về làm thế nào để cải thiện thời gian thời gian của mã này.
được phân bổ, 8000 nút sẽ dễ dàng vừa với bộ nhớ. –
Cuộc gọi tốt! Bảng có thông tin nút đơn giản là các hàng fromNode, toNode. Tôi sẽ điều tra chỉ đơn giản là tải nó vào bộ nhớ .. có thể chỉ là một cấu trúc từ điển lớn. – timbo
Là một thử nghiệm đơn giản, tôi đã tải MySQL vào bộ nhớ bằng cách sử dụng ENGINE = MEMORY trên định nghĩa CREATE TABLE. Cùng một mã bây giờ hoàn thành trong khoảng 2,5 giây! – timbo