1.ããŒã¿å§çž®æ¹æ³ã
2.ãã¹ã¬ã¹ç»åå§çž®ã
3.æ倱ã®ããç»åã®å§çž®ã
以äžã«ãã·ãªãŒãºã®æåã®æçš¿ããããŸãã
çŸåšãæ¡ä»¶ä»ãã§2ã€ã®å€§ããªã°ã«ãŒãã«åããããšãã§ããç¡æ倱å§çž®ã¢ã«ãŽãªãºã ãå€æ°ãããŸãã
1.ã¹ããªãŒã ããã³èŸæžã¢ã«ãŽãªãºã ã RLEïŒã©ã³ã¬ã³ã°ã¹ãšã³ã³ãŒãã£ã³ã°ïŒãLZ *ãããã³ä»ã®ãã¡ããªã®ã¢ã«ãŽãªãºã ã¯ãã®ã°ã«ãŒãã«å±ããŸãããã®ã°ã«ãŒãã®ãã¹ãŠã®ã¢ã«ãŽãªãºã ã®æ©èœã¯ããšã³ã³ãŒãã£ã³ã°æã«ã¡ãã»ãŒãžå ã®æåã®é »åºŠã«é¢ããæ å ±ã§ã¯ãªãã以åã«ééããã·ãŒã±ã³ã¹ã«é¢ããæ å ±ã䜿çšãããããšã§ã
2.çµ±èšïŒãšã³ããããŒïŒå§çž®ã®ã¢ã«ãŽãªãºã ã ãã®ã¢ã«ãŽãªãºã ã®ã°ã«ãŒãã¯ãã¡ãã»ãŒãžã«ããŸããŸãªæåãåºçŸããé »åºŠã®äžåäžæ§ã䜿çšããŠæ å ±ãå§çž®ããŸãã ãã®ã°ã«ãŒãã®ã¢ã«ãŽãªãºã ã«ã¯ãç®è¡ããã³ãã¬ãã£ãã¯ã¹ã³ãŒãã£ã³ã°ã®ã¢ã«ãŽãªãºã ãå«ãŸããŸãïŒã·ã£ãã³ãã¡ã³ãããããã³ãå²ç·ããªãŒã䜿çšïŒã
æ å ±ãå€æããã¢ã«ãŽãªãºã ã¯ãåå¥ã®ã°ã«ãŒãã«åºå¥ã§ããŸãã ãã®ã°ã«ãŒãã®ã¢ã«ãŽãªãºã ã¯æ å ±ãçŽæ¥å§çž®ããŸãããããããã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¹ããªãŒã ãèŸæžãããã³ãšã³ããããŒã¢ã«ãŽãªãºã ã䜿çšãããããªãå§çž®ãå€§å¹ ã«ç°¡çŽ åããŸãã
ã¹ã¬ãããšèŸæžã®ã¢ã«ãŽãªãºã
ã·ãªãŒãºã®é·ãã®ã³ãŒãã£ã³ã°
ã©ã³ã¬ã³ã°ã¹ãšã³ã³ãŒãã£ã³ã°ïŒRLEïŒã¯ãæãåçŽã§æãäžè¬çãªããŒã¿å§çž®ã¢ã«ãŽãªãºã ã®1ã€ã§ãã ãã®ã¢ã«ãŽãªãºã ã§ã¯ãç¹°ãè¿ãæåã®ã·ãŒã±ã³ã¹ãæåãšå埩åæ°ã«çœ®ãæããããŸãã
ããšãã°ãã¹ãã¬ãŒãžã«5ãã€ããå¿ èŠãšããæååãAAAAAãïŒ1æåã®æ ŒçŽã«1ãã€ããå²ãåœãŠãããŠããå ŽåïŒã¯ã2ãã€ãã§æ§æãããã5Aãã«çœ®ãæããããšãã§ããŸãã æããã«ããã®ã¢ã«ãŽãªãºã ã¯äžé£ã®ç¹°ãè¿ããé·ãã»ã©å¹æçã§ãã
ãã®ã¢ã«ãŽãªãºã ã®äž»ãªæ¬ ç¹ã¯ãéç¹°ãè¿ãæåã®ã·ãŒã±ã³ã¹ã§ã®å¹çã極端ã«äœãããšã§ãã ããšãã°ãã·ãŒã±ã³ã¹ "ABABAB"ïŒ6ãã€ãïŒãèæ ®ãããšãRLEã¢ã«ãŽãªãºã ãé©çšããåŸã "1A1B1A1B1A1B"ïŒ12ãã€ãïŒã«å€ãããŸãã éå埩æåã®åé¡ã解決ããã«ã¯ãããŸããŸãªæ¹æ³ããããŸãã
æãç°¡åãªæ¹æ³ã¯ã次ã®å€æŽã§ããå埩åæ°ããšã³ã³ãŒããããã€ãã«ã¯ãå埩åæ°ã ãã§ãªãããã®å¯çšæ§ã«é¢ããæ å ±ãæ ŒçŽããå¿ èŠããããŸãã æåã®ãããã1ã®å Žåã次ã®7ãããã¯å¯Ÿå¿ããæåã®ç¹°ãè¿ãæ°ã瀺ããæåã®ãããã0ã®å Žåã次ã®7ãããã¯ç¹°ãè¿ããªãã§ååŸãããæåæ°ã瀺ããŸãã ãã®å€æŽã䜿çšããŠãABABABãããšã³ã³ãŒããããšãã-6ABABABãïŒ7ãã€ãïŒãåŸãããŸãã æããã«ãææ¡ãããææ³ã¯ãæåã®éå埩ã·ãŒã±ã³ã¹ã§ã®RLEã¢ã«ãŽãªãºã ã®å¹çãå€§å¹ ã«åäžãããããšãã§ããŸãã ææ¡ãããã¢ãããŒãã®å®è£ ããªã¹ã1ã«ç€ºããŸãã
- ã¿ã€ã
- TRLEEncodedString = ãã€ãã® é å ã
- é¢æ° RLEEncode ïŒ InMsg ïŒ ShortString ïŒ ïŒ TRLEEncodedString ;
- var
- MatchFl ïŒ ããŒã«å€ ;
- MatchCount ïŒ shortint ;
- EncodedString ïŒ TRLEEncodedString ;
- N ã i ïŒ ãã€ã ã
- å§ãã
- N ïŒ = 0 ;
- SetLength ïŒ EncodedString ã 2 *é·ãïŒ InMsg ïŒ ïŒ ;
- äžæ¹ãé·ãïŒ InMsg ïŒ > = 1 do
- å§ãã
- MatchFl ïŒ = ïŒé·ãïŒ InMsg ïŒ > 1 ïŒ ããã³ ïŒ InMsg [ 1 ] = InMsg [ 2 ] ïŒ ;
- MatchCount ïŒ = 1 ;
- while ïŒ MatchCount < = 126 ïŒ and ïŒ MatchCount <length ïŒ InMsg ïŒ ïŒ and ïŒ ïŒ InMsg [ MatchCount ] = InMsg [ MatchCount + 1 ] ïŒ = MatchFl ïŒ do
- MatchCount ïŒ = MatchCount + 1 ;
- MatchFlã®å Žå
- å§ãã
- N ïŒ = N + 2 ;
- EncodedString [ N - 2 ] ïŒ = MatchCount + 128 ;
- EncodedString [ N - 1 ] ïŒ = ord ïŒ InMsg [ 1 ] ïŒ ;
- çµãã
- ä»ã«
- å§ãã
- MatchCount <>é·ãïŒ InMsg ïŒã® å Žå
- MatchCount ïŒ = MatchCount - 1 ;
- N ïŒ = N + 1 + MatchCount ;
- EncodedString [ N - 1 - MatchCount ] ïŒ = -MatchCount + 128 ;
- for i ïŒ = 1 ãã MatchCount ãž
- EncodedString [ N - 1 - MatchCount + i ] ïŒ = ord ïŒ InMsg [ i ] ïŒ ;
- çµãã ;
- åé€ïŒ InMsg ã 1 ã MatchCount ïŒ ;
- çµãã ;
- SetLength ïŒ EncodedString ã N ïŒ ;
- RLEEncode ïŒ = EncodedString ;
- çµãã ;
å§çž®ãããã¡ãã»ãŒãžã®ãã³ãŒãã¯éåžžã«ç°¡åã§ãå§çž®ãããã¡ãã»ãŒãžã1åãã¹ããã ãã§ãããªã¹ã2ãåç §ããŠãã ããã
- ã¿ã€ã
- TRLEEncodedString = ãã€ãã® é å ã
- é¢æ° RLEDecode ïŒ InMsg ïŒ TRLEEncodedString ïŒ ïŒ ShortString ;
- var
- RepeatCount ïŒ shortint ;
- i ã j ïŒ åèª ã
- OutMsg ïŒ ShortString ;
- å§ãã
- OutMsg ïŒ = '' ;
- i ïŒ = 0 ;
- äžæ¹ã i <é·ãïŒ InMsg ïŒ ã¯
- å§ãã
- RepeatCount ïŒ = InMsg [ i ] -128 ;
- i ïŒ = i + 1 ;
- RepeatCount < 0ã® å Žå
- å§ãã
- RepeatCount ïŒ = abs ïŒ RepeatCount ïŒ ;
- for j ïŒ = i to i + RepeatCount - 1 do
- OutMsg ïŒ = OutMsg + chr ïŒ InMsg [ j ] ïŒ ;
- i ïŒ = i + RepeatCount ;
- çµãã
- ä»ã«
- å§ãã
- for j ïŒ = 1 to RepeatCount do
- OutMsg ïŒ = OutMsg + chr ïŒ InMsg [ i ] ïŒ ;
- i ïŒ = i + 1 ;
- çµãã ;
- çµãã ;
- RLEDecode ïŒ = OutMsg ;
- çµãã ;
RLEã¢ã«ãŽãªãºã ã®å¹çãé«ãã2çªç®ã®æ¹æ³ã¯ãããŒã¿ãçŽæ¥å§çž®ããã®ã§ã¯ãªããå§çž®ã«ãã䟿å©ãªåœ¢åŒã«ããæ å ±å€æã¢ã«ãŽãªãºã ã®äœ¿çšã§ãã ãã®ãããªã¢ã«ãŽãªãºã ã®äŸãšããŠãBurrows-Wheelerå€æã®çºæè ã«ã¡ãªãã§åœåãããBWTé åãèããŸãã ãã®é åã¯æåèªäœãå€æŽããã®ã§ã¯ãªããæååå ã®é åºãå€æŽããã ãã§ããé åãé©çšããåŸã®ãµãã¹ããªã³ã°ã®ç¹°ãè¿ãã¯ãRLEã¢ã«ãŽãªãºã ã䜿çšããŠå§çž®ãããå¯ãªã°ã«ãŒãã«ãŸãšããããŸãã çŽæ¥BWTå€æã¯ã次ã®æé ã®ã·ãŒã±ã³ã¹ã«åæžãããŸãã
1.å ã®è¡ã«è¡æ«ã«ç¹æ®æåãè¿œå ããŸããããã¯ä»ã®ã©ãã«ããããŸããã
2.ãœãŒã¹æååã®ãã¹ãŠã®å·¡å眮æãååŸããŸãã
3.åä¿¡ããè¡ãèŸæžåŒé åºã§ãœãŒãããŸãã
4.çµæã®ãããªãã¯ã¹ã®æåŸã®åãè¿ããŸãã
ãã®ã¢ã«ãŽãªãºã ã®å®è£ ããªã¹ã3ã«ç€ºããŸãã
- const
- EOMsg = '|' ;
- é¢æ° BWTEncode ïŒ InMsg ïŒ ShortString ïŒ ïŒ ShortString ;
- var
- OutMsg ïŒ ShortString ;
- ShiftTable ïŒ ShortStringã®é å ã
- LastChar ïŒ ANSIChar ;
- N ã i ïŒ åèª ã
- å§ãã
- InMsg ïŒ = InMsg + EOMsg ;
- N ïŒ =é·ãïŒ InMsg ïŒ ;
- SetLength ïŒ ShiftTable ã N + 1 ïŒ ;
- ShiftTable [ 1 ] ïŒ = InMsg ;
- for i ïŒ = 2 ãã N
- å§ãã
- LastChar ïŒ = InMsg [ N ] ;
- InMsg ïŒ = LastChar + copy ïŒ InMsg ã 1 ã N - 1 ïŒ ;
- ShiftTable [ i ] ïŒ = InMsg ;
- çµãã ;
- ãœãŒãïŒ ShiftTable ïŒ ;
- OutMsg ïŒ = '' ;
- for i ïŒ = 1 ãã N
- OutMsg ïŒ = OutMsg + ShiftTable [ i ] [ N ] ;
- BWTEncode ïŒ = OutMsg ;
- çµãã ;
ãã®å€æã説æããæãç°¡åãªæ¹æ³ã¯ãç¹å®ã®äŸã䜿çšããããšã§ãã æååããã€ãããã«ããåããèšå·ã|ããè¡æåã®çµããã«ãªãããšã«åæããŸãã ãã®è¡ã®ãã¹ãŠã®åŸªç°é åãšãã®èŸæžåŒãœãŒãã®çµæãè¡šã«ç€ºããŸãã 1ã

