Masalah ini mengingatkan saya pada banyak pohon keputusan. Saya akan mempertimbangkan jenis solusi ini, yang mencoba untuk selalu memilih jalan yang paling menjanjikan, tetapi dengan melihat keseluruhan subgraph:
Mulai dari node sink, bekerja menuju sumber, satu tingkat pada satu waktu. Saat Anda melakukan ini, beri bobot pada setiap sisi. Bobot ini harus mewakili jumlah minimum yang harus Anda "bayar" atau Anda akan "mendapatkan" dengan melintasi subgraph mulai dari titik titik simpul ke. Misalkan kita berada pada level i + 1 dan kita bergerak ke level i. Inilah yang akan saya lakukan untuk menetapkan bobot untuk ujung yang menunjuk ke simpul level i:
- edge_weight = pointing_node_weight.
- Temukan tepi mulai dari "titik menunjuk" dengan berat maksimum. Biarkan bobot ini menjadi next_edge_weight.
- edge_weight + = next_edge_weight
Kemudian, buat pesanan sebagai berikut:
- Biarkan S menjadi batas pencarian, yaitu set node untuk memilih dari selanjutnya.
- Pilih simpul agar (node_weight + maksimum_edge_weight) dimaksimalkan.
- Hapus simpul dari grafik dan S. Tambahkan simpul "anak-anak" ke S.
- Jika grafik tidak kosong, lanjutkan ke langkah 1.
- Berhenti.
Idenya adalah untuk melintasi subgraph yang akan memberi keuntungan sebanyak mungkin terlebih dahulu, agar dapat menanggung biaya subgraph bobot negatif nanti.