CComponentWisp
Робоче середовище з ШІ для коду

Сильні компоненти орієнтованого графа

Розбийте орієнтований граф до 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. Моделі

    Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою URL-адресою та API-ключем, якщо він потрібен. Перевірте з’єднання. Локальний сервер моделі має працювати; віддалені інструменти можуть окремо передавати дані.

  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)
Робоче середовище з ШІ для коду

Надайте групам залежностей значення, корисне програмі

ComponentWisp — робоче середовище програмування з ШІ для Windows для розробників, які простежують зв’язки в даних і коді проєкту. Додайте до розмови подання графа й споживача, якому потрібні його групи. Попросіть помічника дослідити значення напрямленого ребра перед пропозицією змін групування. Результат корисний лише тоді, коли збережені зв’язки відповідають питанню програми.

Завдання зі strong_components.py може досліджувати групи, вершини яких досяжні одна з одної напрямленими шляхами. Використайте невеликий приклад залежностей, щоб відрізнити взаємну досяжність від одностороннього зв’язку, а потім перевірте реалізацію та порядок результатів. Якщо застосовуєте код до залежностей, явно визначте відображення реальних об’єктів у вершини; сама функція не встановлює значення цих залежностей.

Після прочитання пропозиції запустіть перевірки проєкту з циклом, одностороннім зв’язком та ізольованими вершинами. Дослідіть, чи споживач послідовно обробляє отримані групи. ComponentWisp підключається до підтримуваних кінцевих точок, сумісних з OpenAI, або Anthropic з обліковими даними за потреби. Моделі без обмежень можна вибрати там, де їх пропонують, а обмеження, інструменти й межі контексту визначають модель і сервер. Зберігайте в розмові значення ребер та очікувані групи, щоб подальші зміни зберігали ту саму програмну вимогу.

Питання щодо коду групування залежностей

Чи достатньо односторонньої залежності для об’єднання об’єктів?

Не для групи, визначеної взаємною напрямленою досяжністю. Укажіть потрібне правило групування й додайте односторонній приклад, щоб запропонована реалізація випадково не сприйняла напрямлений зв’язок як ненапрямлений.

Як відображати реальні об’єкти проєкту у вершини?

Зберігайте явне відображення, за яким споживач може тлумачити результати. Дослідіть видалення чи зміну порядку об’єктів і перевірте, що повернені групи все ще посилаються на потрібні об’єкти проєкту.

Чи визначає групування залежностей порядок виконання?

Воно відповідає на інше питання. Програмі може знадобитися додаткова логіка впорядкування груп або обробки циклів. Визначте цю вимогу окремо й дослідіть відповідного споживача, не вважаючи розбиття повним планом виконання.

Навіщо додавати ізольовані вершини до перевірок?

Вони перевіряють, що об’єкти без ребер усе одно отримують очікуване програмою подання. Перевірте результат функції й вигляд у споживача, особливо якщо рефакторинг будує проміжні структури обходом лише наявних зв’язків.

Завантажити для Windows ↗

ComponentWisp · Оновлено 2026-10-25