ã€ãŸã çŽæ¥å€æã®çµæã¯ãã¹ããªã³ã°ã| NNAAASãã«ãªããŸãã ãã®è¡ã¯å ã®è¡ãããã¯ããã«åªããŠããããšããããããããRLEã¢ã«ãŽãªãºã ã«ãã£ãŠå§çž®ãããŠããŸãã ç¹°ãè¿ãæåã®é·ããµãã·ãŒã±ã³ã¹ããããŸãã
ä»ã®å€æã䜿çšããŠä»ã®å¹æãå®çŸããããšãã§ããŸãããBWTå€æã®å©ç¹ã¯ãéå€æãçŽæ¥å€æãããè€éã§ãããå¯éçã§ããããšã§ãã å ã®æååã埩å ããã«ã¯ã次ã®æé ãå®è¡ããå¿ èŠããããŸãã
ãµã€ãºn * nã®ç©ºã®è¡åãäœæããŸããnã¯ããšã³ã³ãŒããããã¡ãã»ãŒãžã®æåæ°ã§ãã
ã³ãŒãåãããã¡ãã»ãŒãžã§å³ç«¯ã®ç©ºã®åãåããŸãã
è¡šã®è¡ãèŸæžåŒé åºã§äžŠã¹æ¿ããŸãã
空ã®åãã§ãããŸã§æé 2ã3ãç¹°ãè¿ããŸãã
è¡æ«æåã§çµããè¡ãè¿ããŸãã
äžèŠãããšãéå€æã®å®è£ ã¯ç°¡åã§ãå®è£ ãªãã·ã§ã³ã®1ã€ããªã¹ã4ã«ç€ºããŸãã
- const
- EOMsg = '|' ;
- é¢æ° BWTDecode ïŒ InMsg ïŒ ShortString ïŒ ïŒ ShortString ;
- var
- OutMsg ïŒ ShortString ;
- ShiftTable ïŒ ShortStringã®é å ã
- N ã i ã j ïŒ åèª ã
- å§ãã
- OutMsg ïŒ = '' ;
- N ïŒ =é·ãïŒ InMsg ïŒ ;
- SetLength ïŒ ShiftTable ã N + 1 ïŒ ;
- for i ïŒ = 0 ãã N
- ShiftTable [ i ] ïŒ = '' ;
- for i ïŒ = 1 ãã N
- å§ãã
- jã®å ŽåïŒ = 1 ãã N
- ShiftTable [ j ] ïŒ = InMsg [ j ] + ShiftTable [ j ] ;
- ãœãŒãïŒ ShiftTable ïŒ ;
- çµãã ;
- for i ïŒ = 1 ãã N
- ShiftTable [ i ] [ N ] = EOMsgã®å Žå
- OutMsg ïŒ = ShiftTable [ i ] ;
- åé€ïŒ OutMsg ã N ã 1 ïŒ ;
- BWTDecode ïŒ = OutMsg ;
- çµãã ;
ããããå®éã«ã¯ãå¹çã¯éžæãããœãŒãã¢ã«ãŽãªãºã ã«äŸåããŸãã èªæãª2次è€é床ã¢ã«ãŽãªãºã ã¯æããã«ããã©ãŒãã³ã¹ã«éåžžã«æªåœ±é¿ãåãŒããããå¹ççãªã¢ã«ãŽãªãºã ã䜿çšããããšããå§ãããŸãã

