මෙම ලිපියෙහි අරමුණවන්නේ Data compression සඳහා යොදාගන්නා සරලතම ඇල්ගොරිතමයක් වන RLE(Run length encoding) පිළිබඳ උදාහරණ ඇසුරෙන් සාකච්ඡාකිරීමයි.
නමින් හැඟවෙන පරිදිම "ගොනුවක(file එකක) දත්තයන්, රටාවන් ලෙස කෙතරම් දුරකට දිවයන්නේද යන්න නිරූපණය කිරීමෙන් ගොනුවේ එකිනෙක ආසන්නයේ නැවත නැවත යෙදෙන රටාවන් සම්පීඩනය කිරීම" මෙම ඇල්ගොරිතමෙහි අරමුණයි.

තවත් උදාහරණයක් සලකා බලමු.
2. aaabaaaaAAAA
මෙම දත්ත ගොනුවේදී එකම අක්ෂරය ළඟ ළඟ යෙදෙන රටාවට “b” අකුරකින් බාධා වී ඇති බව නිරීක්ෂණය කරන්න.
සරල runlength නිරූපණය = a3b1a4A4

3. උදා: aAaAaAaAaA
මෙම ගොනුව තුළද එකළඟින් යෙදෙන රටාවක් දැකිය හැක. නමුත් කලින්මෙන් එක් අක්ෂරය බැගින් සලකා runlength නිරූපණය කළහොත් ලැබෙනුයේ අක්ෂර 20කින් සමන්විත ගොනුවකි;
a1A1a1A1a1A1a1A1a1A1

නමුත් මෙම ගොනුව සඳහා අක්ෂර 2 බැගින් සලකා runlength නිරූපණය කිරීමෙන්;
aA5අක්ෂර 3ක ගොනුවක් නිර්මාණය කරගැනීමට හැකි බව පෙනේ.
දෝෂ නිරාකරණය
සරල බව හේතුවෙන්ම encoding(කේතාංකණ) ක්රියාවලිය හා decoding(විකේතන) ක්රියාවලිය මුහුණපෑ හැකි විශේෂ අවස්ථා කීපයක් සලකාබලමු.
File= 7777777777111111111111
කේතාංකණය මගින්
encoded file= 710111
ලෙස කුඩා ගොනුවක් නිර්මාණයකරගත හැකිවුවත් එම නිරූපණය වැරදි ලෙස විකේතනය වියහැක.
decoded file= 701
5. උදා: අක්ෂර දෙක බැගින් සලකා කරන ලද කේතාංකණයක් තනි අක්ෂරය බැගින් විකේතනය කිරීමේදී
file= 55555566
අක්ෂර දෙක බැගින් සැලකූවිට
encoded file= 553661
අක්ෂර 1 බැගින් යයි සලකා අසම්පීඩනය කළහොත්
decoded file= 555553333336
මෙවැනි පැටලැවීම් මඟහරවා ගැනීමට encoded ගොනුව නියමිත ආකෘතියකට ගොඩනැගිය යුතුය.
දත්ත රටාව සඳහා අක්ෂර ස්ථාන කීයක් වෙන්කල යුතුද, යෙදී ඇති වාර ගණන දැක්වීමට ස්ථාන කීයක් වෙන්කල යුතුද යන්න එමගින් තීරණය කල යුතුය. 4 උදාහරණයේදී නම් රටාව සඳහා එක් අකුරක්ද වාර ගණන(සංඛ්යාතය) සඳහා ස්ථාන දෙකක්ද වෙන්වන බව ඩිකෝඩරය දැනසිටියේ නම් ගැටලුවක් නොවේ. එසේත් නැතිනම් එන්කෝඩරය මගින් රටාවට එක් ස්ථානයක්ද සංඛ්යාතයටද එක් ස්ථානයක්ද බැගින් වෙන්කලේනම්;
encoded file=79711912
එවිටද ගැටලුවක් නොවනු ඇත.
නිගමනය
- දත්ත සම්පීඩනය සඳහා යොදාගත හැකි සරලතම ක්රමවේදයක් ලෙස Run Length encoding ඇල්ගොරිතම දැක්විය හැක.
- දත්ත ගොනුව තුළ දැකිය හැකි රටාවන් වඩාත් හොඳින් සම්පීඩන වන පරිදි runlength යෙදිය හැකි ආකාර සලකා බැලිය හැක. එක් අක්ෂතරය බැගින් (bit 8 බැගින්), bit 16 බැගින්, bit 4 බැගින්
- එන්කෝඩරය මගින් ගොඩනගනුලබන ගොනුව ඩිකෝඩරයට පැහැදිලිව තේරුම්ගත හැකි පරිදි ආකෘතිගත කල යුතුය.
![]() |
බිටු 4 බැගින් සලකා RL Encoded උදාහරණයක් (ද්විමය පාදයෙන් දක්වා ඇත) |
- දත්ත ගොනුව තුළ ළඟළඟ යෙදෙන රටාවන් සැලකිය යුතු ප්රමාණයක් නොවන විට run length encoding භාවිතයෙන් සම්පීඩනයක් ඇතිකරගත නොහැක.
එමනිසා බොහෝ අවස්ථාවන්හිදී run length උචිත නොවේ. ප්රායෝගික භාවිතයේදී මූලික සම්පීඩන ක්රමවේදයකට වඩා වෙනත් ඇල්ගොරිතම ශක්තිමත් කරන උපාංගයක් ලෙස runlength ඇල්ගොරිතම භාවිතයට ගැනේ.
අමතර සටහන
පැහැදිලි කිරීමේ සහ අවබෝධ කරගැනීමේ පහසුව සඳහා "අක්ෂර", "අංක" ලෙස සඳහන් කර ඇත. ප්රායෝගිකව ඒවා සංඛ්යාත්කම(numeric/ හෝ ASCII) බව සලකන්න.
ගැටලු/අදහස් තියෙනවනම් Comment කරන්ඩ අමතකකරන්ඩ එපා.
ගැටලු/අදහස් තියෙනවනම් Comment කරන්ඩ අමතකකරන්ඩ එපා.
5 comments:
නියම වැදගත්ම ලිපියක්...ස්තුතියි
@රතී ප්රතිචාරයට ස්තූතියි
හපොයි , මට කොහොමද මේ වගේ වැදගත් බ්ලොග් එකක් මග හැරුනේ ,
ජය හොද පොස්ටුඅව්ක් වගේම බ්ලොග් එකක් !
ඔබටත් ජය! @නොහික්මුණු ඇස
Ya Mekanam Niyama post ekak
Comment එකක් දාන්න