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
✳Hutan rentang minimum
✓ PerubahanTinjau sebelum menerapkan ↗
Ilustrasi ruang kerja
Tinjau sebelum menerapkan
Bandingkan perilaku sebenarnya dengan hasil yang diharapkan. Jika pemeriksaan gagal, cari penyebabnya sebelum membuat perubahan lain.
Model
Atur endpoint kompatibel OpenAI atau Anthropic dengan URL dasar dan kunci API jika diperlukan. Uji koneksi. Server model lokal harus berjalan; alat jarak jauh dapat mengirim data secara terpisah.
Proyek
Uji simpul terpisah, sisi paralel, loop dan seri deterministis, tolak ujung salah atau boolean tanpa mengubah masukan.
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
Ruang kerja kode dengan AI
Jadikan masukan tak terhubung bagian dari kontrak perangkat lunak graf
Forellin memberi pengembang ruang kerja pemrograman AI Windows untuk memeriksa kode pemrosesan graf bersama aplikasi yang bergantung padanya. Mulai percakapan proyek dengan representasi masukan dan hasil yang dibutuhkan pemanggil. Minta asisten memeriksa penanganan koneksi yang tidak ada, sisi berulang, dan urutan keluaran sebelum mengusulkan perubahan. Pilihan tersebut membentuk fitur sama besarnya dengan perhitungan inti.
Konteks spanning_forest.py menyarankan tugas ketika simpul tak terhubung memang diharapkan, bukan dianggap kegagalan menghubungkan semuanya. Anda dapat meminta model menjelaskan sisi yang dipilih dan hubungan jumlah total dengannya. Tinjau jawaban menggunakan graf kecil yang bisa diperiksa manual, lalu minta tambalan terarah jika kontrak hasil atau validasi perlu disesuaikan.
Jalankan pemeriksaan proyek pada masukan terhubung dan tak terhubung, serta periksa representasi simpul terisolasi dalam aplikasi di sekitarnya. Jika ada beberapa hasil valid, sepakati apakah pemilihan deterministik penting bagi pengguna hasil. Forellin menerima endpoint yang didukung, baik yang kompatibel dengan OpenAI maupun Anthropic, dengan kredensial jika diperlukan. Model AI tanpa filter dapat dipilih jika ditawarkan, tetapi pembatasan model, alat, dan kapasitas konteks tetap bergantung pada layanan yang dikonfigurasi. Ruang kerja mendukung penyelidikan Anda; contoh graf dan hasil pengujian mendukung penerimaan kode.
Pertanyaan untuk perubahan pemrosesan graf
Haruskah masukan tak terhubung selalu ditolak?
Hanya jika aplikasi membutuhkan satu struktur terhubung. Untuk hasil berupa hutan, komponen tak terhubung bisa valid. Nyatakan perbedaan itu sebelum meminta perbaikan agar asisten tidak memaksakan koneksi yang tidak pernah diberikan oleh masukan.
Bagaimana jika beberapa pilihan sisi memiliki jumlah total sama?
Putuskan apakah sembarang solusi optimal yang valid dapat diterima atau pengguna hasil memerlukan pilihan yang dapat diulang. Jika urutan atau perilaku seri penting, jadikan bagian dari hasil yang diharapkan dan uji secara eksplisit, bukan mengandalkan urutan masukan kebetulan.
Bagaimana memeriksa jumlah total yang dilaporkan?
Gunakan contoh kecil dan bandingkan sisi terpilih dengan jumlah bobotnya secara independen. Periksa juga apakah pemanggil hanya mengharapkan jumlah total atau struktur terpilih, karena keluaran tersebut mendukung perilaku aplikasi yang berbeda.
Mengapa menguji simpul terisolasi secara terpisah?
Simpul itu dapat hilang dari hasil yang hanya berisi sisi meskipun ada dalam masukan. Periksa representasi di sekitarnya dan putuskan cara aplikasi mempertahankan atau menampilkannya, alih-alih menganggap sisi terpilih menggambarkan setiap simpul.