7çªç®ã®æé ã§ååŸããããŒãã«ã䞊ã¹æ¿ããåŸãããŒãã«ããã·ã³ãã«ã|ãã§çµããè¡ãéžæããå¿ èŠããããŸãã ãããå¯äžã®è¡ã§ããããšã¯ç°¡åã«ããããŸãã T.O. å ·äœäŸã䜿çšããŠBWTå€æã調ã¹ãŸããã
èŠçŽãããšãRLEã¢ã«ãŽãªãºã ã°ã«ãŒãã®äž»ãªå©ç¹ã¯ãã®åçŽããšé床ïŒãã³ãŒãé床ãå«ãïŒã§ãããäž»ãªæ¬ ç¹ã¯éå埩æåã»ããã®éå¹çæ§ã§ãããšèšããŸãã ç¹å¥ãªé åã䜿çšãããšãã¢ã«ãŽãªãºã ã®å¹çãåäžããŸãããå®è¡æéãå€§å¹ ã«åäžããŸãïŒç¹ã«ãã³ãŒãïŒã
èªåœå§çž®ïŒLZã¢ã«ãŽãªãºã ïŒ
èŸæžã¢ã«ãŽãªãºã ã®ã°ã«ãŒãã¯ãRLEã°ã«ãŒãã®ã¢ã«ãŽãªãºã ãšã¯ç°ãªããæåã®ç¹°ãè¿ãã®æ°ã§ã¯ãªãã以åã«æ€åºãããæåã®ã·ãŒã±ã³ã¹ããšã³ã³ãŒãããŸãã èæ ®ãããã¢ã«ãŽãªãºã ã®æäœäžã«ããã§ã«æ€åºãããã·ãŒã±ã³ã¹ãšããã«å¯Ÿå¿ããã³ãŒãã®ãªã¹ããå«ãããŒãã«ãåçã«äœæãããŸãã ãã®ããŒãã«ã¯ãã°ãã°èŸæžãšåŒã°ãã察å¿ããã¢ã«ãŽãªãºã ã®ã°ã«ãŒãã¯èŸæžãšåŒã°ããŸãã
èŸæžã¢ã«ãŽãªãºã ã®æãåçŽãªããŒãžã§ã³ã以äžã«èª¬æããŸãã
å ¥åè¡ã«ãããã¹ãŠã®æåã§èŸæžãåæåããŸãã
èŸæžã§ããšã³ã³ãŒããããã¡ãã»ãŒãžã®å é ã«äžèŽããæé·ã®ã·ãŒã±ã³ã¹ïŒSïŒãèŠã€ããŸãã
èŠã€ãã£ãã·ãŒã±ã³ã¹ã®ã³ãŒããæå®ãããšã³ã³ãŒããããã¡ãã»ãŒãžã®å é ããåé€ããŸãã
ã¡ãã»ãŒãžã®æåŸã«å°éããŠããªãå Žåã¯ã次ã®æå©ãèªã¿ãScãèŸæžã«è¿œå ããæé 2ã«é²ã¿ãŸãããã以å€ã®å Žåã¯çµäºããŸãã
ããšãã°ãå¥ãKUKUSKAKUKUSHONKUKILAKAPUSHONãã®åæåãããã°ããã®èŸæžãè¡šã«ç€ºããŸãã 3ïŒ

