Sourena's personal page


روش فشرده سازی Rice-golomb

خوب اين روش هم بسيار ساده هستش و به راحتی هم قابل پياده سازی هستش.
من فقط يه توضيح مختصری در مورد الگوريتم و نحوه پياده سازی اون ميدم حالا اگر که در آينده وقت کردم حتماً اون رو با زبون cpp براتون مينويسم اگر نه هم که ديگه دست خودتونو ميبوسه.

توضيح الگوريتم:

فرض کنيم که عدد ثابت m رو داريم در اين صورت هر سمبل s رو ميتوان به صورت يک حاصل ضرب و يک حاصلجمع به صورت زير نمايش داد.

s=m*q+r

حالا مسئله اينجاست که اگه s کوچيک باشه يعنی به نسبت m کوچيک باشه اونوقت q هم کوچيک خواهد بود و اين نکته کليدی در اين روش هستش.راستی در اين روش کدينگ r به صورت باينری کد ميشه ولی q به صورت يوناری(unary) کد ميشه که حالا ميگم چی هستش.

خوب روش يوناری هم به اين صورت هستش که هر عدد رو به صورت همون تعداد يک و يک دونه صفر سمت راستش نمايش ميدن.مثلاً عدد 7 رو به صورت 7 تا 1 و يک صفر نمايش ميدن.(11111110) يا مثلاً 21 ميشه 21 تا يک با يک دونه صفر(خيلی مسخرس).

اگر m اي که انتخاب ميکنيم توانی از 2 باشه يعنی log2 (m)=k باشه و k هم يه عدد صحيح باشه اونوقت 3 شرط زير برقرار ميشه :

1. q از به اندازه k بيت شيفت به راست دادن s بدست می آيد (q=s >> k).
2. r از and منطقی کردن s و m-1 بدست می آيد ((r=s & (m-1).
3. r را ميتوان با استفاده از k بيت نمايش داد.

خوب ديگه با اين توضيحات فکر ميکنم الگوريتم ديگه خيلی ساده هستش پس ما اول ميايم يک k انتخاب ميکنيم بدش سمبل s رو از ورودی ميگيريم و با استفاده از k اون رو به q و r تبديل ميکنيم و در نهايت q رو به صورت unary و r رو بصورت باينری کد ميکنيم و ميفرستيم.

اينم از روش Rice...


فهرست

صفحه اصلی

(Compression) فشرده سازی

Huffman Coding
Arithmetic Coding
Delta Coding
Frequency Substitution
LZSS Coding
LZW Coding
Rice (Golomb) Coding
Run Length Encoding
Prediction by partial matching
Dynamic Markov Compression
bitio Library
Burrows-Wheeler Transform

مقالات آموزشی

free html visitor counters














Designed By S.M
Last Update : 4 March 2011