Tôi đang làm việc bằng ngôn ngữ tối nghĩa với quản lý phụ thuộc kém. Để giúp đỡ 14000 tập tin codebase, tôi đã viết một số công cụ phân tích (trong Java) và đã tạo ra một biểu đồ phụ thuộc.Tìm các hòn đảo theo đồ thị được hướng dẫn
Tôi đã viết biểu đồ của riêng mình và các lớp BFS và chúng hoạt động tốt. Với họ, tôi có các phương pháp như getParents()
và getChildren()
.
Bây giờ tôi đang cố gắng tìm 'đảo' trong biểu đồ này; đó là để nói, tôi đang cố gắng để tìm thấy những phần của codebase của chúng tôi không phụ thuộc vào nhau, với hy vọng thu thập chúng thành các mô-đun bị cô lập.
Sau đó, tôi cũng có kế hoạch phân tích các hòn đảo riêng lẻ để xem có điểm yếu nào trong đó chúng ta có thể thiết lập hàng rào mô-đun và xác định giao diện của mô-đun hay không.
Ngay bây giờ, tôi đang nghĩ đến việc làm điều này:
Map<DependencyEntry, Set<DependencyEntry>> allChildren = new ...;
for(DependencyEntry entry : allFiles) allChildren.put(entry,getAllChildren(entry));
Set<DependencyEntry> visited = new ...;
Set<DependencyEntry> largest = new HashSet<DependencyEntry>(); // size 0
// slightly more expensive but more readable
for(DependencyEntry entry : allChildren.keySet()) {
Set<DependencyEntry> set = allChildren.get(key);
if(set.size() > largest.size()) largest = set;
}
visited.addAll(largest);
này nên cung cấp cho tôi những hòn đảo lớn nhất. Từ đó, tôi có thể đi qua và loại trừ bất kỳ bộ nào chứa bất kỳ nút đã truy cập nào và sau đó chạy lại để có được hòn đảo lớn nhất tiếp theo, v.v.
Đây có phải là thuật toán chính xác không? Có cách nào tốt hơn để giải quyết vấn đề này mà tôi không thấy?
câu hỏi thú vị thấy đấy, làm mới thay đổi so với làm cách nào để làm XX trong ngôn ngữ YY hoặc giúp với mã lỗi 0x34 câu hỏi! – GBa