å§çž®äžã«ãèŸæžã¯ã¡ãã»ãŒãžå ã§èŠã€ãã£ãã·ãŒã±ã³ã¹ã«ãã£ãŠè£è¶³ãããŸãã èŸæžãæŽæ°ããããã»ã¹ãè¡šã«ç€ºããŸãã 4ã

ã¢ã«ãŽãªãºã ã説æããéãèŸæžãå®å šã«æºããããç¶æ³ã®èª¬æã¯æå³çã«çç¥ãããŸããã ã¢ã«ãŽãªãºã ã®ããªã¢ã³ãã«å¿ããŠãç°ãªãåäœãå¯èœã§ããèŸæžã®å®å šãŸãã¯éšåçãªã¯ãªã¢ãèŸæžã®çµäºããŸãã¯ã³ãŒãã®ããã深床ã®å¯Ÿå¿ããå¢å ã䌎ãèŸæžã®æ¡åŒµã ãããã®ã¢ãããŒãã«ã¯ããããäžå®ã®æ¬ ç¹ããããŸãã ããšãã°ãèŸæžã®è£å ãçµäºãããšãå§çž®å¯èœãªè¡ã®å é ã§çºçããã·ãŒã±ã³ã¹ãèŸæžã«ä¿åãããŸãããåŸã§çºçããããšã¯ãããŸããã åæã«ãèŸæžãã¯ãªã¢ãããšãé »ç¹ãªã·ãŒã±ã³ã¹ãåé€ãããå¯èœæ§ããããŸãã 䜿çšãããå®è£ ã®ã»ãšãã©ã¯ããã£ã¯ã·ã§ããªã«èšå ¥ãããšãã«å§çž®ã®åºŠåãã远跡ãå§ããå§çž®ãç¹å®ã®ã¬ãã«ãäžåããšããã£ã¯ã·ã§ããªãåæ§ç¯ãããŸãã 次ã«ãèŸæžããã£ã±ãã«ãªããšèŸæžã®æŽæ°ãåæ¢ããæãåçŽãªå®è£ ãæ€èšããŸãã
ãŸããèŸæžããæ€åºãããéšåæååã ãã§ãªããèŸæžã«ä¿åãããŠããéšåæååã®æ°ãæ ŒçŽããã¬ã³ãŒããšããŠå®çŸ©ããŸãã
- ã¿ã€ã
- TDictionary = ã¬ã³ãŒã
- WordCount ïŒ ãã€ã ;
- åèªïŒ æååã® é å ;
- çµãã ;
å ã«åºäŒã£ããµãã·ãŒã±ã³ã¹ã¯Wordsé åã«ä¿åããããã®ã³ãŒãã¯ãã®é åå ã®ãµãã·ãŒã±ã³ã¹ã®æ°ã§ãã
ãŸããèŸæžå ã®æ€çŽ¢é¢æ°ãšèŸæžãžã®è¿œå ãå®çŸ©ããŸãã
- const
- MAX_DICT_LENGTH = 256 ;
- é¢æ° FindInDict ïŒ D ïŒ TDictionary ; str ïŒ ShortString ïŒ ïŒ æŽæ° ;
- var
- r ïŒ æŽæ° ;
- i ïŒ æŽæ° ;
- fl ïŒ ããŒã«å€ ;
- å§ãã
- r ïŒ = - 1 ;
- Dã®å Žå WordCount > 0 then
- å§ãã
- i ïŒ = D WordCount
- fl ïŒ = false ;
- while ïŒ not fl ïŒ and ïŒ i> = 0 ïŒ do
- å§ãã
- i ïŒ = i - 1 ;
- fl ïŒ = D åèª [ i ] = str ;
- çµãã ;
- çµãã ;
- ãããªããªã
- r ïŒ = i ;
- FindInDict ïŒ = r ;
- çµãã ;
- ããã·ãŒãžã£ AddToDict ïŒ var D ïŒ TDictionary ; str ïŒ ShortString ïŒ ;
- å§ãã
- Dã®å Žå WordCount <MAX_DICT_LENGTH ãã®åŸ
- å§ãã
- D. WordCount ïŒ = D WordCount + 1 ;
- SetLength ïŒ D. ã¯ãŒã ã Dã ã¯ãŒãã«ãŠã³ãïŒ ;
- D. èšè [ D. WordCount - 1 ] ïŒ = str ;
- çµãã ;
- çµãã ;
ãããã®é¢æ°ã䜿çšããŠã説æããã¢ã«ãŽãªãºã ã«ãããšã³ã³ãŒãããã»ã¹ã次ã®ããã«å®è£ ã§ããŸãã
- é¢æ° LZWEncode ïŒ InMsg ïŒ ShortString ïŒ ïŒ TEncodedString ;
- var
- OutMsg ïŒ TEncodedString ;
- tmpstr ïŒ ShortString ;
- D ïŒ TDictionary ;
- i ã N ïŒ ãã€ã ã
- å§ãã
- SetLength ïŒ OutMsg ãé·ãïŒ InMsg ïŒ ïŒ ;
- N ïŒ = 0 ;
- InitDict ïŒ D ïŒ ;
- äžæ¹ãé·ãïŒ InMsg ïŒ > 0 do
- å§ãã
- tmpstr ïŒ = InMsg [ 1 ] ;
- while ïŒ FindInDict ïŒ D ã tmpstr ïŒ > = 0 ïŒ ããã³ ïŒ length ïŒ InMsg ïŒ > length ïŒ tmpstr ïŒ ïŒ do
- tmpstr ïŒ = tmpstr + InMsg [é·ãïŒ tmpstr ïŒ + 1 ] ;
- FindInDict ïŒ D ã tmpstr ïŒ < 0ã® å Žå
- åé€ïŒ tmpstr ãé·ãïŒ tmpstr ïŒ ã 1 ïŒ ;
- OutMsg [ N ] ïŒ = FindInDict ïŒ D ã tmpstr ïŒ ;
- N ïŒ = N + 1 ;
- åé€ïŒ InMsg ã 1 ãé·ãïŒ tmpstr ïŒ ïŒ ;
- é·ãïŒ InMsg ïŒ > 0ã® å Žå
- AddToDict ïŒ D ã tmpstr + InMsg [ 1 ] ïŒ ;
- çµãã ;
- SetLength ïŒ OutMsg ã N ïŒ ;
- LZWEncode ïŒ = OutMsg ;
- çµãã ;
ã³ãŒãã£ã³ã°çµæã¯ãèŸæžå ã®åèªã®æ°ã«ãªããŸãã
埩å·åããã»ã¹ã¯ã³ãŒãã®çŽæ¥åŸ©å·åã«åæžãããŸãããäœæãããèŸæžã転éããå¿ èŠã¯ãããŸããããèŸæžã®åŸ©å·åã¯ç¬Šå·åæãšåãæ¹æ³ã§åæåãããã°ååã§ãã 次ã«ãåã®ãµãã·ãŒã±ã³ã¹ãšçŸåšã®æåãé£çµããããšã«ããããã³ãŒãäžã«èŸæžãçŽæ¥å®å šã«åŸ©å ãããŸãã
å¯äžã®åé¡ã¯ã次ã®ç¶æ³ã§çºçããå¯èœæ§ããããŸããèŸæžã«ãŸã ãªããµãã·ãŒã±ã³ã¹ããã³ãŒãããå¿ èŠãããå Žåã çŸåšã®ã¹ãããã§è¿œå ããããµãã¹ããªã³ã°ãæœåºããå¿ èŠãããå Žåã«ã®ã¿ããããå¯èœã§ããããšã確èªããã®ã¯ç°¡åã§ãã ãããŠãããã¯ãéšåæååãcScãã¿ãŒã³ãã€ãŸã åãèšå·ã§å§ãŸããçµãããŸãã åæã«ãcSã¯åã®æé ã§è¿œå ããããµãã¹ããªã³ã°ã§ãã èæ ®ãããŠããç¶æ³ã¯ããŸã è¿œå ãããŠããªãæååããã³ãŒãããå¿ èŠãããå Žåã®ã¿ã§ãã äžèšãèæ ®ãããšãå§çž®ãããæååããã³ãŒãããããã®æ¬¡ã®ãªãã·ã§ã³ãæäŸã§ããŸãã
- é¢æ° LZWDecode ïŒ InMsg ïŒ TEncodedString ïŒ ïŒ ShortString ;
- var
- D ïŒ TDictionary ;
- OutMsg ã tmpstr ïŒ ShortString ;
- i ïŒ ãã€ã ;
- å§ãã
- OutMsg ïŒ = '' ;
- tmpstr ïŒ = '' ;
- InitDict ïŒ D ïŒ ;
- for i ïŒ = 0 ãã length ïŒ InMsg ïŒ -1 do
- å§ãã
- InMsg [ i ] > = Dã®å Žå ã¯ãŒãã«ãŠã³ã
- tmpstr ïŒ = Dã åèª [ InMsg [ i - 1 ] ] + D èšè [ InMsg [ i - 1 ] ] [ 1 ]
- ä»ã«
- tmpstr ïŒ = Dã èšè [ InMsg [ i ] ] ;
- OutMsg ïŒ = OutMsg + tmpstr ;
- i> 0ã® å Žå
- AddToDict ïŒ D ã D. ã¯ãŒã [ InMsg [ i - 1 ] ] + tmpstr [ 1 ] ïŒ ;
- çµãã ;
- LZWDecode ïŒ = OutMsg ;
- çµãã ;
èŸæžã¢ã«ãŽãªãºã ã®å©ç¹ã«ã¯ãRLEãšæ¯èŒããŠé«ãå§çž®å¹çãå«ãŸããŸãã ããã§ãããããã®ã¢ã«ãŽãªãºã ã®å®éã®äœ¿çšã«ã¯ãããã€ãã®å®è£ äžã®å°é£ã䌎ãããšãç解ããå¿ èŠããããŸãã
ãšã³ããããŒã³ãŒãã£ã³ã°
ã·ã£ãã³ãã¡ãŒãããªãŒã³ãŒãã£ã³ã°
Shannon-Fanoã¢ã«ãŽãªãºã ã¯ãéçºãããæåã®å§çž®ã¢ã«ãŽãªãºã ã®1ã€ã§ãã ãã®ã¢ã«ãŽãªãºã ã¯ãããçãã³ãŒãã䜿çšããŠããé »ç¹ãªæåãè¡šããšããèãã«åºã¥ããŠããŸãã ããã«ãShannon-Fanoã¢ã«ãŽãªãºã ã䜿çšããŠååŸããã³ãŒãã«ã¯ããã¬ãã£ãã¯ã¹ã®ããããã£ããããŸãã ä»ã®ã³ãŒãã®å é ã«ã³ãŒãã¯ãããŸããã prefixããããã£ã«ãããã³ãŒãã£ã³ã°ã1察1ã«ãªããŸãã Shannon-Fanoã³ãŒããæ§ç¯ããã¢ã«ãŽãªãºã ã以äžã«ç€ºããŸãã
1.ã¢ã«ãã¡ãããã2ã€ã®éšåã«åå²ããŸãããããã®éšåã®æåã®åèšç¢ºçã¯ãäºãã«ã§ããã ãè¿ããã®ã«ããŸãã
2.æåã®æåã®éšåã®ãã¬ãã£ãã¯ã¹ã³ãŒãã«0ãè¿œå ããæåã®2çªç®ã®éšåã®ãã¬ãã£ãã¯ã¹ã³ãŒãã«1ãè¿œå ããŸãã
3.åããŒãïŒå°ãªããšã2ã€ã®æåãããïŒã«å¯ŸããŠãæé 1ã3ãååž°çã«å®è¡ããŸãã
æ¯èŒçåçŽã§ããã«ãããããããShannon-Fanoã¢ã«ãŽãªãºã ã«ã¯æ¬ ç¹ããªãããã§ã¯ãããŸããããã®äžã§æãéèŠãªã®ã¯ãæé©ã§ãªãã³ãŒãã£ã³ã°ã§ãã åã¹ãããã§ã®åå²ã¯æé©ã§ãããã¢ã«ãŽãªãºã ã¯å šäœãšããŠæé©ãªçµæãä¿èšŒããŸããã ããšãã°ããAAAABVGDEZHããšããè¡ãèããŠãã ããã 察å¿ããã·ã£ãã³ã»ãã¡ãã®æšãšããã«åºã¥ããŠåŸãããã³ãŒããå³ã«ç€ºããŸãã 1ïŒ

