Sourena's personal page


جايگزينی فرکانسی (Frequency Substitution)

خوب اين روش همونجور که از اسمش پيداست بر اساس تکرار کاراکتر ها يا همون فرکانس اونها (فرکانس يعنی ميزان تکرار) کار ميکنه.خوب حالا يه مقدار در مورد الگوريتم صحبت ميکنيم و بعد هم يک پياده سازی به زبون cpp طبق معمول هميشه براتون ميزارم که حال کنيد.

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

همونطور که گفتم اين روش بسيار ساده هستش ولی خوب زياد کارايی خاصی نداره. اساس کار به اين صورت هستش که ميآييم کاراکتری که بيشترين تعداد تکرار رو داره جاش رو با کاراکتر با کد اسکی 0 عوض ميکنيم و کاراکتری که از لحاظ تکرار در مرتبه دوم هستش جايش رو با کاراکتر با کد اسکی يک عوض ميکنيم و به همين ترتيب ادامه ميديم تا آخر.خوب حالا اينايی که گفتم يعنی چه؟؟؟؟
يه مثال ميزنم که قضيه بيشتر جا بيفته براتون.
فرض کنيد متن زير رو داريم و ميخوايم کد بکنيمش.

3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6,2,6,4,3,3,8,3,2,7,9

همينطور که ميبينيد متن بلا از عداد 1 تا 9 تشکيل شده که البته اهميتی هم نداره و از هر چيزی ميتونست باشه.

حالا تو جدول زير تعداد تکرار هر کاراکتر رو مشخص ميکنيم.

SymbolCount
00
1 2
24
37
43
53
63
72
83
94

حالا سمبل ها رو بر اساس تعداد تکرارشون مرتب ميکنيم.

Sorted
Position
SymbolCount
03 7
124
294
34 3
453
563
683
712
872
900

خوب حالا بر اساس اين جدول جديد متن ما به صورت زير در مياد

0,7,3,7,4,2,1,5,4,0,4,6,2,8,2,0,1,0,6,3,5,1,5,3,0,0,6,0,1,8,2

خوب همينطور که ميبينيد هيچ خاصيت فشرده شدنی اينجا وجود نداره ولی خوب يه اتفاق جالب افتاده اونم اينکه مجموع يا ميانگين متن رو کاهش داديم به اين صورت که متن اصلی اگه حساب کنيم دارای مجموع 150 هستش در صورتی که متن کد شده دارای ميانگين 96 هستش.

خوب من يه پياده سازی به زبون cpp هم براتون اينجا ميزارم که البته هم با dev-cpp تحت windows کامپايل ميشه هم با ++g تحت لينوکس ubuntu کامپايل ميشه با هر کدوم که راحتی با همون کار کنين.

روش دکد کردن هم که بسيار ساده هستش کافيه شما يه جدول 256 تايی اول فايل کد شده ذخيره بکنين تا موقع دکد کردن با کمک اون جدول خيلی راحت فايل اصلی رو بازيافت کنيد.


frequency substitution .cpp file

frequency substitution .h file

فهرست

صفحه اصلی

(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 : 12/2/2011