Bahasa Melayu

Alat pembangun · Perbandingan teks

Cara Perbezaan Teks Mencari Baris Berubah: LCS dan Algoritma Myers

· Bagaimana ia berfungsi

perbezaan teks algoritma aliran kerja pembangun

Dua jujukan baris dicantumkan oleh laluan melalui entri padanan mereka
Ilustrasi vektor ToolAcre asal

Menerangkan idea terpanjang-biasa-seterusnya di sebalik perbandingan berasaskan baris dan sebab algoritma Myers menjadikannya cukup pantas untuk dijalankan serta-merta, walaupun di dalam tab pelayar.

Dua fail, satu soalan: baris mana yang terselamat? — bingkai perbandingan sebagai mencari larian garisan terpanjang yang biasa bagi kedua-dua versi dan bukannya padanan nombor baris

Dua semakan tidak tiba dengan label yang menyatakan baris mana yang terselamat. ToolAcre mula-mula membahagikan setiap teks ke dalam senarai tersusun, kemudian mencari urutan panjang yang muncul dalam kedua-dua senarai dalam susunan yang sama. Garisan di luar tulang belakang yang dikongsi menjadi tambahan atau penyingkiran dan bukannya pengubahsuaian yang dijangka.

Hasilnya membawa kedudukan berasaskan satu asal untuk kedua-dua belah pihak. Baris yang tidak berubah mempunyai nombor pada setiap sisi, penyingkiran sahaja di sebelah kiri dan penambahan sahaja di sebelah kanan. Perakaunan itu menjadikan cerita yang dipaparkan boleh disemak walaupun apabila baris berulang memberikan lebih daripada satu penjajaran yang munasabah.

Mengapa diff berfungsi pada baris, bukan aksara — cara pemisahan pada baris baharu menukarkan teks menjadi urutan unit setanding dan sebab itu menjadikan prosa berkelakuan berbeza daripada kod

Pelaksanaan menganggap baris lengkap sebagai unit perbandingannya. Oleh itu, sempadan baris baharu membentuk hasil: suntingan satu perkataan di dalam perenggan yang disimpan pada satu baris menggantikan keseluruhan baris itu, manakala prosa yang sama disusun ayat demi ayat boleh mengasingkan kawasan yang lebih kecil.

Perbandingan baris bukanlah analisis aksara yang tersembunyi di sebalik paparan yang berbeza. `splitLines` mencipta tatasusunan dan jadual LCS membandingkan satu kekunci baris dengan yang lain. Kebutiran boleh ramal ini sesuai dengan fail sumber dan konfigurasi, tetapi ia tidak dapat menyerlahkan huruf tepat yang diubah dalam penggantian yang kelihatan sepadan.

Susunan biasa terpanjang dalam istilah biasa — berjalan melalui idea LCS pada contoh lima baris dan menunjukkan bagaimana segala-galanya di luar urutan menjadi sisipan atau pemadaman

Bayangkan garis kiri A, B, C, D, E dan garisan kanan A, C, E. A, C dan E membentuk urutan sepunya tertib. B dan D berada di luarnya, jadi hasilnya melaporkan dua pengalihan keluar dan tiga baris tidak berubah tanpa perlu memasangkan sama ada baris yang dialih keluar dengan penggantian.

Jadual merekodkan, untuk setiap pasangan kedudukan yang tinggal, panjang perkongsian terbaik yang tersedia dari sana. Pembinaan semula berjalan ke hadapan melalui nilai-nilai tersebut. Kekunci yang sama memajukan kedua-dua belah pihak; jika tidak, nilai jiran yang lebih besar memutuskan sama ada untuk mengeluarkan penyingkiran kiri atau tambahan kanan.

Algoritma Myers dan sebab kelajuan penting — menerangkan, tanpa formula, cara mengesan skrip edit terpendek memastikan perbandingan pantas pada fail dengan beribu-ribu baris

Buku kerja menamakan Myers, tetapi `diff.js` secara eksplisit melaksanakan pengaturcaraan dinamik terpanjang-biasa-seterusnya biasa. Komennya menyatakan O(n·m) masa dan ingatan untuk bahagian tengah yang berbeza. Menuntut Myers atau tingkah laku graf-edit terpendek akan menggantikan algoritma biasa untuk kod yang sebenarnya dihantar.