ãšã³ã³ãŒãããªãå Žåãã¡ãã»ãŒãžã¯40ããããå æãïŒåæåã4ãããã§ãšã³ã³ãŒããããŠããå ŽåïŒãShannon-Fanoã¢ã«ãŽãªãºã 4 * 2 + 2 + 4 + 4 + 3 + 3 + 3 = 27ãããã䜿çšããŸãã ã¡ãã»ãŒãžã®éã¯32.5ïŒ æžå°ããŸãããããã®çµæãå€§å¹ ã«æ¹åã§ããããšã以äžã«ç€ºããŸãã
ãããã³ããªãŒã³ãŒãã£ã³ã°
Shannon-Fanoã¢ã«ãŽãªãºã ã®æ°å¹ŽåŸã«éçºãããHuffmanã³ãŒãã£ã³ã°ã¢ã«ãŽãªãºã ãæ¥é èŸã®ç¹æ§ãæã¡ãããã«ãå®èšŒãããæå°ã®åé·æ§ããããŸããããã¯ããã®éåžžã«åºãååžã«ãããã®ã§ãã ãããã³ã³ãŒããååŸããã«ã¯ã次ã®ã¢ã«ãŽãªãºã ã䜿çšããŸãã
1.ã¢ã«ãã¡ãããã®ãã¹ãŠã®æåã¯ããªãŒããŒããšããŠè¡šãããŸãããããŒãã®éã¿ã¯ã¡ãã»ãŒãžå ã®ã·ã³ãã«ã®é »åºŠã«æ¯äŸããŸãã
2.空ãããŒãã®ã»ãããããæå°ã®éã¿ãæã€2ã€ã®ããŒããéžæãããéžæããããŒãã®éã¿ã®åèšã«çããéã¿ãæã€æ°ããïŒèŠªïŒããŒããäœæãããŸãã
3.éžæããããŒãã空ããªã¹ãããåé€ããããããã«åºã¥ããŠäœæããã芪ããŒãããã®ãªã¹ãã«è¿œå ãããŸãã
4.空ããªã¹ãã«è€æ°ã®ããŒããååšãããŸã§ãæé 2ã3ãç¹°ãè¿ãããŸãã
5.æ§ç¯ãããããªãŒã«åºã¥ããŠãã¢ã«ãã¡ãããã®åã·ã³ãã«ã«ãã¬ãã£ãã¯ã¹ã³ãŒããå²ãåœãŠãããŸãã
6.ã¡ãã»ãŒãžã¯åä¿¡ããã³ãŒãã§ãšã³ã³ãŒããããŸãã
Shannon-Fanoã¢ã«ãŽãªãºã ã®å ŽåãšåãäŸãèããŠã¿ãŸãããã ãããã³ããªãŒãšã¡ãã»ãŒãžãAAAABVGDEZHãã«å¯ŸããŠåä¿¡ããã³ãŒããå³5ã«ç€ºããŸãã 2ïŒ

