Komponen terarah terhubung kuat
Bagi graf berarah dengan paling banyak 64 simpul menjadi komponen terhubung kuat.
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)
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 siklus, simpul terisolasi dan masukan kosong, serta tolak anggota himpunan yang tidak valid tanpa mengubah himpunan ketetanggaan.
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)
Berikan makna kelompok dependensi yang dapat digunakan aplikasi
ComponentWisp adalah ruang kerja pemrograman AI Windows untuk pengembang yang menelusuri relasi melalui data dan kode proyek. Sertakan representasi graf dan kode pengguna yang memerlukan kelompoknya dalam percakapan. Minta asisten memeriksa makna sisi berarah sebelum mengusulkan perubahan pengelompokan. Hasil hanya berguna jika relasi yang dipertahankannya sesuai pertanyaan yang hendak dijawab aplikasi.
Tugas seputar strong_components.py dapat memeriksa kelompok yang simpul-simpulnya saling terjangkau melalui lintasan berarah. Gunakan contoh dependensi kecil untuk membedakan keterjangkauan timbal balik dari koneksi satu arah, lalu tinjau implementasi dan urutan keluarannya. Jika menerapkan kode pada dependensi, nyatakan pemetaan objek nyata ke simpul secara eksplisit; fungsi bantu saja tidak dapat menetapkan makna dependensi tersebut.
Setelah membaca usulan, jalankan pemeriksaan proyek dengan siklus, tautan satu arah, dan simpul terisolasi. Periksa kode pengguna hasil untuk memastikan perlakuan konsisten terhadap kelompok yang dihasilkan. ComponentWisp terhubung ke endpoint yang didukung, baik yang kompatibel dengan OpenAI maupun Anthropic, dengan kredensial bila diperlukan. Model tanpa pembatasan dapat dipilih jika ditawarkan, sedangkan model dan server menentukan pembatasan, alat, dan batas konteks. Pertahankan makna sisi serta kelompok yang diharapkan dalam percakapan agar perubahan berikutnya menjaga kebutuhan perangkat lunak yang sama.
Pertanyaan tentang kode pengelompokan dependensi
Apakah dependensi satu arah cukup untuk mengelompokkan objek?
Tidak untuk kelompok yang didefinisikan oleh keterjangkauan berarah timbal balik. Nyatakan aturan pengelompokan yang dimaksud dan sertakan contoh satu arah agar usulan implementasi tidak tanpa sengaja memperlakukan relasi berarah sebagai koneksi tak berarah.
Bagaimana memetakan objek proyek nyata ke simpul?
Pertahankan pemetaan eksplisit yang dapat digunakan kode pengguna hasil untuk menafsirkan hasil. Periksa apa yang terjadi ketika objek dihapus atau diurutkan ulang, dan uji bahwa kelompok hasil tetap merujuk ke objek proyek yang dimaksud.
Apakah pengelompokan dependensi menentukan urutan eksekusi?
Itu menjawab pertanyaan berbeda. Aplikasi mungkin membutuhkan logika tambahan untuk mengurutkan kelompok atau menangani siklus. Identifikasi kebutuhan itu secara terpisah dan periksa kode pengguna terkait, bukan menganggap partisi sebagai rencana eksekusi lengkap.
Mengapa menyertakan simpul terisolasi dalam pemeriksaan?
Itu memverifikasi bahwa objek tanpa sisi tetap mendapat representasi yang diharapkan aplikasi. Periksa keluaran fungsi bantu dan tampilan pengguna hasil, terutama jika refaktor membangun struktur antara hanya dengan mengiterasi koneksi yang ada.
ComponentWisp · Diperbarui 2026-10-25