ToolAcre mengehadkan kos sebelum peruntukan. Awalan dan akhiran yang sama dikupas dalam laluan linear, dan sama ada tengah yang berbeza mungkin mengandungi paling banyak 2,000 baris. Matriks ialah `Uint32Array`; segi empat sama terburuk yang dibenarkan yang didokumenkan menduduki kira-kira enam belas megabait dan bukannya nilai kotak tanpa had.

ToolAcre menggunakan jadual LCS, bukan algoritma Myers yang dinamakan dalam rangka

Bandingkan log perubahan yang mengandungi "Carian tambahan", "Eksport tetap" dan "Bantuan dikemas kini" dengan semakan yang menyimpan entri pertama dan ketiga tetapi memasukkan "Penapis Ditambah" sebelum yang terakhir. Entri biasa menambat laluan, "Eksport tetap" dialih keluar dan "Penapis tambahan" ditambah.

Algoritma tidak memanggil pasangan itu sebagai baris yang diubah suai. Perbendaharaan kata barisnya sahaja sama, tambah dan buang, jadi penggantian teks muncul sebagai satu penyingkiran diikuti dengan satu penambahan. Ringkasan mengira operasi tersebut secara berasingan dan menandakan teks yang sama sahaja apabila kedua-dua kiraan adalah sifar.

Mengapa dua perbezaan yang betul boleh kelihatan berbeza — menunjukkan cara hubungan antara skrip edit yang sama pendek menerangkan sebab satu alat menyalahkan baris kosong dan satu lagi menyalahkan kurungan penutup

Garisan berulang atau boleh ditukar ganti boleh menghasilkan beberapa urutan biasa yang sama panjang. ToolAcre menyelesaikan satu seri dengan memilih penyingkiran apabila dua nilai jadual bersebelahan adalah sama. Pelaksanaan lain yang betul boleh memilih tambahan dahulu dan menunjukkan penjajaran yang kelihatan berbeza dengan kos suntingan yang sama.

Itulah sebabnya garisan kosong atau pendakap penutup boleh kelihatan dilekatkan pada sekeping lain di seluruh alat. Percanggahan itu tidak bermakna sama ada perbandingan kehilangan kandungan secara automatik. Baca nombor baris asal dan sekitar baris yang tidak berubah sebelum menganggap perbezaan pembentangan sebagai tuntutan fakta yang bersaing.

Perkara yang tidak dicakupi ini — perbandingan semantik atau struktur, pengesanan pergerakan dan penonjolan peringkat perkataan adalah di luar apa yang dikira perbezaan berasaskan baris

Tiada apa-apa dalam laluan ini menghuraikan pokok sintaks, mengecam pengecam yang dinamakan semula, melabelkan blok yang dialihkan atau memahami makna prosa. Perenggan yang dialihkan melanggar keperluan pesanan dikongsi dan boleh muncul sekali sebagai dialih keluar dan sekali sebagai ditambah. Alat ini juga tidak mengira sorotan tahap aksara atau perkataan di dalam baris.

Kelalaian tersebut adalah sempadan, bukan mod tersembunyi. Gunakan penyemak yang memahami bahasa untuk tuntutan semantik dan kawalan versi untuk sejarah gabungan. Perbezaan teks menjawab soalan yang lebih sempit tentang bagaimana dua jujukan baris tersusun berbeza, kemudian membolehkan manusia mentafsir sama ada suntingan teks tersebut penting.

Bawa pulang: maksud baris yang diserlahkan sebenarnya — meringkaskan cara membaca perbezaan baris sebagai cerita pengeditan terpendek dan cara Perbandingan Teks ToolAcre menjalankan ini dalam tab anda tanpa memuat naik apa-apa

Baca baris hijau dan merah sebagai satu penjelasan LCS, bukan sebagai bukti niat pengarang. Pemangkasan awalan dan akhiran mengubah jumlah kerja tetapi bukan perakaunan baris akhir. Teks asal kekal dalam setiap baris walaupun pilihan huruf besar atau ruang kosong membekalkan kunci yang lebih longgar untuk pemadanan.

Perbandingan dilaksanakan melalui modul pelayar yang diimport dan dipaparkan dengan nod teks DOM; tiada titik akhir penukaran dalam laluan alat. Cuba contoh lima baris, tukar sisi dan muat turun keluaran berbentuk tampalan untuk melihat cara arah menukar penambahan kepada penyingkiran tanpa mencipta semantik.