ãšã³ã³ãŒããããã¡ãã»ãŒãžã®ããªã¥ãŒã ã26ãããã§ãããšèšç®ããã®ã¯ç°¡åã§ããããã¯ãã·ã£ãã³ãã¡ãã¢ã«ãŽãªãºã ã®å Žåãããå°ãªããªããŸãã ãããšã¯å¥ã«ããããã³ã¢ã«ãŽãªãºã ã®äººæ°ã«ãããçŸæç¹ã§ã¯ãã·ã³ãã«åšæ³¢æ°ã®éä¿¡ãå¿ èŠãšããªãé©å¿ã³ãŒãã£ã³ã°ãå«ãããããã³ã³ãŒãã£ã³ã°ã®å€ãã®ãªãã·ã§ã³ããããŸãã
ãããã³ã¢ã«ãŽãªãºã ã®æ¬ ç¹ã®ãã¡ãéèŠãªéšåã¯ãå®è£ ã®è€éãã«é¢é£ããåé¡ã§ãã åšæ³¢æ°ã®åšæ³¢æ°ãæ ŒçŽããããã«å®å€æ°ã®ã·ã³ãã«ã䜿çšãããšã粟床ãäœäžãããããå®éã«ã¯æŽæ°å€æ°ããã䜿çšãããŸããã 芪ããŒãã®éã¿ã¯çµ¶ãã倧ãããªããé ããæ©ãããªãŒããŒãããŒãçºçããŸãã ãããã£ãŠãã¢ã«ãŽãªãºã ãåçŽã§ããã«ããããããããã®æ£ããå®è£ ã¯ãç¹ã«å€§ããªã¢ã«ãã¡ãããã®å ŽåãäŸç¶ãšããŠããã€ãã®å°é£ãåŒãèµ·ããå¯èœæ§ããããŸãã
Secanté¢æ°ããªãŒã䜿çšãããšã³ã³ãŒã
å²ç·é¢æ°ã«ããã³ãŒãã£ã³ã°-èè ãéçºããã¢ã«ãŽãªãºã ã§ããã¬ãã£ãã¯ã¹ã³ãŒããååŸã§ããŸãã ãã®ã¢ã«ãŽãªãºã ã¯ãåããŒãã«å²ç·é¢æ°ãå«ãŸããããªãŒãæ§ç¯ãããšããèãã«åºã¥ããŠããŸãã ã¢ã«ãŽãªãºã ããã詳现ã«èª¬æããã«ã¯ãããã€ãã®å®çŸ©ãå°å ¥ããå¿ èŠããããŸãã
ã¯ãŒãã¯ãmãããã®é åºä»ããããã·ãŒã±ã³ã¹ã§ãïŒmã¯ã¯ãŒãé·ãšåŒã°ããŸãïŒã
å²ç·ãªãã©ã«ã¯ãã¿ã€ããæåºã®ã¿ã€ãã®æåºå€ã§ãã ããšãã°ããªãã©ã«ïŒ4,1ïŒã¯ãã¯ãŒãã®4ãããã1ã«çãããªããã°ãªããªãããšãæå³ããŸãããªãã©ã«ã®æ¡ä»¶ãæºããããå Žåããªãã©ã«ã¯trueãšèŠãªãããããã§ãªãå Žåã¯falseãšèŠãªãããŸãã
kãããå²ç·ã¯ãkãªãã©ã«ã®ã»ããã§ãã ãã¹ãŠã®ãªãã©ã«ãçã§ããå Žåãå²ç·é¢æ°èªäœã¯çã§ãããããã§ãªãå Žåã¯åœã§ãã
ããªãŒã¯ãåããŒããã¢ã«ãã¡ããããã§ããã ãè¿ãéšåã«åå²ããããã«æ§ç¯ãããŸãã å³å³3ã¯ãã»ã«ã³ãããªãŒã®äŸã瀺ããŠããŸãã

