Diberikan adalah dag. Anda ingin memberi label pada setiap node dengan berapa banyak node yang dapat dijangkau darinya. adalah batas atas sepele; Ω ( V + E ) adalah batas bawah (saya pikir). Apakah ada algoritma yang lebih baik? Adakah alasan untuk percaya bahwa batas bawah dapat ditingkatkan (terkait: apa yang sebenarnya diketahui tentang batas bawah untuk penutupan transitif)?
Motivasi: Saya harus melakukan ini beberapa kali sambil merepresentasikan rumus fol sebagai dags.
Sunting: Harap dicatat bahwa dengan melakukan menghitung jalur , bukan simpul yang dapat dijangkau . (Saya menambahkan ini karena ternyata banyak orang mengira solusi sederhana ini akan bekerja dengan suara yang saya lihat pada jawaban yang sekarang dihapus) lebih dari satu jalur. Juga, saya katakan, karena jika mereka dipecahkan, maka memecahkan digraf itu mudah.
sumber
Jawaban:
Penutupan transitif grafik berarah dengan edge dan n simpul dapat dihitung sedikit lebih cepat dari waktu O ( m n ) , tetapi tidak banyak. Sebuah O ( n 2 + m n / log n ) algoritma waktu disebutkan dalam catatan kaki dari Chan kertas 2005 gumpalan pada APSP (versi jurnal di Algorithmica 2008). Sedikit peningkatan ke O ( n 2 + m n log ( n 2 / m ) / log 2 nm n O ( m n ) O ( n2+ m n / logn ) O ( n2+ m n log( n2/ m) / log2n )
sumber
sumber
Mungkin tidak berguna dalam konteks Anda, tetapi Anda bisa mendapatkan perkiraan menggunakan Synopsis Difusion (http://www.cs.cmu.edu/~sknath/sd.htm). Saya pikir itu membuatnya O (V + E). Mensimulasikan difusi sinopsis pada uniprocessor bagi saya adalah O (V + E), (Anda perlu melakukan sortasi topologi terlebih dahulu, yang juga O (V + E)).
sumber