Anda dapat mencoba membuat versi Floyd-Warshall yang lebih cepat pada matriks yang jarang.
Pertama, mari kita ingat apa yang dilakukan algoritma ini:
Biarkan menjadi matriks jarak. Pada awal algoritma M i , j adalah bobot ujung i → j . Jika tepi ini tidak ada maka M i , j = ∞ .MMi,ji→jMi,j=∞
Algoritma ini memiliki langkah-langkah Pada langkah k dari algoritma, untuk setiap pasangan node i , j kita aturVki,j
Mi,j←min{Mi,j,Mi,k+Mk,j}.
Jelas jika atau maka tidak ada pembaruan yang perlu dilakukan. Jadi, pada langkah pertama algoritma, kita hanya perlu melakukan kira-kira perbandingan di mana dan menunjukkan jumlah tepi masuk dan keluar dari simpul masing-masing. Seiring dengan perkembangan algoritma, semakin banyak entri dari matriks yang terisi. Karenanya, langkah terakhir mungkin membutuhkan waktu lebih lama.Mi,k=∞Mk,j=∞degin(k)⋅degout(k)degin(k)degout(k)kM
Perhatikan bahwa kita membutuhkan cara yang efisien untuk beralih hanya pada sel-sel non-infinite di baris ke- dan kolom dari matriks. Ini dapat dilakukan dengan menjaga satu set tepi yang masuk dan keluar untuk setiap node.k
Tampak bahwa langkah-langkah pertama dari algoritma dapat sangat diuntungkan dari sparsity. Misalnya, grafik yang dibangun secara acak dengan menunjukkan bahwa iterasi pertama ( ) hanya langkah. Jika grafik dibagi menjadi banyak komponen yang terhubung maka matriks akan tetap relatif jarang di seluruh algoritma dan total runtime bisa serendah . Di sisi lain, jika grafik hanya berisi satu komponen yang terhubung, maka iterasi terakhirdiharapkan untuk mengambil langkah . Dalam hal ini total run-time bisa . Sebesar versi non-jarang.k = 0 O ( 1 ) M O ( V ) k = | V | O ( V 2 )E=O(V)k=0O(1)MO(V)k=|V|O(V2)O(V3)