Saya membaca makalah NJ Larsson, A. Moffat: Offline Dictionary-Based Compression , yang menjelaskan algoritma kompresi yang, jika saya memahaminya dengan benar, sangat mirip dengan pengkodean pasangan byte .
Diberikan string dengan panjang , saya mencoba memahami bagaimana seseorang dapat memampatkannya dalam linear, , waktu dengan metode kompresi ini. Bagaimana tepatnya hal ini dilakukan? Saya sudah membaca makalah, tetapi saya masih tidak mengerti bagaimana mereka mencapai waktu linier, jadi mungkin saya akan memahaminya menjelaskan dengan cara yang berbeda.
Kebingungan pertama saya muncul pada langkah pertama dalam algoritma, di mana kami menemukan pasangan yang paling umum, misalnya dalam abcababcabc
pasangan yang paling umum ab
akan digantikan oleh simbol baru, katakanlah XcXXcXc
. Saya tidak mengerti bagaimana kita dapat menemukan pasangan yang paling umum dengan cukup cepat. Pendekatan naif saya adalah melihat pertama pada pasangan pertama ab
dan kemudian menghitung jumlah kemunculan, kemudian melihat pasangan berikutnya bc
dan menghitung jumlah kemunculan, dll. Namun ini sudah memberikan hanya untuk menemukan pasangan paling umum satu kali .
Selanjutnya, bahkan jika saya mengerti bagaimana menemukan pasangan paling umum dalam waktu . Masalah saya berikutnya adalah, bukankah kita harus menemukan pasangan paling umum hingga kali? Dan karenanya ini akan memberikan total waktu ?