Untuk sejumlah kecil bit, tidak mungkin menyimpan banyak bit seperti yang ditunjukkan Glorfindel . Namun, jika domain yang Anda gunakan memiliki beberapa bit lebih banyak, Anda dapat mencapai penghematan yang signifikan untuk kasus rata-rata dengan menyandikan rentang dengan nilai awal dan delta.
Mari kita asumsikan domain adalah bilangan bulat, jadi 32 bit. Dengan pendekatan naif, Anda perlu 64 bit (mulai, akhir) untuk menyimpan rentang.
Jika kita beralih ke penyandian (mulai, delta), kita dapat membuat akhir rentang dari itu. Kita tahu bahwa dalam kasus terburuk, awal adalah 0 dan delta memiliki 32 bit.
2 ^ 5 adalah 32, jadi kami menyandikan panjang delta dalam lima bit (tanpa panjang nol, selalu menambahkan 1), dan enkode menjadi (mulai, panjang, delta). Dalam kasus terburuk, harganya 32 * 2 + 5 bit, jadi 69 bit. Jadi dalam kasus terburuk, jika semua rentang panjang, ini lebih buruk daripada pengkodean naif.
Dalam kasus terbaik, harganya 32 + 5 + 1 = 38 bit.
Ini berarti jika Anda harus menyandikan banyak rentang, dan rentang itu masing-masing hanya mencakup sebagian kecil dari domain Anda, Anda akhirnya menggunakan lebih sedikit ruang rata - rata menggunakan pengodean ini. Tidak masalah bagaimana start didistribusikan, karena start akan selalu mengambil 32 bit, tetapi tidak masalah bagaimana panjang rentang didistribusikan. Jika semakin kecil panjang yang Anda miliki, semakin baik kompresi, semakin banyak rentang yang Anda miliki yang mencakup seluruh panjang domain, semakin buruk pengkodean ini.
Namun, jika Anda memiliki banyak rentang yang dikelompokkan di sekitar titik awal yang sama, (misalnya karena Anda mendapatkan nilai dari sensor), Anda dapat mencapai penghematan yang lebih besar. Anda bisa menerapkan teknik yang sama dengan nilai awal dan menggunakan bias untuk mengimbangi nilai awal.
Katakanlah Anda memiliki 10.000 rentang. Rentang dikelompokkan di sekitar nilai tertentu. Anda menyandikan bias dengan 32 bit.
Dengan menggunakan pendekatan naif, Anda akan membutuhkan 32 * 2 * 10 000 = 640 000 bit untuk menyimpan semua rentang tersebut.
Pengkodean bias membutuhkan 32 bit, dan pengodean setiap rentang dalam kasus terbaik maka 5 + 1 + 5 + 1 = 12 bit, dengan total 120 000 + 32 = 120 032 bit. Dalam kasus terburuk, Anda membutuhkan 5 + 32 + 5 + 32 bit, sehingga 74 bit, dengan total 740 032 bit.
Ini berarti, untuk 10.000 nilai pada domain yang membutuhkan 32 bit untuk menyandikan, kita dapatkan
- 120 032 bit dengan pengkodean delta pintar dalam kasus terbaik
- 640 000 bit dengan awal yang naif, end encoding, selalu (tidak ada kasus terbaik atau terburuk)
- 740 032 bit dengan pengkodean delta pintar dalam kasus terburuk
Jika Anda menggunakan pengkodean naif sebagai baseline, itu berarti penghematan hingga 81,25% atau hingga 15,625% lebih banyak biaya.
Bergantung pada bagaimana nilai Anda didistribusikan, penghematan itu penting. Ketahui domain bisnis Anda! Ketahui apa yang ingin Anda enkode.
Sebagai ekstensi, Anda juga dapat mengubah bias. Jika Anda menganalisis data dan mengidentifikasi kelompok nilai, Anda dapat mengurutkan data ke dalam kotak dan menyandikan masing-masing kotak secara terpisah, dengan biasnya sendiri. Ini berarti Anda dapat menerapkan teknik ini tidak hanya untuk rentang yang dikelompokkan di sekitar nilai awal tunggal, tetapi juga untuk rentang yang dikelompokkan di sekitar beberapa nilai.
Jika titik awal Anda didistribusikan secara merata, pengkodean ini tidak benar-benar berfungsi dengan baik.
Pengkodean ini jelas sangat buruk untuk diindeks. Anda tidak bisa begitu saja membaca nilai x-th. Cukup banyak hanya dapat dibaca secara berurutan. Yang sesuai dalam beberapa situasi, misalnya streaming melalui jaringan atau penyimpanan massal (misalnya pada kaset atau HDD).
Mengevaluasi data, mengelompokkannya, dan memilih bias yang tepat dapat menjadi pekerjaan yang substansial dan mungkin memerlukan beberapa penyesuaian untuk hasil yang optimal.