Thành phần liên thông mạnh có hướng
Chia đồ thị có hướng tối đa 64 đỉnh thành các thành phần liên thông mạnh.
def strong_components(graph):
if type(graph) is not list or len(graph) > 64:
raise ValueError("scc.graph")
n = len(graph)
if any(type(row) is not set or any(type(v) is not int or not 0 <= v < n for v in row) for row in graph):
raise ValueError("scc.edge")
seen, order = set(), []
for start in range(n):
if start in seen:
continue
seen.add(start)
stack = [(start, iter(sorted(graph[start])))]
while stack:
node, edges = stack[-1]
target = next(edges, None)
if target is None:
order.append(node)
stack.pop()
elif target not in seen:
seen.add(target)
stack.append((target, iter(sorted(graph[target]))))
reverse = [set() for _ in graph]
for node, edges in enumerate(graph):
for target in edges:
reverse[target].add(node)
seen, result = set(), []
for start in reversed(order):
if start in seen:
continue
group, pending = [], [start]
seen.add(start)
while pending:
node = pending.pop()
group.append(node)
for target in reverse[node]-seen:
seen.add(target)
pending.append(target)
result.append(sorted(group))
return sorted(result)
Kiểm tra trước khi áp dụng
So sánh hành vi thực tế với kết quả mong đợi. Nếu kiểm tra thất bại, tìm nguyên nhân trước khi sửa tiếp.
Mô hình
Cấu hình endpoint tương thích OpenAI hoặc Anthropic bằng URL cơ sở và khóa API nếu cần. Kiểm tra kết nối. Máy chủ mô hình cục bộ phải đang chạy; công cụ từ xa có thể truyền dữ liệu riêng.
Dự án
Kiểm tra chu trình, đỉnh cô lập và đầu vào rỗng, đồng thời từ chối phần tử tập không hợp lệ mà không sửa các tập kề.
def strong_components(graph):
if type(graph) is not list or len(graph) > 64:
raise ValueError("scc.graph")
n = len(graph)
if any(type(row) is not set or any(type(v) is not int or not 0 <= v < n for v in row) for row in graph):
raise ValueError("scc.edge")
seen, order = set(), []
for start in range(n):
if start in seen:
continue
seen.add(start)
stack = [(start, iter(sorted(graph[start])))]
while stack:
node, edges = stack[-1]
target = next(edges, None)
if target is None:
order.append(node)
stack.pop()
elif target not in seen:
seen.add(target)
stack.append((target, iter(sorted(graph[target]))))
reverse = [set() for _ in graph]
for node, edges in enumerate(graph):
for target in edges:
reverse[target].add(node)
seen, result = set(), []
for start in reversed(order):
if start in seen:
continue
group, pending = [], [start]
seen.add(start)
while pending:
node = pending.pop()
group.append(node)
for target in reverse[node]-seen:
seen.add(target)
pending.append(target)
result.append(sorted(group))
return sorted(result)
Gán ý nghĩa mà ứng dụng dùng được cho nhóm phụ thuộc
ComponentWisp là không gian lập trình AI trên Windows cho lập trình viên lần theo quan hệ trong dữ liệu và mã dự án. Đưa dạng biểu diễn đồ thị và bên sử dụng cần các nhóm vào cuộc trao đổi. Yêu cầu trợ lý kiểm tra ý nghĩa cạnh có hướng trước khi đề xuất thay đổi phân nhóm. Kết quả chỉ hữu ích khi quan hệ được giữ khớp câu hỏi ứng dụng muốn trả lời.
Tác vụ quanh strong_components.py có thể xem nhóm mà các đỉnh đi tới nhau qua đường đi có hướng. Dùng ví dụ phụ thuộc nhỏ để phân biệt khả năng đi tới lẫn nhau với kết nối một chiều, rồi rà soát phần triển khai và thứ tự đầu ra. Nếu áp dụng mã cho phụ thuộc, nêu rõ ánh xạ đối tượng thực sang đỉnh; riêng hàm trợ giúp không thể xác định ý nghĩa những phụ thuộc ấy.
Sau khi đọc đề xuất, chạy kiểm tra dự án với chu trình, liên kết một chiều và đỉnh cô lập. Kiểm tra bên sử dụng xử lý các nhóm nhất quán. ComponentWisp kết nối điểm cuối tương thích OpenAI hoặc Anthropic được hỗ trợ, với thông tin xác thực khi cần. Có thể chọn mô hình không hạn chế nơi được cung cấp, còn mô hình và máy chủ quyết định hạn chế, công cụ và giới hạn ngữ cảnh. Giữ ý nghĩa cạnh và nhóm mong đợi trong cuộc trao đổi để sửa đổi sau giữ cùng yêu cầu phần mềm.
Câu hỏi về mã phân nhóm phụ thuộc
Phụ thuộc một chiều có đủ để nhóm các đối tượng cùng nhau?
Không với nhóm được định nghĩa bằng khả năng đi tới lẫn nhau có hướng. Nêu quy tắc phân nhóm dự định và kèm ví dụ một chiều để phần triển khai đề xuất không vô tình coi quan hệ có hướng là kết nối vô hướng.
Nên ánh xạ đối tượng dự án thực sang đỉnh thế nào?
Giữ ánh xạ tường minh mà bên sử dụng có thể dùng để diễn giải kết quả. Kiểm tra điều gì xảy ra khi đối tượng bị xóa hoặc đổi thứ tự và kiểm thử nhóm trả về vẫn chỉ đến đúng đối tượng dự án.
Phân nhóm phụ thuộc có quyết định thứ tự thực thi không?
Nó trả lời câu hỏi khác. Ứng dụng có thể cần thêm logic sắp thứ tự nhóm hoặc xử lý chu trình. Xác định yêu cầu ấy riêng và kiểm tra bên sử dụng liên quan thay vì cho rằng phân hoạch là kế hoạch thực thi hoàn chỉnh.
Vì sao đưa đỉnh cô lập vào kiểm tra?
Chúng xác minh đối tượng không có cạnh vẫn nhận dạng biểu diễn ứng dụng mong đợi. Kiểm tra cả đầu ra hàm và góc nhìn bên sử dụng, nhất là khi tái cấu trúc tạo cấu trúc trung gian bằng cách chỉ duyệt kết nối hiện có.
ComponentWisp · Cập nhật 2026-10-25