Có tập lệnh này có tên là svnmerge.py mà tôi đang cố gắng tinh chỉnh và tối ưu hóa một chút. Tôi hoàn toàn mới với Python mặc dù, vì vậy nó không phải dễ dàng.Làm cách nào để tối ưu hóa các phép toán trên các bộ boolean lớn (75.000 mục) bằng Python?
Sự cố hiện tại dường như liên quan đến một lớp có tên là RevisionSet
trong tập lệnh. Về bản chất những gì nó làm là tạo ra một hashtable lớn (?) Của các giá trị boolean nguyên-key. Trong trường hợp xấu nhất - một cho mỗi lần sửa đổi trong kho SVN của chúng tôi, gần 75.000 bây giờ.
Sau đó, nó thực hiện các hoạt động được đặt trên các mảng lớn như vậy - cộng, trừ, giao lộ, v.v. Việc triển khai thực hiện là việc thực hiện O (n) đơn giản nhất, trong đó, tự nhiên, khá chậm trên các tập lớn như vậy. Toàn bộ cấu trúc dữ liệu có thể được tối ưu hóa bởi vì có các khoảng thời gian dài của các giá trị liên tục. Ví dụ: tất cả các khóa từ 1 đến 74.000 có thể chứa true
. Ngoài ra kịch bản được viết cho Python 2.2, đó là một phiên bản khá cũ và chúng tôi đang sử dụng 2,6 anyway, do đó, có thể có một cái gì đó để đạt được điều đó quá.
Tôi có thể tự mình cố gắng cùng nhau, nhưng sẽ rất khó và mất nhiều thời gian - chưa kể rằng nó có thể đã được triển khai ở đâu đó. Mặc dù tôi muốn trải nghiệm học tập, kết quả là quan trọng hơn ngay bây giờ. Những gì bạn sẽ đề nghị tôi làm gì?
Bạn muốn thực hiện những thao tác nào trên danh sách các toán tử? Một mảng boolean có thể giúp bạn được không? – eumiro
Cài đặt này có vẻ như là O (n), không phải O (n * m). 'if r trong rs' trong đó' rs' là một dict là một hoạt động O (1), không phải O (len (rs)). –
@Baffe Boyois - đúng, hãy nghĩ về nó. Đã sửa văn bản câu hỏi. –