äžè¬ã«ãã»ã«ã³ãé¢æ°ã®ããªãŒã¯æé©ãªã³ãŒãã£ã³ã°ãä¿èšŒãããã®ã§ã¯ãããŸããããããŒãã§ã®æäœãç°¡åãªãããéåžžã«é«éã§ãã
ç®è¡ã³ãŒãã£ã³ã°
ç®è¡ã³ãŒãã£ã³ã°ã¯ãæ å ±ãå§çž®ããæãå¹æçãªæ¹æ³ã®1ã€ã§ãããããã³ã¢ã«ãŽãªãºã ãšã¯ç°ãªããç®è¡ã³ãŒãã£ã³ã°ã§ã¯ãæåããã1ãããæªæºã®ãšã³ããããŒã§ã¡ãã»ãŒãžããšã³ã³ãŒãã§ããŸãããªããªãã»ãšãã©ã®ç®è¡ç¬Šå·åã¢ã«ãŽãªãºã ã¯ç¹èš±ã«ãã£ãŠä¿è·ãããŠããŸããåºæ¬çãªèãæ¹ã®ã¿ã以äžã«èª¬æããŸãã
䜿çšãããã¢ã«ãã¡ãããã«ãããããé »åºŠp_1ã...ãp_Nã®Nåã®æåa_1ã...ãa_Nããããšä»®å®ããŸãã次ã«ãç®è¡ç¬Šå·åã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«ãªããŸãã
åäœããåééãšããŠã[0; 1ïŒ;
äœæ¥ååºéãNåã®äºãã«çŽ ãªååºéã«åå²ããŸããããã«ãiçªç®ã®ååºéã®é·ãã¯p_iã«æ¯äŸããŸãã
ã¡ãã»ãŒãžã®æåŸã«å°éããŠããªãå Žåã¯ãiçªç®ã®åééãæ°ããäœæ¥ééãšããŠéžæããæé 2ã«é²ã¿ãŸãããã以å€ã®å Žåã¯ãäœæ¥åééããä»»æã®æ°å€ãè¿ããŸãããã€ããªã³ãŒãã®ãã®çªå·ã®ã¬ã³ãŒãã¯ããšã³ã³ãŒããããã¡ãã»ãŒãžã«ãªããŸãã
å³å³4ã¯ããABAAVãã¡ãã»ãŒãžããšã³ã³ãŒãããããã»ã¹ã瀺ããŠããŸã

ã
ç®è¡ã³ãŒãã£ã³ã°ã®æãããªå©ç¹ã¯ãã®å¹çæ§ã§ãããäž»ãªïŒç¹èš±ã®å¶éãé€ãïŒãã€ãã¹ã¯ããšã³ã³ãŒãããã³ãã³ãŒãããã»ã¹ã®éåžžã«é«ãè€éãã§ãã