ºÙÉô¤Ï̤¤ÀÌܤò¤Ä¤Ö¤Ã¤Æ¤¤¤ë¤Î¤À¤¬¤³¤ì¤Ç match_insert() ¤Î²òÆɤϽª¤ê¤À¡£
+match_insert() ¤Î½èÍý¤È¤Ï°Ê²¼¤ÎÄ̤ê¤À¡£
+
+----------------------------------------------------------------------------
+ match_insert() ¤Ï¡¢text[pos] ¤«¤é»Ï¤Þ¤ëʸ»úÎó¤Ë°ìÃפ¹¤ëʸ»úÎó¤ò¼½ñ
+ ¤«¤é¸¡º÷¤·¡¢¸«¤Ä¤«¤Ã¤¿°ÌÃ֤ȰìÃ׍ò matchpos, matchlen ¤ËÀßÄꤹ¤ë¡£
+
+ ¤â¤·¡¢ºÇĹ°ìÃ×ʸ»úÎ󤬸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð matchpos ¤Ï¡¢off ¤ËÀßÄꤵ¤ì¡¢
+ matchlen ¤Ï¹¹¿·¤µ¤ì¤Ê¤¤¡£
+
+ ¸«¤Ä¤«¤Ã¤¿¾ì¹ç¡¢matchlen ¤Ï¸Æ¤Ó½Ð¤·Á°¤Î matchlen ¤è¤ê¤âÂ礤¯¤Ê¤ë¡£
+ (¸Æ¤Ó½Ð¤·Á°¤Ç¤Ï matchlen ¤Î°ÕÌ£¤ÏºÇÄã¸Â°ìÃפ·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤Ê¸»úÎó
+ Ĺ¤Ç¡¢¾È¹ç¾ò·ï¤Î°ì¤Ä¤Ë¤Ê¤Ã¤Æ¤¤¤ë)
+
+ ¤³¤Î´Ø¿ô¤ÎÆþÎϤÏ
+
+ matchlen
+ pos
+
+ ½ÐÎϤÏ
+
+ matchlen
+ matchpos
+
+ ¤È¤¤¤Ã¤¿¤È¤³¤í¡£
+
+ ¤µ¤é¤Ë¡¢insert() ¤ÈƱÍͤνèÍý¤Ç¡¢pos ¤Î°ÌÃÖ¤ò¥Ï¥Ã¥·¥åÇÛÎó¤ËµÏ¿¤·¡¢
+ ¼¡²ó¤Î¸¡º÷¤ËÈ÷¤¨¤ë¡£¤³¤ì¤Ï¤Ä¤¤¤Ç¤Î½èÍý¡£
+----------------------------------------------------------------------------
+
+¤³¤ì¤òƧ¤Þ¤¨¤¿¾å¤Ç½èÍýÆâÍƤòºÆÆɤ·¤è¤¦¡£(E) ¡Á (H) ¤À¡£
+
+ /* (E) */
+ lastmatchlen = matchlen; lastmatchoffset = pos - matchpos - 1;
+ --matchlen;
+
+ /* (F) */ /* (G) */
+ get_next(); match_insert();
+ if (matchlen > remainder) matchlen = remainder;
+
+ /* (H) */
+ if (matchlen > lastmatchlen || lastmatchlen < THRESHOLD) {
+ /* (H.1) */
+ encode_set.output(text[pos - 1], 0);
+ count++;
+ } else {
+
+(H) ¤Î¾ò·ï¤È¤Ï²¿¤Ê¤Î¤«¤ò¸«¤ë¡£¤³¤Î¾ò·ï¤¬¿¿¤Ê¤é¡¢Ê¸»úÎó¤ò¤½¤Î¤Þ¤Þ½ÐÎϤ¹
+¤ë¤Î¤À¤¬¡¢ÁÇľ¤Ë slide ¼½ñË¡¤Î½èÍý¤ò¹Í¤¨¤ì¤Ð¤³¤Î¾ò·ï¤Ï¡Ö¼½ñ¤«¤é¸«¤Ä
+¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡×¤È¤Ê¤ë¡£¤¬¡¢¼ÂºÝ¤Ë¤Ï¤â¤¦¾¯¤·Ê£»¨¤À¡£
+
+ /* (H) */
+ if (matchlen > lastmatchlen || lastmatchlen < THRESHOLD) {
+
+matchlen ¤Ï¡¢pos ¤Î°ÌÃÖ¤Îʸ»úÎ󤬸«¤Ä¤«¤Ã¤¿¼½ñ¾å¤ÎŤµ
+lastmatchlen ¤Ï¡¢pos-1 ¤Î°ÌÃÖ¤Îʸ»úÎ󤬸«¤Ä¤«¤Ã¤¿¼½ñ¾å¤ÎŤµ
+
+¤Ç¤¢¤ë¤È¤¹¤ë¤È¡¢¤³¤Î¾ò·ï¤Ï¡¢¡Öpos ¤Î°ÌÃ֤Ǹ«¤Ä¤«¤Ã¤¿Ä¹¤µ¤¬¡¢pos-1 ¤Î°Ì
+Ã֤Ǹ«¤Ä¤«¤Ã¤¿Ä¹¤µ¤è¤ê¤âŤ±¤ì¤Ð¡×¤Ã¤È¤Ê¤ë¡£
+
+¤³¤ì¤Ï¤Ä¤Þ¤ê¡¢pos-1 ¤È pos ¤Î¥Ë²Õ½ê¤Ë´Ø¤·¤Æ¼½ñ¤ò¸¡º÷¤·¤Æ¡¢¤è¤êŤ¯¥Þ¥Ã
+¥Á¤¹¤ëÊý¤òÁª¤Ü¤¦¤È¤·¤Æ¤¤¤ë¤ï¤±¤À¡£matchlen ¤ÎÊý¤¬Ä¹¤¤¤Ê¤é 1 ¤ÄÁ°
+(pos-1)¤Îʸ»ú¤Ï¤½¤Î¤Þ¤Þ½ÐÎϤ·¡¢¼¡¤Î¥ë¡¼¥×¤Ë°Ü¤ë(¤â¤·¡¢¼¡¤Îʸ»ú¤¬
+¤µ¤é¤ËŤ¯¥Þ¥Ã¥Á¤¹¤ë¤Ê¤é¡£¤Þ¤¿¤½¤Î¤Þ¤Þ½ÐÎϤµ¤ì¤ë)
+
+¤³¤Î¾ò·ï¤Ç¡Ö¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡×¤È¤¤¤¦¤Î¤Ï¤É¤¦É½¤µ¤ì¤Æ¤¤¤ë¤«¤ò¹Í¤¨¤ë¡£
+¤â¤·¡¢pos ¤Îʸ»úÎ󤬼½ñ¤Ë¤Ê¤±¤ì¤Ð pos - 1 ¤Îʸ»úÎó¤Ï¡¢¤É¤¦¤¹¤Ù¤¤«¤È
+¤¤¤¦¤È¡Öpos-1 ¤Îʸ»úÎ󤬸«¤Ä¤«¤Ã¤Æ¤Ê¤±¤ì¤Ð¡£¤½¤Î¤Þ¤Þ½ÐÎÏ¡£¼½ñ¤Ë¤¢¤Ã¤¿
+¤Ê¤é <lastmatchlen, lastmatchoffset> ¤Î¥Ú¥¢¤ò½ÐÎϡפäȤʤé¤Ê¤±¤ì¤Ð¤Ê
+¤é¤Ê¤¤¡£
+
+lastmatchlen ¤Ï¡¢½é´ü¾õÂÖ¤Ç¤Ï THRESHOLD - 1 ¤Ç¤¢¤Ã¤¿¤Î¤Ç¡¢¸«¤Ä¤«¤é¤Ê¤«¤Ã
+¤¿¤È¤¤¤¦¾ò·ï¤Ï (H) ¤Î±¦Â¦¤Î¾ò·ï lastmatchlen < THRESHOLD ¤Ç¤Þ¤ºÉ½¤µ¤ì
+¤Æ¤¤¤ë¡£
+
+¤Ç¤Ï¡¢Î㤨¤Ð lastmatchlen ¤¬ 5 ¤Ç¤¢¤Ã¤¿¤È¤·¤è¤¦¡£¤³¤Î¤È¤ (E) ¤Î½èÍý¤Ç
+matchlen ¤Ï lastmatchlen - 1 ¤Ä¤Þ¤ê¡¢4 ¤ËÀßÄꤵ¤ì¤ë¡£¤½¤·¤Æ¡¢match_insert()
+¤Ç¼¡¤Îʸ»úÎ󤬤⤷¼½ñ¤«¤é¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð matchlen ¤Ï¹¹¿·¤µ¤ì¤Ê¤¤¤Î¤Ç
+ matchlen < lastmatchlen
+¤È¤Ê¤ë¡£¤³¤Î¤è¤¦¤Ê¾ò·ï(Á°²ó¸«¤Ä¤«¤ê¡¢º£²ó¸«¤Ä¤«¤é¤Ê¤¤)¾ì¹ç¤Ë¸Â¤ê¡¢(H.2)
+¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£¤Ç¤Ï¡¢(H.2) ¤Î½èÍý¤òÄɤ¤¤«¤±¤è¤¦¡£
+
+¤Þ¤º¡¢¤³¤Î¾õÂÖ¤ò¿Þ¼¨¤¹¤ë¡£
+
+----------------------------------------------------------------------------
+
+ lastmatchlen lastmatchlen
+ |-- --| |-- --|
+ +---------------+--------------+--------------+--------------+--+
+text | | | | | | | | | | | | | |
+ +---------------+--------------+--------------+--------------+--+
+ ^ | \ \
+ matchpos pos-1 pos pos2
+
+ |--------------------------|
+ lastmatchoffset
+
+----------------------------------------------------------------------------
+
+
+ /* (H.2) */
+ encode_set.output(lastmatchlen + (UCHAR_MAX + 1 - THRESHOLD),
+ (lastmatchoffset) & (dicsiz-1) );
+ --lastmatchlen;
+
+ while (--lastmatchlen > 0) {
+ get_next(); insert();
+ count++;
+ }
+ get_next();
+ matchlen = THRESHOLD - 1;
+ match_insert();
+ if (matchlen > remainder) matchlen = remainder;
+ }
+
+¤Þ¤º¡¢<Ťµ, °ÌÃÖ> ¤Î¥Ú¥¢¤ò½ÐÎϤ¹¤ë¡£¤³¤ì¤Ï¤¤¤¤¤À¤í¤¦¡£½ÐÎϤ¹¤ë¡Ö°ÌÃÖ¡×
+¤Ï0 ¤Ê¤é 1 ʸ»úÁ°¤òɽ¤¹¤Î¤Ç¡¢¼ÂºÝ¤Î¥ª¥Õ¥»¥Ã¥È pos - 1 - matchpos ¤è¤ê
+¤â 1 ¾®¤µ¤¤ÃͤˤʤäƤ¤¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤ª¤³¤¦¡£
+
+¤½¤·¤Æ¡¢lastmatchlen ¤Ï 1 °ú¤«¤ì¤ë¡£¤³¤Î¾ì¹çÎ㤨¤Ð 4 ¤Ë¤Ê¤ë¡£¤·¤¿¤¬¤Ã
+¤Æ¡¢¼¡¤Î¥ë¡¼¥×¤Ç¤Ï 3 ʸ»ú pos ¤¬ÀèÁ÷¤ê¤µ¤ì¤ë(4 ¤Ç¤Ï¤Ê¤¤)¡£pos ¤Ï´û¤Ë 1
+ʸ»úÀè¤Ë¿Ê¤ó¤Ç¤¤¤ë¤Î¤Ç¡¢ºÇ½é¤Ë 1 °ú¤¯¤Î¤Ï¤³¤Î¤³¤È¤ò¹Íθ¤·¤Æ¤¤¤ë¡£while
+¥ë¡¼¥×¤¬½ª¤Ã¤¿¸å¤Ïpos ¤Î°ÌÃ֤ϼºݤ˽ÐÎϤ·¤¿Ê¸»úÎó¤ÎºÇ¸å¤Îʸ»ú pos2-1
+¤ò»Ø¤·¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ë¡£
+
+¤½¤·¤Æ¡¢get_next() ¤Ç¤Þ¤¿ 1 ʸ»úÀè¤ËÁ÷¤ë¡£pos ¤Ï¿Þ¤Î pos2 ¤Î°ÌÃ֤ˤʤ롣
+¤½¤·¤Æ¡¢match_insert() ¤Ç¡¢¤³¤Î°ÌÃÖ¤Îʸ»úÎó¤ò¾È¹ç¤¹¤ë¡£matchlen ¤Ï¡¢
+THRESHOLD - 1 ¤Ë½é´ü²½¤µ¤ì¤ë¤Î¤Ç pos2 ¤Î°ÌÃÖ¤Îʸ»úÎ󤬼½ñ¤«¤é¸«¤Ä¤«¤é
+¤Ê¤±¤ì¤Ð matchlen ¤Ï¡¢THRESHOLD-1 ¤À¡£¤³¤ì¤Ï½é´ü¾õÂÖ¤ÈƱ¤¸¾õÂÖ¤ò¼¨¤¹¤Î
+¤Ç¡¢¼¡¤Î¥ë¡¼¥×¤Î½èÍý¤âÁÛÁü¤¬¤Ä¤¯((H) ¤Î¾ò·ï¤Î±¦Â¦ lastmatchlen < THRESHOLD
+¤¬Í¸ú¤Ë¤Ê¤ë)¡£¤Ç¤Ï¡¢¸«¤Ä¤«¤Ã¤¿¾ì¹ç¤Ï¤È¤¤¤¦¤È¡¢¼¡¤Î¥ë¡¼¥×¤Ç¤µ¤é¤ËÀè
+pos2+1 ¤Î¾È¹ç·ë²Ì¤ÈÈæ³Ó¤µ¤ì¤ë¤Î¤Ç¤³¤Î½èÍý¤âÁÛÁü¤¬¤Ä¤¯¡£
+
+ºÇ½é¡¢¤É¤¦¤Ë¤â¤³¤Î½èÍýÆâÍƤ¬Íý²ò¤Ç¤¤Ê¤«¤Ã¤¿¤Î¤À¤¬¡Ö¸½ºß¤Îʸ»úÎó¤È¡¢¼¡
+¤Îʸ»úÎó¤Î¤½¤ì¤¾¤ì¤Ç¼½ñ¤ò¸¡º÷¤·¡¢¤è¤êŤ¯¸«¤Ä¤«¤Ã¤¿Êý¤ò»È¤¦¡×¤È¤¤¤¦ºÇ
+Ŭ²½¤ò¹Ô¤Ã¤Æ¤¤¤ë»ö¤¬¤ï¤«¤Ã¤Æ¤·¤Þ¤Ã¤¿¸å¤Ï²òÆɤϴÊñ¤À¤Ã¤¿¡£(¼Â¤Ï¤³¤Î»ö
+¼Â¤â¶µ¤¨¤Æ¤â¤é¤Ã¤¿»ö¤À¡£Á´Á³¥À¥á¤¸¤ã¤ó)
# Local Variables:
# mode : indented-text