def spanning_forest(count, edges):
if type(count) is not int or not 0 <= count <= 64 or type(edges) is not list or len(edges) > 1024:
raise ValueError("forest.input")
ordered = []
for edge in edges:
if type(edge) not in (list, tuple) or len(edge) != 3 or any(type(x) is not int for x in edge):
raise ValueError("forest.edge")
a, b, weight = edge
if not 0 <= a < count or not 0 <= b < count or abs(weight) > 10**9:
raise ValueError("forest.bounds")
ordered.append((weight, min(a, b), max(a, b)))
parent = list(range(count))
def root(node):
while parent[node] != node:
parent[node] = parent[parent[node]]
node = parent[node]
return node
selected, total = [], 0
for weight, a, b in sorted(ordered):
x, y = root(a), root(b)
if x != y:
parent[x] = y
selected.append((a, b, weight))
total += weight
return total, selected
✳Minimalne lasy rozpinające
✓ ZmianySprawdź przed zastosowaniem ↗
Ilustracja środowiska
Sprawdź przed zastosowaniem
Porównaj rzeczywiste zachowanie z oczekiwanym wynikiem. Jeśli sprawdzenie się nie powiedzie, wyjaśnij przyczynę przed kolejnymi zmianami.
Modele
Dodaj endpoint zgodny z OpenAI lub Anthropic, podając bazowy URL i klucz API, jeśli jest wymagany. Sprawdź połączenie. Lokalny serwer modelu musi działać; zdalne narzędzia mogą przesyłać dane oddzielnie.
Projekt
Sprawdź rozłączne węzły, krawędzie równoległe, pętle i deterministyczne remisy, odrzucając błędne końce i wartości logiczne bez zmiany wejścia.
def spanning_forest(count, edges):
if type(count) is not int or not 0 <= count <= 64 or type(edges) is not list or len(edges) > 1024:
raise ValueError("forest.input")
ordered = []
for edge in edges:
if type(edge) not in (list, tuple) or len(edge) != 3 or any(type(x) is not int for x in edge):
raise ValueError("forest.edge")
a, b, weight = edge
if not 0 <= a < count or not 0 <= b < count or abs(weight) > 10**9:
raise ValueError("forest.bounds")
ordered.append((weight, min(a, b), max(a, b)))
parent = list(range(count))
def root(node):
while parent[node] != node:
parent[node] = parent[parent[node]]
node = parent[node]
return node
selected, total = [], 0
for weight, a, b in sorted(ordered):
x, y = root(a), root(b)
if x != y:
parent[x] = y
selected.append((a, b, weight))
total += weight
return total, selected
Środowisko programowania z AI
Uwzględnij niespójne dane w kontrakcie oprogramowania grafowego
Forellin zapewnia programistom środowisko programowania z AI dla Windows do badania kodu przetwarzania grafów wraz z zależną od niego aplikacją. Zacznij rozmowę o projekcie od reprezentacji wejścia i wyniku potrzebnego kodowi wywołującemu. Poproś asystenta o sprawdzenie obsługi brakujących połączeń, powtarzających się krawędzi i kolejności wyniku przed zaproponowaniem zmiany. Te decyzje kształtują funkcję równie mocno jak główne obliczenie.
Kontekst spanning_forest.py sugeruje zadanie, w którym niespójne węzły są oczekiwane, zamiast oznaczać nieudaną próbę połączenia wszystkiego. Możesz poprosić model o wyjaśnienie, które krawędzie są wybierane i jak wiąże się z nimi suma. Oceń odpowiedź na małym grafie, który da się sprawdzić ręcznie, a następnie poproś o ukierunkowaną poprawkę, jeśli kontrakt wyniku lub walidacja wymagają zmiany.
Uruchom kontrole projektu dla danych spójnych i niespójnych oraz sprawdź reprezentację izolowanych węzłów w otaczającej aplikacji. Jeśli istnieje kilka poprawnych wyników, ustal, czy deterministyczny wybór ma znaczenie dla odbiorcy. Forellin przyjmuje obsługiwane punkty końcowe zgodne z OpenAI lub Anthropic, z danymi uwierzytelniającymi w razie potrzeby. Model AI bez filtrowania można wybrać, jeśli jest oferowany, ale ograniczenia modelu, narzędzia i pojemność kontekstu nadal zależą od skonfigurowanej usługi. Środowisko wspiera badanie; przykłady grafów i wyniki testów uzasadniają akceptację kodu.
Pytania dotyczące zmiany przetwarzania grafów
Czy niespójne dane zawsze należy odrzucać?
Tylko jeśli aplikacja wymaga jednej spójnej struktury. W przypadku lasu niespójne składowe mogą być poprawne. Określ to rozróżnienie przed zleceniem poprawki, aby asystent nie wymuszał połączeń, których wejście nigdy nie dostarczyło.
Co jeśli różne wybory krawędzi mają tę samą sumę?
Zdecyduj, czy dopuszczalne jest dowolne poprawne optimum, czy odbiorca potrzebuje powtarzalnego wyboru. Jeśli kolejność lub rozstrzyganie remisów ma znaczenie, włącz je do oczekiwanego wyniku i testuj jawnie, zamiast polegać na przypadkowej kolejności wejścia.
Jak sprawdzić zgłaszaną sumę?
Użyj małego przykładu i niezależnie porównaj wybrane krawędzie z sumą ich wag. Sprawdź też, czy kod wywołujący oczekuje tylko sumy, czy wybranej struktury, ponieważ te wyniki obsługują różne zachowania aplikacji.
Dlaczego osobno testować izolowane węzły?
Mogą zniknąć z wyniku zawierającego wyłącznie krawędzie, nawet jeśli są obecne na wejściu. Sprawdź otaczającą reprezentację i zdecyduj, jak aplikacja ma zachować lub wyświetlać te węzły, zamiast zakładać, że wybrane krawędzie opisują każdy wierzchołek.