CComponentWisp
AI 코딩 작업 공간

유향 강연결 요소

정점이 최대 64개인 방향 그래프를 강한 연결 요소로 분할합니다.

● ● ●ComponentWisp●
작업 흐름 · 유향 강연결 요소 ×
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)
✳유향 강연결 요소
✓ 변경 사항적용하기 전에 검토하세요 ↗
작업 공간 예시 화면
  1. 적용하기 전에 검토하세요

    실제 동작을 예상 결과와 비교하세요. 검사가 실패하면 다음 변경을 하기 전에 원인을 조사하세요.

  2. 모델

    기본 URL과 필요한 API 키로 OpenAI 호환 또는 Anthropic 엔드포인트를 설정하고 연결을 테스트하세요. 로컬 모델 서버는 실행 중이어야 합니다. 원격 도구는 데이터를 별도로 전송할 수 있습니다.

  3. 프로젝트

    순환, 고립 정점과 빈 입력을 시험하고 인접 집합을 바꾸지 않으면서 잘못된 집합 원소를 거부합니다.

작업 흐름

유향 강연결 요소

작업 흐름 ↗
작업 흐름
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)
AI 코딩 작업 공간

의존성 그룹에 애플리케이션이 사용할 수 있는 의미를 부여하세요

ComponentWisp는 프로젝트 데이터와 코드를 통해 관계를 추적하는 개발자를 위한 Windows AI 코딩 작업 공간입니다. 그래프 표현과 그 그룹이 필요한 소비부를 대화에 가져오세요. 그룹화 변경을 제안하기 전에 도우미에게 방향 간선의 의미를 살펴보도록 요청하세요. 결과가 보존하는 관계가 애플리케이션이 답하려는 질문과 맞아야 유용합니다.

strong_components.py 관련 작업에서는 정점들이 방향 경로를 통해 서로 도달할 수 있는 그룹을 살펴볼 수 있습니다. 작은 의존성 예제로 상호 도달 가능성과 단방향 연결을 구분하고 구현과 출력 순서를 검토하세요. 의존성에 코드를 적용한다면 실제 객체와 정점의 대응을 명시하세요. 도우미 함수만으로 의존성의 의미를 확립할 수는 없습니다.

제안을 읽은 후 사이클, 단방향 링크, 고립 정점으로 프로젝트 검사를 실행하세요. 소비부가 결과 그룹을 일관되게 다루는지 살펴보세요. ComponentWisp는 지원되는 OpenAI 호환 또는 Anthropic 엔드포인트에 연결하며 필요하면 인증 정보를 사용합니다. 제공되는 경우 제한 없는 모델을 선택할 수 있지만 제한, 도구, 컨텍스트 한도는 모델과 서버가 결정합니다. 후속 수정에서도 같은 소프트웨어 요구를 유지하도록 간선의 의미와 예상 그룹을 대화에 남겨 두세요.

의존성 그룹화 코드에 관한 질문

단방향 의존성만으로 객체를 같은 그룹에 넣을 수 있나요?

상호 방향 도달 가능성으로 정의한 그룹에서는 안 됩니다. 의도한 그룹화 규칙과 단방향 예제를 명시하여 제안된 구현이 방향 관계를 무방향 연결로 잘못 취급하지 않도록 하세요.

실제 프로젝트 객체는 정점에 어떻게 대응해야 하나요?

소비부가 결과를 해석하는 데 쓸 수 있는 명시적인 매핑을 유지하세요. 객체를 삭제하거나 재정렬할 때의 동작을 살펴보고 반환 그룹이 여전히 의도한 프로젝트 객체를 참조하는지 테스트하세요.

의존성을 그룹화하면 실행 순서가 정해지나요?

이는 다른 질문에 답하는 작업입니다. 애플리케이션에는 그룹 순서 결정이나 사이클 처리를 위한 추가 로직이 필요할 수 있습니다. 분할이 완전한 실행 계획이라고 가정하지 말고 요구를 별도로 파악하고 관련 소비부를 살펴보세요.

검사에 고립 정점을 포함하는 이유는 무엇인가요?

간선이 없는 객체도 애플리케이션이 기대하는 표현을 받는지 검증하기 위해서입니다. 특히 리팩터링이 기존 연결만 순회해 중간 구조를 만든다면 도우미 출력과 소비부 표시를 모두 확인하세요.

Windows용 다운로드 ↗

ComponentWisp · 업데이트 2026-10-25