Lompat ke konten

Banding algoritma

Git punya lebih dari satu cara membuat diff. Semuanya menghasilkan jawaban yang benar; yang berbeda adalah jawaban mana yang paling enak dibaca manusia. Halaman ini menjalankan semuanya sekaligus supaya bedanya terlihat.

Myers, patience, dan histogram pada masukan yang sama. Patience biasanya menghasilkan script lebih panjang — itu memang tujuannya: minimal tidak sama dengan mudah dibaca.

Masukkan dua teks

Kiri versi lama, kanan versi baru. Belum punya bahan? Ambil dari daftar Contoh.

Sebelum dibandingkan, teks diubah menjadi daftar angka — satu angka per baris, kata, atau karakter. Pilihan itulah yang menentukan apa yang dianggap sama, jadi ia mengubah kisinya, D-nya, dan diff yang keluar. Diff bukan satu hal: ia jawaban atas pertanyaan yang Anda ajukan.

Angkanya

Empat algoritma pada masukan yang sama: panjang script, jumlah hunk, sel V tersimpan, dan apakah minimalitas dijamin.
AlgoritmaPanjang script (D)Jumlah hunkSel V tersimpanMenjamin minimal
Myers2116Ya
Myers — linear space2122Ya
Patience21Tidak dijamin
Histogram21Tidak dijamin
Panjang script (D)
Jumlah baris yang dihapus dan disisipkan. Lebih kecil berarti lebih ringkas.
Jumlah hunk
Berapa banyak potongan terpisah yang harus dibaca. Lebih sedikit biasanya lebih enak.
Menjamin minimal
Apakah algoritma menjamin D sekecil mungkin — bukan apakah D-nya kebetulan minimal pada masukan ini.

Varian linear-space menyimpan lebih banyak sel daripada greedy di sini. Itu bukan salah hitung: ia menukar penyimpanan O(D²) dengan O(N+M) plus biaya tetap rekursi, dan pada masukan sekecil ini biaya tetapnya yang menang. Bedanya berbalik saat D bertambah — buka contoh yang lebih besar di edit graph untuk melihatnya.

Pada masukan ini keempatnya sepakat: D sama, jumlah hunk sama. Itu biasa pada suntingan kecil — perbedaannya muncul ketika ada baris berulang yang memberi Myers tempat berlabuh lain. Coba contoh "Saat patience menang".

Hanya Myers yang menjamin D minimal. Patience dan histogram menukar minimalitas dengan keterbacaan.

Keluarannya, berdampingan

Masukan yang sama, empat cara membacanya.

Myers

D = 2 · 1 hunk

@@ -1,5 +1,5 @@

Myers — linear space

D = 2 · 1 hunk

@@ -1,5 +1,5 @@

Patience

D = 2 · 1 hunk

@@ -1,5 +1,5 @@

Histogram

D = 2 · 1 hunk

@@ -1,5 +1,5 @@