ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>国产一区二区在线观看免费,欧美国产免费,黄色在线一区http://www.shnenglu.com/nchsea/zh-cnSat, 06 Dec 2025 23:54:49 GMTSat, 06 Dec 2025 23:54:49 GMT60夜深人é™åQŒå¼€å§‹å­¦ä¹?f¨¤n)äº?...http://www.shnenglu.com/nchsea/archive/2009/07/19/90478.htmlseaseaSat, 18 Jul 2009 17:32:00 GMThttp://www.shnenglu.com/nchsea/archive/2009/07/19/90478.htmlhttp://www.shnenglu.com/nchsea/comments/90478.htmlhttp://www.shnenglu.com/nchsea/archive/2009/07/19/90478.html#Feedback0http://www.shnenglu.com/nchsea/comments/commentRss/90478.htmlhttp://www.shnenglu.com/nchsea/services/trackbacks/90478.html
   1.整体了解
   2.语法¾l†èŠ‚
   3.å®ä¾‹
   4.应用



sea 2009-07-19 01:32 å‘表评论
]]>
åŒå­¦è®©æˆ‘å…Ïx³¨ä¸€ä¸‹GORMhttp://www.shnenglu.com/nchsea/archive/2009/05/08/82228.htmlseaseaFri, 08 May 2009 05:04:00 GMThttp://www.shnenglu.com/nchsea/archive/2009/05/08/82228.htmlhttp://www.shnenglu.com/nchsea/comments/82228.htmlhttp://www.shnenglu.com/nchsea/archive/2009/05/08/82228.html#Feedback0http://www.shnenglu.com/nchsea/comments/commentRss/82228.htmlhttp://www.shnenglu.com/nchsea/services/trackbacks/82228.html我别一ä½åŒå­¦å·²¾lå­¦ä¹?f¨¤n)groovy有一ŒD‰|—¶é—´äº†ã€?br />æˆ‘å´æ²¡æœ‰è·Ÿä¸Šã€?br />昨天æ¶äº†ä¸€ä¸‹ç¯å¢ƒï¼Œæ€È®—½—是开始上路了.
好久没有æ–îC¸œè¥¿è¿›å¸äº†åQŒè¯»çš„书也是åŠé€”而废åQŒæ²¡æœ‰è¯»å®Œã€?br />䏿ƒ³èƒŒç€åŒ…袱上èµ\åQŒä¹Ÿä¸å¾è®®å¦‚æ­¤ã€?br />生活本æ¥å¾ˆç®€å•çš„åQŒæ€ä¹ˆ½H然一下å­è§‰å¾—夿‚èµäh¥å‘¢ã€?br />䏿‡‚
䏿‡‚
çœŸçš„ä¸æ‡‚!


sea 2009-05-08 13:04 å‘表评论
]]>
ä¸è®¾è®¡ä¸ç”Ÿæ´»http://www.shnenglu.com/nchsea/archive/2009/04/17/80281.htmlseaseaFri, 17 Apr 2009 11:13:00 GMThttp://www.shnenglu.com/nchsea/archive/2009/04/17/80281.htmlhttp://www.shnenglu.com/nchsea/comments/80281.htmlhttp://www.shnenglu.com/nchsea/archive/2009/04/17/80281.html#Feedback0http://www.shnenglu.com/nchsea/comments/commentRss/80281.htmlhttp://www.shnenglu.com/nchsea/services/trackbacks/80281.html
我è¦è®¡åˆ’的将æ¥ï¼Œè‡›_°‘是三òqß_(d¨¢)¼

三年是个å?

毕业˜q™ä¸ªä¸‰å¹´åQŒæˆ‘没有什么戮±ã€?br />
æ¥ä¸‹æ¥çš„三年呢?


sea 2009-04-17 19:13 å‘表评论
]]>
好久䏿¥http://www.shnenglu.com/nchsea/archive/2009/04/17/80235.htmlseaseaFri, 17 Apr 2009 05:54:00 GMThttp://www.shnenglu.com/nchsea/archive/2009/04/17/80235.htmlhttp://www.shnenglu.com/nchsea/comments/80235.htmlhttp://www.shnenglu.com/nchsea/archive/2009/04/17/80235.html#Feedback0http://www.shnenglu.com/nchsea/comments/commentRss/80235.htmlhttp://www.shnenglu.com/nchsea/services/trackbacks/80235.html

sea 2009-04-17 13:54 å‘表评论
]]>
å­¦JAVA必须知é“åQšæŠ½è±¡ç±»ä¸æ¥å£çš„区别<è½?gt;http://www.shnenglu.com/nchsea/archive/2007/07/23/zhuanzai.htmlseaseaMon, 23 Jul 2007 02:26:00 GMThttp://www.shnenglu.com/nchsea/archive/2007/07/23/zhuanzai.htmlhttp://www.shnenglu.com/nchsea/comments/28613.htmlhttp://www.shnenglu.com/nchsea/archive/2007/07/23/zhuanzai.html#Feedback0http://www.shnenglu.com/nchsea/comments/commentRss/28613.htmlhttp://www.shnenglu.com/nchsea/services/trackbacks/28613.html阅读全文

sea 2007-07-23 10:26 å‘表评论
]]>
用SQL语å¥å®ç°åˆ†é¡µçš„æ–¹æ³?/title><link>http://www.shnenglu.com/nchsea/archive/2007/07/23/sql.html</link><dc:creator>sea</dc:creator><author>sea</author><pubDate>Mon, 23 Jul 2007 01:38:00 GMT</pubDate><guid>http://www.shnenglu.com/nchsea/archive/2007/07/23/sql.html</guid><wfw:comment>http://www.shnenglu.com/nchsea/comments/28609.html</wfw:comment><comments>http://www.shnenglu.com/nchsea/archive/2007/07/23/sql.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/nchsea/comments/commentRss/28609.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/nchsea/services/trackbacks/28609.html</trackback:ping><description><![CDATA[     摘è¦: 用æ¥åˆ†é¡µçš„常用sql语奠 <a href='http://www.shnenglu.com/nchsea/archive/2007/07/23/sql.html'>阅读全文</a><img src ="http://www.shnenglu.com/nchsea/aggbug/28609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/nchsea/" target="_blank">sea</a> 2007-07-23 09:38 <a href="http://www.shnenglu.com/nchsea/archive/2007/07/23/sql.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>å¯Ò(gu¨©)¯”mysql oracle db2 的部分ddl语法 <è½?gt;http://www.shnenglu.com/nchsea/archive/2006/11/27/15705.htmlseaseaMon, 27 Nov 2006 10:46:00 GMThttp://www.shnenglu.com/nchsea/archive/2006/11/27/15705.htmlhttp://www.shnenglu.com/nchsea/comments/15705.htmlhttp://www.shnenglu.com/nchsea/archive/2006/11/27/15705.html#Feedback0http://www.shnenglu.com/nchsea/comments/commentRss/15705.htmlhttp://www.shnenglu.com/nchsea/services/trackbacks/15705.html

å¯Ò(gu¨©)¯”mysql oracle db2 的部分ddl语法

廸™¡¨ã€åˆ é™¤è¡¨:mysql  oracle  db2基本相åŒ
create table test(id integer,name varchar(20),address varchar(20));
(oracle 多用varchar2åQŒä½†ä¹Ÿæ”¯æŒvarchar)
drop table test;

但是修改表就有很大的ä¸åŒäº?如下åQ?/p>

1,å¢åŠ åˆ?相åŒ
alter table test add mail varchar(128);

2,删除�
oracle ä¸mysql相åŒ:alter table test drop column mail;
db2              :ä¸æä¾›åˆ é™¤åˆ—åŠŸèƒ½(è§£å†³åŠæ³•是删除表åQŒé‡å»?

3,更改列å
oracle : alter table test rename column mail to mail2;
mysql  : alter talbe test change mail mail2 varchar(128);
db2    : ä¸æä¾›æ›´æ”¹åˆ—å功èƒ?è§£å†³åŠæ³•åŒåˆ é™¤ï¼Œæˆ–者通过建立一个新视图解决)

4,更改列类å?br />oracle :alter table test modify column (mail2 integer);
mysql  :alter table test modify column mail2 integer;
db2    :alter table test alter mail varchar(256) åªå¯ä»¥åŠ å®½ï¼Œä¸èƒ½æ›´æ”¹¾cÕd‹

5,更改列的é™åˆ¶(主键ã€é½I?
db2   :alter table test alter mail null/not null;
mysql :alter table test modify mail2 varchar(29) not null;
oracle:alter table test modify mail2 null/not null;

å…³äºdb2ä¸æä¾›è§£å†›_Šæ³•,å‚考这é‡?br />http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/0207adamache/0430_adamache3.html
截å–éƒ¨åˆ†åŸæ–‡
-------------------------------------------------------------------------------
DROP COLUMNåQšDB2 ä¸å…许æ?zh¨¨n)¨åˆ é™¤ä¸€ä¸ªåˆ—。我å¯ä»¥æƒ›_ˆ°æ‚(zh¨¨n)¨å¸Œæœ›åˆ é™¤åˆ—的三个ç†ç”±ï¼š(x¨¬)
囿”¶½Iºé—´åQšå¦‚æœæ?zh¨¨n)¨å¸Œæœ›˜q™æ ·åšï¼Œå¯ä»¥å¯¼å‡ºæ‚(zh¨¨n)¨å¸Œæœ›ä¿å­˜çš„æ•°æ®åQŒåˆ é™¤é‚£ä¸ªè¡¨åQŒç”¨æ‚(zh¨¨n)¨éœ€è¦çš„é‚£äº›åˆ—é‡æ–°åˆ›å»ø™¡¨åQŒç„¶å装å…?br />˜q™ä¸ªè¡¨ã€‚这是å¦ä»£ä­h(hu¨¢n)高昂åQŸå½“然是åQŒä½†æ˜¯å›æ”¶ç©ºé—´éœ€è¦è¿™æ ähˆ–è€?REORG TABLE。这些本æ¥å°±æ˜¯ä»£ä»·é«˜æ˜‚çš„æ“作ã€?

˜q™ä¸ªåˆ—ä¸å†æ˜¯è¡Œçš„逻辑部分åQšä¾‹å¦‚,æ‚(zh¨¨n)¨æ„识到æ‚(zh¨¨n)¨çš„雇员å¯èƒ½æœ‰ä¸¤ä¸ªåœ°å€åQŒåÆˆä¸”åœæ­¢è·Ÿítªé›‡å‘˜ï¼ˆemployeeåQ‰è¡¨ä¸­çš„地å€
åQˆé›‡å‘˜è¡¨å’Œé›‡å‘˜åœ°å€åQˆemployee_addressåQ‰è¡¨ä¹‹é—´ç°åœ¨æœ?n:m 关系åQ‰ã€‚在雇员表上创å¾ä¸€ä¸ªä¸åŒ…å«åœ°å€åˆ—的视图ã€?
å¦‚æœæ‚(zh¨¨n)¨çœŸçš„è¦ç”¨æ–°å¥‡çš„æ–Ò(gu¨©)³•åQŒå¯ä»¥ä‹Éç”?RENAME TABLE 命ä×o(h¨´)¾l™åŸºè¡¨ä¸€ä¸ªæ–°çš„å¿UͼŒç„¶å®†åŸå§‹è¡¨åä½œä¸ø™¯¥è§†å›¾çš?br />å称。æ?zh¨¨n)¨çš„视图也å¯ä»¥˜qæ¥é›‡å‘˜è¡¨ä¸­çš„æœ‰ç”¨åˆ—å’Œä»é›‡å‘˜åœ°å€è·å¾—的地å€ã€‚ç°åœ¨æˆ‘们å›åˆîCº†å…³ç³»çš„æ­£é“ã€?/p>

列å˜å®½äº†ã€‚如æœå®ƒæ˜?VARCHARåQŒé‚£æ‚(zh¨¨n)¨è¿æ°”ä¸é”™ã€‚DB2 å…许æ‚(zh¨¨n)¨å°† VARCHAR 列最多加宽至表空é—ß_(d¨¢)¼ˆtablespaceåQ?br />中定义的™åµå¤§®å®½åº¦ï¼ˆ¾~ºçœçš?4K ™åµå¤§®äØ“(f¨´) 4,005åQŒè€Œåœ¨ 32K ™åµä¸Šæœ€å¤šäØ“(f¨´) 32,672åQ‰ï¼š(x¨¬)
---------------------------------------------------------------------------------

但是˜q‡ç¨‹ä¸­é—®ä¸€ä¸ªæœ‹å‹ï¼Œå¾—到的结论是å¯ä»¥æ”¹ï¼ŒçŸ›ç›¾å•Šç‘ô¾l­æ‰¾èµ„æ–™:
http://www-1.ibm.com/support/docview.wss?uid=swg21004049
部分截å–åŸæ–‡
-------------------------------------------------------------------------------
In DB2] Universal Databaseâ„?(DB2 UDB) Version 8.2, the Control Center automates
the process of altering a table where recreation of the table is necessary,
saving the user from performing a lengthy set of manual steps. Specifically,
the Control Center will automate the following operations: rename a column;
drop a column; change the data type of a column; change the length, scope,
or precision values for a column; change whether a column is nullable. If necessary,
the table that is being changed will be dropped and recreated, and DB2 UDB will
help the user restore any dependent objects and transform the existing data into
the target data type of each remaining column.
You cannot drop a column in DB2 UDB Version 8.1 or earlier. There are work-arounds.
 For example, you can increase the width of a VARCHAR column up to the largest
 column width supported by the page size used by the table (4005 bytes by default,
  but possibly as large as 32672 byes on 32K pages). The page size is chosen
  when the table space is created. To handle more complex changes:
  -----------------------------------------------------------------------------
  åŸæ¥DB2 UDB Version 8.1 or earlier䏿”¯æŒï¼Œ8.2æ‰å¼€å§‹æ”¯æŒã€?/p>

 

posted on 2006-11-22 15:41 dreamstone 阅读(365) 评论(0)  ¾~–辑 æ”¶è— 引用 æ”¶è—è‡?65Key 所å±åˆ†¾c? 饭碗



sea 2006-11-27 18:46 å‘表评论
]]>
Command模å¼<è½?gt;http://www.shnenglu.com/nchsea/archive/2006/11/27/15704.htmlseaseaMon, 27 Nov 2006 10:38:00 GMThttp://www.shnenglu.com/nchsea/archive/2006/11/27/15704.htmlhttp://www.shnenglu.com/nchsea/comments/15704.htmlhttp://www.shnenglu.com/nchsea/archive/2006/11/27/15704.html#Feedback1http://www.shnenglu.com/nchsea/comments/commentRss/15704.htmlhttp://www.shnenglu.com/nchsea/services/trackbacks/15704.html阅读全文

sea 2006-11-27 18:38 å‘表评论
]]>
zip 的勾~©åŸç†ä¸å®ç°(è½?http://www.shnenglu.com/nchsea/archive/2006/11/17/15299.htmlseaseaFri, 17 Nov 2006 08:27:00 GMThttp://www.shnenglu.com/nchsea/archive/2006/11/17/15299.htmlhttp://www.shnenglu.com/nchsea/comments/15299.htmlhttp://www.shnenglu.com/nchsea/archive/2006/11/17/15299.html#Feedback3http://www.shnenglu.com/nchsea/comments/commentRss/15299.htmlhttp://www.shnenglu.com/nchsea/services/trackbacks/15299.htmlæ— æŸæ•°æ®å‹ç¾ƒæ˜¯ä¸€ä»¶å¥‡å¦™çš„事情åQŒæƒ³ä¸€æƒ»I¼Œä¸€ä¸²ä“Qæ„的数æ®èƒ½å¤Ÿæ Ò(gu¨©)®ä¸€å®šçš„è§„åˆ™è½¬æ¢æˆåªæœ‰åŸæ?1/2 - 1/5 长度的数æ®ï¼Œòq¶ä¸”能够按照相应的规则还åŸåˆ°åŸæ¥çš„æ ·å­ï¼Œå¬è“væ¥çœŸæ˜¯å¾ˆé…—÷€?br />åŠå¹´å‰ï¼Œè‹¦ç†¬˜q‡åˆå­?vc æ—‰™‚£ŒDµè‰°éš„¡š„学习(f¨¤n)曲线的我åQŒå¯¹ MFCã€SDK å¼€å§‹å¤±æœ›å’Œä¸æ»¡åQŒè¿™äº›è™½ç„¶ä¸½—易学,但和 DHTML 没有å®è´¨ä¸Šçš„区别åQŒéƒ½æ˜¯è°ƒç”¨å¾®è½¯æä¾›çš„å„ç§å„样的函æ•ͼŒä¸éœ€è¦ä½ è‡ªå·±åÕdˆ›å»ŞZ¸€ä¸ªçª—å£ï¼Œå¤šçº¿½E‹ç¼–½E‹æ—¶åQŒä¹Ÿä¸éœ€è¦ä½ è‡ªå·±åÕdˆ†é…?CPU æ—‰™—´ã€‚我也嚘q‡é©±åŠ¨ï¼ŒåŒæ ·åQŒæœ‰DDKåQˆå¾®è½¯é©±åЍ开å‘包åQ‰ï¼Œå½“ç„¶åQŒä¹Ÿæœ?DDK 的“å‚考手册â€ï¼Œ˜q一个最½€å•的数殾l“æ„都ä¸éœ€è¦ä½ è‡ªå·±åšï¼Œä¸€åˆ‡éƒ½æ˜¯å‡½æ•°ã€å‡½æ•°â€¦â€?
å¾®èÊY的高¾U§ç¨‹åºå‘˜¾~–写了函数让我们˜q™äº›æåº”用的å»è°ƒç”¨ï¼Œæˆ‘䏿ƒ›_œ¨˜q™é‡Œè´¬ä½æåº”用的人,正是˜q™äº›åº”ç”¨å·¥ç¨‹å¸ˆè¿æ¥è“v了科学和½C¾ä¼š(x¨¬)之间的桥æ¢ï¼Œ®†æ¥å¯ä»¥åšé”€å”®ï¼Œåšç®¡ç†ï¼Œç”¨è‡ªå·±é€æ¸¿U¯ç¯èµäh¥çš„æ™ºæ…§å’Œ¾l验在社ä¼?x¨¬)上打拼ã€?br />但是åQŒåœ¨æŠ€æœ¯ä¸Šæ¥è¯´åQŒè¯šå®åœ°è¯ß_(d¨¢)¼Œ˜q™åƈä¸é«˜æ·±ï¼Œä¸æ˜¯å—?½W¬ä¸€‹¹çš„å…¬å¸å¦‚微软ã€Sybaseã€Oracle ½{‰æ€ÀL˜¯é¢å‘½C¾ä¼š(x¨¬)大众的,˜q™æ ·æ‰èƒ½æœ‰å·¨å¤§çš„市场。但是他们往往也是站在½C¾ä¼š(x¨¬)的最™å¶å±‚的:(x¨¬)æ“作¾pÈ»Ÿã€ç¼–è¯‘å™¨ã€æ•°æ®åº“都值得一代代的专家å»ä¸æ–­ç ”究。这些å¸å›½èˆ¬çš„ä¼ä¸šä¹‹æ‰€ä»¥ä¼Ÿå¤§ï¼Œææ€•䏿˜¯â€œæœ‰¾l验â€ã€â€œèƒ½åƒè‹¦â€è¿™äº›ä¸­å›½ç‰¹è‰²çš„æ¦‚念所能涵盖的åQŒè‰°æ·Şqš„æŠ€æœ¯ä½“¾p…R€ç°ä»£çš„½¡ç†å“²å­¦ã€å¼ºå¤§çš„市场能力都是¾~ŞZ¸€ä¸å¯çš„å§ã€‚æˆ‘ä»¬æ—¢ç„¶æœ‰å¿—äºæŠ€æœ¯ï¼Œòq¶ä¸”正在èµäh­¥é˜¶æ®µåQŒä½•必急ä¸å¯è€åœ°è¦è{åÕdšâ€œç®¡ç†â€ï¼Œåšâ€œé’òq´æ‰ä¿Šâ€ï¼Œé‚£äº›æ‰€è°“的“æˆåŠŸäh士â€çš„æ ¹åº•能有几何åQŒè¿™æ ·å­‹¹®èºåQŒèƒ¸ä¸­çš„规模和格局能有多大åQ?br />
在我å‘ç°vcåªæ˜¯ä¸€ä¸ªç”¨é€”广泛的¾~–程工具åQŒåƈä¸èƒ½ä»£è¡¨â€œçŸ¥è¯†â€ã€â€œæŠ€æœ¯â€çš„æ—¶å€™ï¼Œæˆ‘有些失è½ï¼Œæ— æ‰€ä¸èƒ½çš„䏿˜¯æˆ‘åQŒè€Œæ˜¯ MFCã€SDKã€DDKåQŒæ˜¯å¾®èÊY的工½E‹å¸ˆåQŒä»–们åšçš„,正是我想åšçš„åQŒæˆ–者说åQŒæˆ‘也想æˆäØ“(f¨´)é‚£ç§å±‚次的ähåQŒç°åœ¨æˆ‘知é“了,他们是专å®Ó¼Œä½†è¿™ä¸ä¼š(x¨¬)是一个梦åQŒæœ‰ä¸€å¤©æˆ‘ä¼?x¨¬)åšåˆ°çš„åQŒäØ“(f¨´)什么ä¸èƒ½è¯´å‡ºæˆ‘的想法呢ã€?br />那时公å¸åšçš„¾pÈ»Ÿé‡Œæœ‰ä¸€ä¸ªå‹¾~©æ¨¡å—,领导找了一ä¸?zlib 库,ä¸è®©æˆ‘自己åšå‹ç¾ƒ½—法åQŒç«™åœ¨å…¬å¸çš„立场上,我很ç†è§£åQŒçœŸçš„很ç†è§£åQŒè‡ªå·±åš½—æ³•è¦å¤šä¹…啊。但那时自己心中éšè—的一份倔强é©×ƒ‹É我å»å¯ÀL‰¾å‹ç¾ƒåŸç†çš„资料,我完全没有æ„识到åQŒæˆ‘å›_°†æ‰“开一扇大门,˜q›å…¥ä¸€ä¸ªç¥å¥‡çš„“数æ®ç»“æ„â€çš„世界。“计½—机艺术â€çš„½W¬ä¸€¾U‰K˜³å…‰ï¼Œå±…然也照åˆîCº†æˆ‘这样一个åã^凡的人的íw«ä¸Šã€?br />
上é¢è¯´åˆ°â€œè®¡½—机艺术â€ï¼Œæˆ–者进一步细化说“计½—机¾~–程艺术â€ï¼Œå¬è“væ¥å¾ˆæ·±å¥¥åQŒå¾ˆé«˜é›…åQŒä½†æ˜¯åœ¨®†è¦˜q›å…¥ä¸“业的勾~©ç®—法的研究æ—Ó¼Œæˆ‘è¦è¯·å¤§å®¶åšçš„第一件事情是åQšå¿˜æ‰è‡ªå·Şqš„òq´é¾„ã€å­¦å†ï¼Œå¿˜æ‰è‡ªå·±çš„社ä¼?x¨¬)èín份,忘找~–程语言åQŒå¿˜æ‰â€œé¢å‘对象â€ã€â€œä¸‰å±‚æ¶æ„â€ç­‰ä¸€åˆ‡æœ¯è¯­ã€‚把自己当作一个å°å­©ï¼Œæœ‰ä¸€åŒæ±‚知的眼ç›åQŒå¯¹ä¸–界充满ä¸å€¦çš„ã€å•¾U¯çš„好奇åQŒå”¯ä¸€çš„å‰ææ˜¯ä¸€ä¸ªæ­£å¸¸çš„å…ähœ‰äººç±»ç†æ€§æ€ç»´èƒ½åŠ›çš„å¤§è„‘ã€?br />下颮Şp®©æˆ‘们开始一ŒD능奇的å‹ç¾ƒ½—法之旅å§ï¼š(x¨¬)


1. åŸç†éƒ¨åˆ†åQ?br />  有两¿UåÅå¼çš„é‡å¤å­˜åœ¨äºè®¡½—机数æ®ä¸­ï¼Œzip ®±æ˜¯å¯¹è¿™ä¸¤ç§é‡å¤˜q›è¡Œäº†å‹¾~©ã€?br />  一¿U是短语形å¼çš„é‡å¤ï¼Œå³ä¸‰ä¸ªå­—节以上的é‡å¤åQŒå¯¹äºè¿™¿Ué‡å¤ï¼Œzip用两个数字:(x¨¬)1.é‡å¤ä½ç½®è·å½“å‰å‹¾~©ä½¾|®çš„è·ç¦»åQ?.é‡å¤çš„长度,æ¥è¡¨½Cø™¿™ä¸ªé‡å¤ï¼Œå‡è®¾˜q™ä¸¤ä¸ªæ•°å­—å„å ä¸€ä¸ªå­—èŠ‚ï¼Œäºæ˜¯æ•°æ®ä¾¿å¾—åˆîCº†å‹ç¾ƒåQŒè¿™å¾ˆå®¹æ˜“ç†è§£ã€?br />  一个字节有 0 - 255 å…?256 ¿Uå¯èƒ½çš„å–å€û|¼Œä¸‰ä¸ªå­—节æœ?256 * 256 * 256 å…׃¸€åƒå…­ç™‘Ö¤šä¸‡ç§å¯èƒ½çš„æƒ…况,更长的短语å–值的å¯èƒ½æƒ…况以指数方å¼å¢é•¿ï¼Œå‡ºç°é‡å¤çš„æ¦‚ç‡ä¼¼ä¹æä½ï¼Œå®åˆ™ä¸ç„¶åQŒå„¿Uç±»å‹çš„æ•°æ®éƒ½æœ‰å‡ºç°é‡å¤çš„們֑åQŒä¸€½‹‡è®ºæ–‡ä¸­åQŒäØ“(f¨´)æ•îC¸å¤šçš„æœ¯è¯­å€‘Ö‘äºé‡å¤å‡ºçͼ›ä¸€½‹‡å°è¯ß_(d¨¢)¼Œäººå和地å会(x¨¬)é‡å¤å‡ºç°åQ›ä¸€å¼ ä¸Šä¸‹æ¸å˜çš„背景囄¡‰‡åQŒæ°´òqÏx–¹å‘上的åƒç´ ä¼š(x¨¬)é‡å¤å‡ºç°åQ›ç¨‹åºçš„æºæ–‡ä»¶ä¸­åQŒè¯­æ³•关键字ä¼?x¨¬)é‡å¤å‡ºçͼˆæˆ‘ä»¬å†™ç¨‹åºæ—¶åQŒå¤š®‘次å‰åcopyã€pasteåQŸï¼‰åQŒä»¥å‡ å K 为å•ä½çš„é勾~©æ ¼å¼çš„æ•°æ®ä¸­ï¼Œå€‘Ö‘äºå¤§é‡å‡ºç°çŸ­è¯­å¼çš„é‡å¤ã€‚绘q‡ä¸Šé¢æåˆ°çš„æ–¹å¼˜q›è¡Œå‹ç¾ƒå,短语å¼é‡å¤çš„們֑被完全破å,所以在å‹ç¾ƒçš„结æœä¸Š˜q›è¡Œ½W¬äºŒ‹Æ¡çŸ­è¯­å¼å‹ç¾ƒä¸€èˆ¬æ˜¯æ²¡æœ‰æ•ˆæœçš„ã€?br />  ½W¬äºŒ¿Ué‡å¤äØ“(f¨´)å•字节的é‡å¤åQŒä¸€ä¸ªå­—èŠ‚åªæœ?56¿Uå¯èƒ½çš„å–å€û|¼Œæ‰€ä»¥è¿™¿Ué‡å¤æ˜¯å¿…然的。其中,æŸäº›å­—节出簋ơ数å¯èƒ½è¾ƒå¤šåQŒå¦ä¸€äº›åˆ™è¾ƒå°‘åQŒåœ¨¾lŸè®¡ä¸Šæœ‰åˆ†å¸ƒä¸å‡åŒ€çš„們֑åQŒè¿™æ˜¯å®¹æ˜“ç†è§£çš„åQŒæ¯”如一ä¸?ASCII 文本文äšg中,æŸäº›½W¦å·å¯èƒ½å¾ˆå°‘用到åQŒè€Œå­—æ¯å’Œæ•°å­—则ä‹É用较多,å„å­—æ¯çš„使用频ç‡ä¹Ÿæ˜¯ä¸ä¸€æ ïL(f¨¥ng)š„åQŒæ®è¯´å­—æ¯?e çš„ä‹Éç”¨æ¦‚ç‡æœ€é«˜ï¼›è®¸å¤šå›„¡‰‡å‘ˆç°æ·Şp‰²è°ƒæˆ–‹¹…è‰²è°ƒï¼Œæ·Şp‰²åQˆæˆ–‹¹…色åQ‰çš„åƒç´ ä½¿ç”¨è¾ƒå¤šåQˆè¿™é‡Œé¡ºä¾¿æä¸€ä¸‹ï¼š(x¨¬)png 囄¡‰‡æ ¼å¼æ˜¯ä¸€¿Uæ— æŸå‹¾~©ï¼Œå…¶æ ¸å¿ƒç®—法就æ˜?zip ½—法åQŒå®ƒå’?zip æ ¼å¼çš„æ–‡ä»¶çš„主è¦åŒºåˆ«åœ¨äºåQšä½œä¸ŞZ¸€¿U图片格å¼ï¼Œå®ƒåœ¨æ–‡äšg头处存放了图片的大å°ã€ä‹É用的颜色数等信æ¯åQ‰ï¼›ä¸Šé¢æåˆ°çš„短语å¼å‹ç¾ƒçš„结æœä¹Ÿæœ‰è¿™¿U們֑åQšé‡å¤å€‘Ö‘äºå‡ºç°åœ¨¼›Õd½“å‰å‹¾~©ä½¾|®è¾ƒ˜q‘的地方åQŒé‡å¤é•¿åº¦å€‘Ö‘äºæ¯”较短åQ?0字节以内åQ‰ã€‚è¿™æ øP¼Œ®±æœ‰äº†å‹¾~©çš„å¯èƒ½åQšç»™ 256 ¿U字节å–值釿–°ç¼–ç ï¼Œä½¿å‡ºç°è¾ƒå¤šçš„字节使用较短的编ç ï¼Œå‡ºç°è¾ƒå°‘的字节ä‹É用较长的¾~–ç åQŒè¿™æ ·ä¸€æ¥ï¼Œå˜çŸ­çš„字节相对äºå˜é•¿çš„字节更多,文äšg的总长度就ä¼?x¨¬)凮‘,òq¶ä¸”åQŒå­—节ä‹É用比例越ä¸å‡åŒ€åQŒå‹¾~©æ¯”例就­‘Šå¤§ã€?br />  在进一步讨论编ç çš„è¦æ±‚以åŠ(qi¨¢ng)åŠæ³•å‰ï¼Œå…ˆæä¸€ä¸‹ï¼š(x¨¬)¾~–ç å¼å‹¾~©å¿…™åÕdœ¨çŸ­è¯­å¼å‹¾~©ä¹‹åè¿›è¡Œï¼Œå› äØ“(f¨´)¾~–ç å¼å‹¾~©ååQŒåŸå…ˆå…«ä½äºŒ˜q›åˆ¶å€¼çš„字节®Şp¢«ç ´å了,˜q™æ ·æ–‡äšg中短语å¼é‡å¤çš„們֑也会(x¨¬)被破å(除é先进行解ç ï¼‰ã€‚å¦å¤–,短语å¼å‹¾~©å的结æœï¼š(x¨¬)那些剩下的未被匹é…çš„å•ã€åŒå­—节和得到匹é…çš„è·ç¦»ã€é•¿åº¦å€ég»ç„¶å…·æœ‰å–值分布ä¸å‡åŒ€æ€§ï¼Œå› æ­¤åQŒä¸¤¿U勾~©æ–¹å¼çš„™åºåºä¸èƒ½å˜ã€?br />  在编ç å¼å‹ç¾ƒå,以迾l­çš„å…«ä½ä½œäØ“(f¨´)一个字节,åŸå…ˆæœªå‹¾~©æ–‡ä»¶ä¸­æ‰€å…ähœ‰çš„字节å–å€ég¸å‡åŒ€çš„們֑被彻底破å,æˆäØ“(f¨´)éšæœºæ€§å–å€û|¼Œæ Ò(gu¨©)®¾lŸè®¡å­¦çŸ¥è¯†ï¼Œéšæœºæ€§å–值具有å‡åŒ€æ€§çš„們֑åQˆæ¯”如抛¼‹¬å¸è¯•验åQŒæŠ›ä¸€åƒæ¬¡åQŒæ­£å颿œä¸Šçš„æ¬¡æ•°éƒ½æ¥è¿‘äº?500 ‹Æ¡ï¼‰ã€‚因此,¾~–ç å¼å‹¾~©åçš„ç»“æœæ— æ³•冘q›è¡Œ¾~–ç å¼å‹¾~©ã€?br />  短语å¼å‹¾~©å’Œ¾~–ç å¼å‹¾~©æ˜¯ç›®å‰è®¡ç®—机科学界研究出的仅有的两¿Uæ— æŸå‹¾~©æ–¹æ³•,它们都无法é‡å¤è¿›è¡Œï¼Œæ‰€ä»¥ï¼Œå‹ç¾ƒæ–‡äšgæ— æ³•å†æ¬¡å‹ç¾ƒåQˆå®é™…上åQŒèƒ½å夘q›è¡Œçš„勾~©ç®—法是ä¸å¯æƒŒ™±¡çš„ï¼Œå› äØ“(f¨´)最¾lˆä¼š(x¨¬)å‹ç¾ƒåˆ?0 字节åQ‰ã€?br />=====================================

åQˆè¡¥å……)

å‹ç¾ƒæ–‡äšgæ— æ³•å†æ¬¡å‹ç¾ƒæ˜¯å› ä¸ºï¼š(x¨¬)
1. 短语å¼å‹¾~©å»æ‰äº†ä¸‰ä¸ªå­—节以上的é‡å¤ï¼Œå‹ç¾ƒåçš„¾l“æœä¸­åŒ…å«çš„æ˜¯æœªåŒšw…çš„å•åŒå­—节,和匹é…è·¼›…R€é•¿åº¦çš„¾l„åˆã€‚这个结æœå½“ç„¶ä»ç„¶å¯èƒ½åŒ…å«ä¸‰ä¸ªå­—节以上的é‡å¤åQŒä½†æ˜¯æ¦‚ç‡æä½ã€‚å› ä¸ŞZ¸‰ä¸ªå­—节有 256 * 256 * 256 å…׃¸€åƒå…­ç™‘Ö¤šä¸‡ç§å¯èƒ½çš„æƒ…况,一åƒå…­ç™¾ä¸‡åˆ†ä¹‹ä¸€çš„æ¦‚ç‡å¯¼è‡´åŒ¹é…çš„è·ç¦»å¾ˆé•¿åQŒéœ€è¦äºŒ˜q›åˆ¶æ•?4使¥è¡¨ç¤º˜q™ä¸ªåŒšw…è·ç¦»åQŒå†åŠ ä¸ŠåŒšw…长度®Şp¶…˜q‡äº†ä¸‰ä¸ªå­—节åQŒå¾—ä¸å¿å¤±ã€‚所以åªèƒ½å‹¾~©æ‰åŸå§‹æ–‡äšg中“自然存在的åQŒåƈééšæœºçš„短语å¼é‡å¤å€‘Ö‘â€ã€?br />2.¾~–ç å¼å‹¾~©åˆ©ç”¨å„个å•字节使用频ç‡ä¸ä¸€æ ïL(f¨¥ng)š„們֑åQŒä‹É定长¾~–ç å˜äØ“(f¨´)ä¸å®šé•¿ç¼–ç ï¼Œ¾l™ä‹É用频ç‡é«˜çš„字节更短的¾~–ç åQŒä‹É用频ç‡ä½çš„字节更长的¾~–ç åQŒè“v到勾~©çš„æ•ˆæœã€‚å¦‚æœæŠŠ¾~–ç å¼å‹¾~©çš„“结æœâ€æŒ‰ç…?ä½ä½œä¸?字节åQŒé‡æ–°ç»Ÿè®¡å„字节的ä‹É用频ç‡ï¼Œåº”该是大致相½{‰çš„。因为新的字节ä‹Éç”¨é¢‘ç‡æ˜¯éšæœºçš„ã€‚ç›¸½{‰çš„频ç‡å†å»å˜æ¢å­—节长短是没有æ„义的åQŒå› ä¸ºå˜çŸ­çš„字节没有比å˜é•¿çš„字节更多ã€?br />
=======================================

  短语å¼é‡å¤çš„們֑和字节å–值分布ä¸å‡åŒ€çš„們֑是å¯ä»¥å‹¾~©çš„基础åQŒä¸¤¿U勾~©çš„™åºåºä¸èƒ½äº’æ¢çš„åŸå› ä¹Ÿè¯´äº†åQŒä¸‹é¢æˆ‘们æ¥çœ‹ç¼–ç å¼å‹ç¾ƒçš„è¦æ±‚åŠ(qi¨¢ng)æ–Ò(gu¨©)³•åQ?br />
首先åQŒäØ“(f¨´)了ä‹É用ä¸å®šé•¿çš„ç¼–ç è¡¨½Cºå•个字½W¦ï¼Œ¾~–ç å¿…é¡»½W¦åˆâ€œå‰¾~€¾~–ç â€çš„è¦æ±‚åQŒå³è¾ƒçŸ­çš„ç¼–ç å†³ä¸èƒ½æ˜¯è¾ƒé•¿ç¼–ç çš„å‰ç¼€åQŒå˜q‡æ¥è¯´å°±æ˜¯ï¼Œä»ÖM½•一个字½W¦çš„¾~–ç åQŒéƒ½ä¸æ˜¯ç”±å¦ä¸€ä¸ªå­—½W¦çš„¾~–ç åŠ ä¸Šè‹¥å¹²ä½?0 æˆ?1 ¾l„æˆåQŒå¦åˆ™è§£å‹ç¾ƒ½E‹åº®†æ— æ³•è§£ç ã€?br />看一下剾~€¾~–ç çš„一个最½€å•的例å­åQ?br />

½W¦å· ¾~–ç 
A 0
B 10
C 110
D 1110
E 11110

有了上é¢çš„ç è¡¨ï¼Œä½ ä¸€å®šå¯ä»¥è½»æ‘Öœ°ä»ä¸‹é¢è¿™ä¸²äºŒ˜q›åˆ¶‹¹ä¸­åˆ†èöL出真正的信æ¯å†…容了:(x¨¬)

1110010101110110111100010 - DABBDCEAAB

è¦æ„造符åˆè¿™ä¸€è¦æ±‚的二˜q›åˆ¶¾~–ç ä½“ç³»åQŒäºŒå‰æ ‘(w¨¨i)æ˜¯æœ€ç†æƒ³çš„选择。考察下题q™æ£µäºŒå‰æ ?w¨¨i)ï¼?x¨¬)

        �root)
       0  |   1
       +-------+--------+
    0  | 1   0  |  1
    +-----+------+  +----+----+
    |     |  |     |
    a      |  d     e
     0  |  1
     +-----+-----+
     |     |
     b     c

è¦ç¼–ç çš„字符æ€ÀL˜¯å‡ºç°åœ¨æ ‘(w¨¨i)å¶ä¸ŠåQŒå‡å®šä»æ ¹å‘æ ?w¨¨i)å¶è¡Œèµ°çš„过½E‹ä¸­åQŒå·¦è½¬äØ“(f¨´)0åQŒå³è½¬äØ“(f¨´)1åQŒåˆ™ä¸€ä¸ªå­—½W¦çš„¾~–ç ®±æ˜¯ä»æ ¹èµ°åˆ°è¯¥å­—½W¦æ‰€åœ¨æ ‘(w¨¨i)å¶çš„è·¯å¾„ã€‚æ­£å› äØ“(f¨´)字符åªèƒ½å‡ºç°åœ¨æ ‘(w¨¨i)å¶ä¸ŠåQŒä“Q何一个字½W¦çš„路径都ä¸ä¼?x¨¬)是å¦ä¸€å­—符路径的剾~€è·¯å¾„åQŒç¬¦åˆè¦æ±‚çš„å‰ç¼€¾~–ç ä¹Ÿå°±æ„造æˆåŠŸäº†åQ?br />
a - 00 b - 010 c - 011 d - 10 e - 11


æ¥ä¸‹æ¥æ¥çœ‹ç¼–ç å¼å‹ç¾ƒçš„过½E‹ï¼š(x¨¬)
个Zº†½€åŒ–问题,å‡å®šä¸€ä¸ªæ–‡ä»¶ä¸­åªå‡ºçîCº† aåQŒbåQŒcåQŒd åQŒe五ç§å­—符åQŒå®ƒä»¬çš„出簋ơ数分别æ˜?br />a : 6‹Æ?br />b : 15‹Æ?br />c : 2‹Æ?br />d : 9‹Æ?br />e : 1‹Æ?br />如æœç”¨å®šé•¿çš„¾~–ç æ–¹å¼ä¸ø™¿™å››ç§å­—符¾~–ç åQ?a : 000 b : 001 c : 010 d : 011 e : 100
那么整个文äšg的长度是 3*6 + 3*15 + 3*2 + 3*9 + 3*1 = 99

ç”¨äºŒå‰æ ‘(w¨¨i)表示˜q™å››¿Uç¼–ç ?其中å¶å­èŠ‚ç‚¹ä¸Šçš„æ•°å­—æ˜¯å…¶ä½¿ç”¨‹Æ¡æ•°åQŒéå¶å­èŠ‚ç‚¹ä¸Šçš„æ•°å­—æ˜¯å…¶å·¦å³å­©å­ä½¿ç”¨‹Æ¡æ•°ä¹‹å’Œ):

          �br />           |
      +---------33---------+
      |        |
   +----32---+      +----1---+
   |    |      |    |
+-21-+    +-11-+    +--1--+  
|   |    |   |    |   |
6   15  2  9    1   

åQˆå¦‚æœæŸä¸ªèŠ‚ç‚¹åªæœ‰ä¸€ä¸ªå­èŠ‚ç‚¹åQŒå¯ä»¥å»æ‰è¿™ä¸ªå­èŠ‚ç‚¹ã€‚ï¼‰

         �br />         |
        +------33------+
       |     |
    +-----32----+     1
    |      |
  +--21--+  +--11--+
  |   |  |   |
  6   15 2    9

ç°åœ¨çš„ç¼–ç æ˜¯åQ?a : 000 b : 001 c : 010 d : 011 e : 1 ä»ç„¶½W¦åˆâ€œå‰¾~€¾~–ç â€çš„è¦æ±‚ã€?br />
½W¬ä¸€æ­¥ï¼š(x¨¬)如æœå‘ç°ä¸‹å±‚节点的数字大äºä¸Šå±‚节点的数字åQŒå°±äº¤æ¢å®ƒä»¬çš„ä½¾|®ï¼Œòq‰™‡æ–°è®¡½—éå¶å­èŠ‚ç‚¹çš„å€¹{€?br />先交æ?1å’?åQŒç”±äº?1个字节羃短了一ä½ï¼Œ1个字节å¢é•¿äº†ä¸€ä½ï¼Œæ€ÀL–‡ä»¶ç¾ƒçŸ­äº†10ä½ã€?br />
           �br />            |
       +----------33---------+
       |        |
   +-----22----+     +----11----+
   |      |     |     |
+--21--+    1      2     9
|     |
6   15

å†äº¤æ?5å’?ã€?å’?åQŒæœ€¾lˆå¾—到这æ ïL(f¨¥ng)š„æ ?w¨¨i)ï¼?x¨¬)

           �br />            |
       +----------33---------+
       |        |
     +-----18----+    +----15----+
    |      |    |     |
  +--3--+    15   6     9
  |   |
  2   1

˜q™æ—¶æ‰€æœ‰ä¸Šå±‚节点的数值都大äºä¸‹å±‚节点的数å€û|¼Œä¼ég¹æ— æ³•å†è¿›ä¸€æ­¥å‹¾~©äº†ã€‚但是我们把æ¯ä¸€å±‚的最®çš„两个节点¾l“åˆèµäh¥åQŒå¸¸ä¼?x¨¬)å‘çîC»æœ‰å‹¾~©ä½™åœ°ã€?br />
½W¬äºŒæ­¥ï¼š(x¨¬)把æ¯ä¸€å±‚的最®çš„两个节点¾l“åˆèµäh¥åQŒé‡æ–°è®¡½—相兌™Š‚点的倹{€?br />
在上é¢çš„æ ?w¨¨i)中åQŒç¬¬ä¸€ã€äºŒã€å››ä¸‰å±‚éƒ½åªæœ‰ä¸€æˆ–äºŒä¸ªèŠ‚ç‚¹ï¼Œæ— æ³•é‡æ–°¾l„åˆåQŒä½†½W¬ä¸‰å±‚上有四个节点,我们把最®çš„3å’?¾l“åˆèµäh¥åQŒåÆˆé‡æ–°è®¡ç®—相关节点的å€û|¼ŒæˆäØ“(f¨´)下题q™æ£µæ ?w¨¨i)ã€?br />
           �br />            |
       +----------33---------+
       |         |
    +------9-----+    +----24----+
    |      |    |     |
   +--3--+    6   15    9
   |   |
  2  1

ç„¶ååQŒå†é‡å¤åšç¬¬ä¸€æ­¥ã€?br />˜q™æ—¶½W¬äºŒå±‚çš„9®äº½W¬ä¸‰å±‚çš„15åQŒäºæ˜¯å¯ä»¥äº’æ¢ï¼Œæœ?个字节å¢é•¿äº†ä¸€ä½ï¼Œ15个字节羃短了一ä½ï¼Œæ–‡äšg总长度刾~©çŸ­äº?ä½ã€‚ç„¶å釿–°è®¡½—相兌™Š‚点的倹{€?br />
           �br />            |
       +----------33---------+
       |        |
       15     +----18----+ 
            |    |
         +------9-----+   9
         |      |
         +--3--+   6
         |   |
         2  1

˜q™æ—¶å‘ç°æ‰€æœ‰çš„上层节点都大äºä¸‹å±‚节点,æ¯ä¸€å±‚上最®çš„ä¸¤ä¸ªèŠ‚ç‚¹è¢«åÆˆåœ¨äº†ä¸€èµøP¼Œä¹Ÿä¸å¯èƒ½å†äñ”生比åŒå±‚其他节点更å°çš„父节点了ã€?br />
˜q™æ—¶æ•´ä¸ªæ–‡äšg的长度是 3*6 + 1*15 + 4*2 + 2*9 + 4*1 = 63

˜q™æ—¶å¯ä»¥çœ‹å‡º¾~–ç å¼å‹¾~©çš„ä¸€ä¸ªåŸºæœ¬å‰æï¼š(x¨¬)å„èŠ‚ç‚¹ä¹‹é—´çš„å€ÆD¦ç›¸å·®æ¯”较æ‚(zh¨¨n)¬æ®ŠåQŒä»¥ä½¿æŸä¸¤ä¸ªèŠ‚ç‚¹çš„å’Œ®äºåŒå±‚或下层的å¦ä¸€ä¸ªèŠ‚ç‚¹ï¼Œ˜q™æ ·åQŒäº¤æ¢èŠ‚ç‚Ò(gu¨©)‰æœ‰åˆ©ç›Šã€?br />所以归根结底,åŸå§‹æ–‡äšg中的字节使用频ç‡å¿…须相差较大åQŒå¦åˆ™å°†æ²¡æœ‰ä¸¤ä¸ªèŠ‚ç‚¹çš„é¢‘ç‡ä¹‹å’Œå°äºåŒå±‚或下层其他节点的频ç‡ï¼Œä¹Ÿå°±æ— æ³•å‹ç¾ƒã€‚å之,相差得越æ‚(zh¨¨n)¬æ®ŠåQŒä¸¤ä¸ªèŠ‚ç‚¹çš„é¢‘ç‡ä¹‹å’Œæ¯”åŒå±‚或下层节点的频ç‡å°å¾—越多,交æ¢èŠ‚ç‚¹ä¹‹å的利益也­‘Šå¤§ã€?br />
在这个例å­ä¸­åQŒç»˜q‡ä¸Šé¢ä¸¤æ­¥ä¸æ–­é‡å¤ï¼Œå¾—åˆ°äº†æœ€ä¼˜çš„äºŒå‰æ ?w¨¨i),但ä¸èƒ½ä¿è¯åœ¨æ‰€æœ‰æƒ…况下åQŒéƒ½èƒ½é€šè¿‡˜q™ä¸¤æ­¥çš„é‡å¤å¾—åˆ°æœ€ä¼˜äºŒå‰æ ‘(w¨¨i)åQŒä¸‹é¢æ¥çœ‹å¦ä¸€ä¸ªä¾‹å­ï¼š(x¨¬)

                         æ ?br />                         ï½?br />              åQ‹ï¼åQï¼åQï¼åQï¼åQï¼åQ‘ï¼™åQï¼åQï¼åQï¼åQï¼åQ?br />              |                   ï½?br />      åQ‹ï¼åQï¼åQï¼åQ1åQ’ï¼åQï¼åQï¼åQ+            åQ?br />      |              ï½?br />  åQ‹ï¼åQï¼åQ•ï¼åQï¼åQ‹ã€€ã€€ã€€ã€€ã€€ã€€åQ‹ï¼åQï¼åQ—ï¼åQï¼åQ?br />  |       |      |       ï½?br />åQ‹ï¼åQ’ï¼åQ‹ã€€ã€€ã€€åQ‹ï¼åQ“ï¼åQ‹ã€€ã€€åQ‹ï¼åQ“ï¼åQ‹ã€€ã€€ã€€åQ‹ï¼åQ”ï¼åQ?br />|   |   |   |  |   |   |   ï½?br />åQ‘   åQ‘   åQ‘   åQ’  åQ‘   åQ’   åQ’   åQ?br />
˜q™ä¸ªä¾‹å­ä¸­ï¼Œæ‰€æœ‰ä¸Šå±‚节炚wƒ½å¤§äº½{‰äºä¸‹å±‚节点åQŒæ¯ä¸€å±‚最®çš„两个节点¾l“åˆåœ¨äº†ä¸€èµøP¼Œä½†ä»ç„¶å¯ä»¥è¿›ä¸€æ­¥ä¼˜åŒ–:(x¨¬)


                         æ ?br />                         ï½?br />              åQ‹ï¼åQï¼åQï¼åQï¼åQï¼åQ‘ï¼™åQï¼åQï¼åQï¼åQï¼åQ?br />              |                   ï½?br />      åQ‹ï¼åQï¼åQï¼åQ1åQ’ï¼åQï¼åQï¼åQ+            åQ?br />      |              ï½?br />  åQ‹ï¼åQï¼åQ”ï¼åQï¼åQ‹ã€€ã€€ã€€ã€€ã€€ã€€åQ‹ï¼åQï¼åQ˜ï¼åQï¼åQ?br />  |       |      |       ï½?br />åQ‹ï¼åQ’ï¼åQ‹ã€€ã€€ã€€åQ‹ï¼åQ’ï¼åQ‹ã€€ã€€åQ‹ï¼åQ”ï¼åQ‹ã€€ã€€ã€€åQ‹ï¼åQ”ï¼åQ?br />|   |   |   |  |   |   |   ï½?br />åQ‘   åQ‘   åQ‘   åQ‘  åQ’   åQ’   åQ’   åQ?br />
通过最ä½ä¸€å±‚çš„½W¬ï¼”½W¬ï¼•个节点对æ¢ï¼Œ½W¬ï¼“层的åQ˜å¤§äºç¬¬åQ’层的7ã€?br />到这里,我们得出˜q™æ ·ä¸€ä¸ªç»“论:(x¨¬)一‹‚‰|œ€ä¼˜äºŒå‰ç¼–ç æ ‘(w¨¨i)åQˆæ‰€æœ‰ä¸Šå±‚节炚wƒ½æ— æ³•和下层节点交æ¢ï¼‰åQŒå¿…™åȬ¦åˆè¿™æ ·ä¸¤ä¸ªæ¡ä»Ó¼š(x¨¬)
åQ‘ï¼æ‰€æœ‰ä¸Šå±‚节炚wƒ½å¤§äº½{‰äºä¸‹å±‚节点ã€?br />åQ’ï¼æŸèŠ‚ç‚¹ï¼Œè®‘Ö…¶è¾ƒå¤§çš„å­èŠ‚ç‚¹ä¸ºï½åQŒè¾ƒ?y¨­u)®çš„å­èŠ‚ç‚¹äØ?f¨´)ï½ï¼Œï½ä¸‹çš„ä“Q一层的所有节炚wƒ½åº”大äºç­‰äºï½ä¸‹çš„该层的所有节ç‚V€?br />
当符åˆè¿™ä¸¤ä¸ªæ¡äšgæ—Ó¼Œä»ÖM¸€å±‚都无法产生更å°çš„节点å»å’Œä¸‹å±‚节点交æ¢ï¼Œä¹Ÿæ— æ³•äñ”生更大的节点åÕd’Œä¸Šå±‚节点交æ¢ã€?br />
上é¢çš„ä¸¤ä¸ªä¾‹å­æ˜¯æ¯”较½€å•çš„åQŒå®é™…的文äšg中,一个字节有256¿Uå¯èƒ½çš„å–å€û|¼Œæ‰€ä»¥äºŒå‰æ ‘(w¨¨i)çš„å¶å­èŠ‚ç‚¹å¤šè¾?56个,需è¦ä¸æ–­çš„调整æ ?w¨¨i)åÅåQŒæœ€¾lˆçš„æ ?w¨¨i)åÅå¯èƒ½é叏夿‚åQŒæœ‰ä¸€¿Ué常精巧的½—法å¯ä»¥å¿«é€Ÿåœ°å»ø™“v一‹‚‰|œ€ä¼˜äºŒå‰æ ‘(w¨¨i)åQŒè¿™¿U算法由D.HuffmanåQˆæˆ´Â·éœå¤«æ›û|¼‰æå‡ºåQŒä¸‹é¢æˆ‘们先æ¥ä»‹¾léœå¤«æ›¼½—法的步骤,然å冿¥è¯æ˜é€šè¿‡˜q™ä¹ˆ½€å•的步骤得出的树(w¨¨i)å½¢ç¡®å®æ˜¯ä¸€‹‚‰|œ€ä¼˜äºŒå‰æ ‘(w¨¨i)ã€?br />
éœå¤«æ›¼ç®—法的步骤是这æ ïL(f¨¥ng)š„åQ?br />
·ä»å„个节点中扑ևºæœ€®çš„两个节点åQŒç»™å®ƒä»¬å»ŞZ¸€ä¸ªçˆ¶èŠ‚ç‚¹åQŒå€égØ“(f¨´)˜q™ä¸¤ä¸ªèŠ‚ç‚¹ä¹‹å’Œã€?br />·然åä»èŠ‚ç‚¹åºåˆ—中å»é™¤˜q™ä¸¤ä¸ªèŠ‚ç‚¹ï¼ŒåŠ å…¥å®ƒä»¬çš„çˆ¶èŠ‚ç‚¹åˆ°åºåˆ—中ã€?br />
é‡å¤ä¸Šé¢ä¸¤ä¸ªæ­¥éª¤åQŒç›´åˆ°èŠ‚ç‚¹åºåˆ—中åªå‰©ä¸‹å”¯ä¸€ä¸€ä¸ªèŠ‚ç‚V€‚这时一‹‚‰|œ€ä¼˜äºŒå‰æ ‘(w¨¨i)®±å·²¾l徿ˆäº†åQŒå®ƒçš„æ ¹®±æ˜¯å‰©ä¸‹çš„这个节ç‚V€?br />
ä»ä»¥ä¸Šé¢çš„例孿¥çœ‹éœå¤«æ›¼æ ?w¨¨i)的建立˜q‡ç¨‹ã€?br />最åˆçš„节点åºåˆ—是这æ ïL(f¨¥ng)š„åQ?br />a(6)  b(15)  c(2)  d(9)  e(1)

把最®çš„cå’Œe¾l“åˆèµäh¥
                   | (3)
a(6)   b(15)   d(9)   +------+------+
              |      |
              c     e

䏿–­é‡å¤åQŒæœ€¾lˆå¾—到的æ ?w¨¨i)是˜q™æ ·çš„:(x¨¬)

       �br />        |
   +-----33-----+
   |     |
   15   +----18----+   
       |       |
       9  +------9-----+
          |      |
         6     +--3--+
              |   |
              2  1

˜q™æ—¶å„个字符的编ç é•¿åº¦å’Œå‰é¢æˆ‘们说过的方法得到的¾~–ç é•¿åº¦æ˜¯ç›¸åŒçš„åQŒå› è€Œæ–‡ä»¶çš„æ€»é•¿åº¦ä¹Ÿæ˜¯ç›¸åŒçš„åQ?3*6 + 1*15 + 4*2 + 2*9 + 4*1 = 63

考察éœå¤«æ›¼æ ‘(w¨¨i)çš„å¾ç«‹è¿‡½E‹ä¸­çš„æ¯ä¸€æ­¥çš„èŠ‚ç‚¹åºåˆ—çš„å˜åŒ–:(x¨¬)

6  15 2 9 1
6  15 9 3
15 9  9
15 18
33

䏋颿ˆ‘ä»¬ç”¨é€†æ¨æ³•æ¥è¯æ˜å¯¹äºå„ç§ä¸åŒçš„节点åºåˆ—,用éœå¤«æ›¼½—法建立èµäh¥çš„æ ‘(w¨¨i)æ€ÀL˜¯ä¸€‹‚‰|œ€ä¼˜äºŒå‰æ ‘(w¨¨i)åQ?br />
寚wœå¤«æ›¼æ ?w¨¨i)的建立˜q‡ç¨‹˜qç”¨é€†æ¨æ³•:(x¨¬)
当这个过½E‹ä¸­çš„节点åºåˆ—åªæœ‰ä¸¤ä¸ªèŠ‚ç‚Ò(gu¨©)—¶åQˆæ¯”如å‰ä¾‹ä¸­çš?5å’?8åQ‰ï¼Œè‚¯å®šæ˜¯ä¸€‹‚‰|œ€ä¼˜äºŒå‰æ ‘(w¨¨i)åQŒä¸€ä¸ªç¼–ç äØ“(f¨´)0åQŒå¦ä¸€ä¸ªç¼–ç äØ“(f¨´)1åQŒæ— æ³•冘q›ä¸€æ­¥ä¼˜åŒ–ã€?br />ç„¶å往剿­¥˜q›ï¼ŒèŠ‚ç‚¹åºåˆ—䏭䏿–­åœ°å‡å°‘一个节点,å¢åŠ ä¸¤ä¸ªèŠ‚ç‚¹åQŒåœ¨æ­¥è¿›˜q‡ç¨‹ä¸­å°†å§‹ç»ˆä¿æŒæ˜¯ä¸€‹‚‰|œ€ä¼˜äºŒå‰æ ‘(w¨¨i)åQŒè¿™æ˜¯å› ä¸ºï¼š(x¨¬)
1.按照éœå¤«æ›¼æ ‘(w¨¨i)çš„å¾ç«‹è¿‡½E‹ï¼Œæ–°å¢çš„两个节ç‚Ò(gu¨©)˜¯å½“å‰èŠ‚ç‚¹åºåˆ—中最®çš„两个åQŒå…¶ä»–çš„ä»ÖM½•两个节点的父节点都大äºï¼ˆæˆ–ç­‰äºï¼‰˜q™ä¸¤ä¸ªèŠ‚ç‚¹çš„çˆ¶èŠ‚ç‚¹ï¼Œåªè¦å‰ä¸€æ­¥æ˜¯æœ€ä¼˜äºŒå‰æ ‘(w¨¨i)åQŒå…¶ä»–çš„ä»ÖM½•两个节点的父节点®×ƒ¸€å®šéƒ½å¤„在它们的父节点的上层或åŒå±‚åQŒæ‰€ä»¥è¿™ä¸¤ä¸ªèŠ‚ç‚¹ä¸€å®šå¤„åœ¨å½“å‰äºŒå‰æ ‘(w¨¨i)的最ä½ä¸€å±‚ã€?br />2.˜q™ä¸¤ä¸ªæ–°å¢çš„节点是最®çš„åQŒæ‰€ä»¥æ— æ³•和其他上层节点å¯Ò(gu¨©)¢ã€‚ç¬¦åˆæˆ‘们å‰é¢è¯´çš„æœ€ä¼˜äºŒå‰æ ‘(w¨¨i)的第一个æ¡ä»¶ã€?br />3.åªè¦å‰ä¸€æ­¥æ˜¯æœ€ä¼˜äºŒå‰æ ‘(w¨¨i)åQŒç”±äºè¿™ä¸¤ä¸ªæ–°å¢çš„节ç‚Ò(gu¨©)˜¯æœ€®çš„åQŒå³ä½¿åŒå±‚有其他节点åQŒä¹Ÿæ— æ³•å’ŒåŒå±‚其他节炚w‡æ–°ç»“åˆï¼Œäº§ç”Ÿæ¯”它们的父节ç‚Ò(gu¨©)›´®çš„上层节点æ¥å’ŒåŒå±‚的其他节点对æ¢ã€‚它们的父节点å°äºå…¶ä»–节点的父节点,它们åˆå°äºå…¶ä»–所有节点,åªè¦å‰ä¸€æ­¥ç¬¦åˆæœ€ä¼˜äºŒå‰æ ‘(w¨¨i)的第二个æ¡äšgåQŒåˆ°˜q™ä¸€æ­¥ä»®†ç¬¦åˆã€?br />
˜q™æ ·ä¸€æ­¥æ­¥é€†æ¨ä¸‹å»åQŒåœ¨˜q™ä¸ª˜q‡ç¨‹ä¸­éœå¤«æ›¼æ ?w¨¨i)æ¯ä¸€æ­¥éƒ½å§‹ç»ˆä¿æŒç€æ˜¯ä¸€‹‚‰|œ€ä¼˜äºŒå‰æ ‘(w¨¨i)ã€?br />
ç”׃ºæ¯ä¸€æ­¥éƒ½ä»èŠ‚ç‚¹åºåˆ—中删除两个节点åQŒæ–°å¢ä¸€ä¸ªèŠ‚ç‚¹ï¼Œéœå¤«æ›¼æ ‘(w¨¨i)çš„å¾ç«‹è¿‡½E‹å…±éœ€ (åŸå§‹èŠ‚ç‚¹æ•?- 1) 步,所以éœå¤«æ›¼½—法ä¸å¤±ä¸ŞZ¸€¿U精巧的¾~–ç å¼å‹¾~©ç®—法ã€?br />

附:(x¨¬)å¯¹äº huffman æ ?w¨¨i),《计½—机½E‹åºè®¾è®¡è‰ºæœ¯ã€‹ä¸­æœ‰å®Œå…¨ä¸åŒçš„è¯æ˜åQŒå¤§æ„是˜q™æ ·çš„:(x¨¬)
åQ‘ï¼äºŒå‰¾~–ç æ ?w¨¨i)的内部节点åQˆéå¶å­èŠ‚ç‚¹åQ‰æ•°½{‰äºå¤–部节点åQˆå¶å­èŠ‚ç‚¹ï¼‰æ•°å‡åQ‘ã€?br />åQ’ï¼äºŒå‰¾~–ç æ ?w¨¨i)的外部节点的加æƒèµ\径长度(å€ég¹˜ä»¥èµ\径长度)之和åQŒç­‰äºæ‰€æœ‰å†…部节点å€ég¹‹å’Œã€‚(˜q™ä¸¤æ¡éƒ½å¯ä»¥é€šè¿‡å¯¹èŠ‚ç‚Ò(gu¨©)•°˜q用数学归纳法æ¥è¯æ˜åQŒç•™¾l™å¤§å®¶åš¾lƒä¹ (f¨¤n)。)
åQ“ï¼å¯?huffman æ ?w¨¨i)的建立˜q‡ç¨‹˜q用逆æ¨åQŒå½“åªæœ‰ä¸€ä¸ªå†…部节ç‚Ò(gu¨©)—¶åQŒè‚¯å®šæ˜¯ä¸€‹‚‰|œ€ä¼˜äºŒå‰æ ‘(w¨¨i)ã€?br />åQ”ï¼å¾€å‰æ­¥˜q›ï¼Œæ–°å¢ä¸¤ä¸ªæœ€®çš„外部节点åQŒå®ƒä»¬ç»“åˆåœ¨ä¸€èµ·äñ”生一个新的内部节点,当且仅当åŸå…ˆçš„内部节炚w›†åˆæ˜¯æå°åŒ–çš„åQŒåŠ å…¥è¿™ä¸ªæ–°çš„å†…éƒ¨èŠ‚ç‚¹å仿˜¯æå°åŒ–çš„ã€‚ï¼ˆå› äØ“(f¨´)最®çš„两个节点¾l“åˆåœ¨ä¸€èµøP¼Œòq¶å¤„äºæœ€ä½å±‚åQŒç›¸å¯¹äºå®ƒä»¬åˆ†åˆ«å’Œå…¶ä»–åŒå±‚或上层节点¾l“åˆåœ¨ä¸€èµøP¼Œè‡›_°‘ä¸ä¼š(x¨¬)å¢åŠ åŠ æƒè·¯å¾„长度。)
åQ•ï¼éšç€å†…部节点数é€ä¸ªå¢åŠ åQŒå†…部节炚w›†åˆæ€È»´æŒæ®åŒ–ã€?br />
[ 本帖ç”?ncs 最åç¼–è¾‘äº 2006-3-3 14:54 ]

æœçƒ¦æ›´å¤šç›¸å…³ä¸»é¢˜çš„帖å­? zip åŸç†  

å‘表äº?2006-3-3 14:49  资料短消æ?/a> 
åQ’ï¼å®ç°éƒ¨åˆ†
  如æœä¸–ç•Œä¸Šä»æ²¡æœ‰ä¸€ä¸ªå‹¾~©ç¨‹åºï¼Œæˆ‘们看了å‰é¢çš„勾~©åŸç†ï¼Œ®†æœ‰ä¿¡å¿ƒä¸€å®šèƒ½ä½œå‡ºä¸€ä¸ªå¯ä»¥å‹¾~©å¤§å¤šæ•°æ ¼å¼ã€å†…容的数æ®çš„程åºï¼Œå½“æˆ‘ä»¬ç€æ‰‹è¦åšè¿™æ ·ä¸€ä¸ªç¨‹åºçš„æ—¶å€™ï¼Œä¼?x¨¬)å‘ç°æœ‰å¾ˆå¤šçš„éš¾é¢˜éœ€è¦æˆ‘们å»ä¸€ä¸ªä¸ªè§£å†³åQŒä¸‹é¢å°†é€ä¸ªæè¿°˜q™äº›éšùN¢˜åQŒåƈ详细分æ zip ½—法是如何解册™¿™äº›éš¾é¢˜çš„åQŒå…¶ä¸­å¾ˆå¤šé—®é¢˜å¸¦æœ‰æ™®éæ„义,比如查找匚w…åQŒæ¯”如数¾l„æ’åºç­‰½{‰ï¼Œ˜q™äº›éƒ½æ˜¯è¯´ä¸®½çš„è¯é¢˜åQŒè®©æˆ‘们深入其中åQŒåšä¸€ç•ªæ€è€ƒã€?br />
我们å‰é¢è¯´è¿‡åQŒå¯¹äºçŸ­è¯­å¼é‡å¤åQŒæˆ‘们用“é‡å¤è·å½“å‰ä½ç½®çš„è·¼› Z€å’Œâ€œé‡å¤çš„长度â€è¿™ä¸¤ä¸ªæ•°å­—æ¥è¡¨½Cø™¿™ä¸€ŒDµé‡å¤ï¼Œä»¥å®ç°å‹¾~©ï¼Œç°åœ¨é—®é¢˜æ¥äº†åQŒä¸€ä¸ªå­—节能表示的数字大®äØ“(f¨´) 0 åQ?55åQŒç„¶è€Œé‡å¤å‡ºç°çš„ä½ç½®å’Œé‡å¤çš„长度都å¯èƒ½è¶…˜q?255åQŒäº‹å®ä¸ŠåQŒäºŒ˜q›åˆ¶æ•°çš„使•°¼‹®å®šä¸‹æ¥å,所能表½Cºçš„æ•°å­—大å°çš„范围是有é™çš„,ï½ä½çš„二˜q›åˆ¶æ•°èƒ½è¡¨ç¤ºçš„æœ€å¤§å€¼æ˜¯åQ’çš„ï½æ¬¡æ–¹å‡åQ‘,如æœä½æ•°å–得太大åQŒå¯¹äºå¤§é‡çš„短匹é…,å¯èƒ½ä¸ä½†èµ·ä¸åˆ°å‹¾~©ä½œç”¨ï¼Œå而å¢å¤§äº†æœ€¾lˆçš„¾l“æœã€‚针对这¿U情况,有两¿Uä¸åŒçš„½—æ³•æ¥è§£å†Œ™¿™ä¸ªé—®é¢˜ï¼Œå®ƒä»¬æ˜¯ä¸¤¿Uä¸åŒçš„æ€èµ\。一¿Uç§°ä¸?lz77 ½—法åQŒè¿™æ˜¯ä¸€¿U很自然的æ€èµ\åQšé™åˆ¶è¿™ä¸¤ä¸ªæ•°å­—的大®ï¼Œä»¥å–得折è¡ïL(f¨¥ng)š„å‹ç¾ƒæ•ˆæœã€‚例如跼›Õd– 15 ä½ï¼Œé•¿åº¦å?8 ä½ï¼Œ˜q™æ ·åQŒè·¼›Èš„æœ€å¤§å–å€égØ“(f¨´) 32 k - 1åQŒé•¿åº¦çš„æœ€å¤§å–å€égØ“(f¨´) 255åQŒè¿™ä¸¤ä¸ªæ•°å­—å?23 ä½ï¼Œæ¯”三个字节少一ä½ï¼Œæ˜¯ç¬¦åˆå‹¾~©çš„è¦æ±‚的。让我们在头脑中惌™±¡ä¸€ä¸?lz77 ½—法å‹ç¾ƒ˜q›è¡Œæ—¶çš„æƒ…况åQŒä¼š(x¨¬)å‡ºç°æœ‰æ„æ€çš„æ¨¡å‹åQ?br />
   最˜qœåŒ¹é…ä½¾|®ï¼åQ          当å‰å¤„ç†ä½ç½®åQï¼
───┸─────────────────╂─────────────åQ勾~©è¿›è¡Œæ–¹å?br />   已勾~©éƒ¨åˆ†ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€â”ƒã€€ã€€ã€€ã€€æœªå‹¾~©éƒ¨åˆ?br />
  在最˜qœåŒ¹é…ä½¾|®å’Œå½“å‰å¤„ç†ä½ç½®ä¹‹é—´æ˜¯å¯ä»¥ç”¨æ¥æŸ¥æ‰‘ÖŒ¹é…的“字典â€åŒºåŸŸï¼Œéšç€å‹ç¾ƒçš„进行,“字典â€åŒºåŸŸä»å¾…勾~©æ–‡ä»¶çš„å¤´éƒ¨ä¸æ–­åœ°å‘åæ»‘动,直到辑ֈ°æ–‡äšg的尾部,短语å¼å‹¾~©ä¹Ÿ®Şq»“æŸäº†ã€?br />  解勾~©ä¹Ÿé常½€å•:(x¨¬)

         â”────────拯‚´â”€â”€â”€â”€â”€â”€â”€â”€â”?br /> 匚w…ä½ç½®ã€€ã€€ã€€ã€€â”ƒã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€å½“å‰å¤„ç†ä½ç½®ã€€ã€€â”?br />   ┃<──匚w…长度──åQ┃       ┠─────∨────â”?br />───┸──────────┸───────╂──────────┸─åQè§£å‹è¿›è¡Œæ–¹å?br />   已解å‹éƒ¨åˆ†ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€â”ƒã€€ã€€ã€€ã€€æœªè§£å‹éƒ¨åˆ?br />
ã€€ã€€ä¸æ–­åœîC»å‹ç¾ƒæ–‡äšg中读出匹é…ä½¾|®å€¼å’ŒåŒšw…长度å€û|¼ŒæŠŠå·²è§£å‹éƒ¨åˆ†çš„匹é…内å®Ò(gu¨©)‹·è´åˆ°è§£å‹æ–‡äšg®ùNƒ¨åQŒé‡åˆ°å‹¾~©æ–‡ä»¶ä¸­é‚£äº›å‹ç¾ƒæ—¶æœªèƒ½å¾—到匹é…,而是直æ¥ä¿å­˜çš„å•ã€åŒå­—节åQŒè§£å‹æ—¶åªè¦ç›´æ¥æ‹¯‚´åˆ°æ–‡ä»¶å°¾éƒ¨å³å¯ï¼Œç›´åˆ°æ•´ä¸ªå‹ç¾ƒæ–‡äšg处ç†å®Œæ¯•ã€?br />  lz77½—法模å‹ä¹Ÿè¢«¿UîCØ“(f¨´)â€œæ»‘åŠ¨å­—å…¸â€æ¨¡å‹æˆ–“滑动窗å£â€æ¨¡å‹ã€?br />ã€€ã€€å¦æœ‰ä¸€¿Ulzw½—法对待å‹ç¾ƒæ–‡äšg中存在大é‡ç®€å•匹é…的情况˜q›è¡Œäº†å®Œå…¨ä¸åŒçš„½—æ³•è®¾è®¡åQŒå®ƒåªç”¨ä¸€ä¸ªæ•°å­—æ¥è¡¨ç¤ºä¸€ŒD늟­è¯­ï¼Œä¸‹é¢æ¥æ˜qîC¸€ä¸‹lzw的勾~©è§£å‹è¿‡½E‹ï¼Œç„¶åæ¥ç»¼åˆæ¯”较两者的适用情况ã€?br />  lzw的勾~©è¿‡½E‹ï¼š(x¨¬)
1) åˆå§‹åŒ–一个指定大®çš„å­—å…¸åQŒæŠŠ 256 ¿U字节å–值加入字典ã€?br />2) 在待å‹ç¾ƒæ–‡äšg的当å‰å¤„ç†ä½¾|®å¯»æ‰‘Öœ¨å­—典中出ç°çš„æœ€é•¿åŒ¹é…,输出该匹é…在字典中的åºå·ã€?br />3) 如æœå­—典没有辑ֈ°æœ€å¤§å®¹é‡ï¼ŒæŠŠè¯¥åŒšw…加上它在待勾~©æ–‡ä»¶ä¸­çš„下一个字节加入字典ã€?br />4) 把当å‰å¤„ç†ä½¾|®ç§»åˆ°è¯¥åŒšw…åã€?br />5) é‡å¤ 2ã€?ã€? 直到文äšg输出完毕ã€?br />
  lzw 的解å‹è¿‡½E‹ï¼š(x¨¬)
1) åˆå§‹åŒ–一个指定大®çš„å­—å…¸åQŒæŠŠ 256 ¿U字节å–值加入字典ã€?br />2) ä»å‹¾~©æ–‡ä»¶ä¸­™åºåºè¯Õd‡ºä¸€ä¸ªå­—å…¸åºåøP¼Œæ Ò(gu¨©)®è¯¥åºåøP¼ŒæŠŠå­—å…æ€¸­ç›¸åº”çš„æ•°æ®æ‹·è´åˆ°è§£å‹æ–‡äšg®ùNƒ¨ã€?br />3) 如æœå­—典没有辑ֈ°æœ€å¤§å®¹é‡ï¼ŒæŠŠå‰ä¸€ä¸ªåŒ¹é…内容加上当å‰åŒ¹é…çš„½W¬ä¸€ä¸ªå­—节加入字典ã€?br />4) é‡å¤ 2ã€? 两步直到å‹ç¾ƒæ–‡äšg处ç†å®Œæ¯•ã€?br />
  ä»?lzw 的勾~©è¿‡½E‹ï¼Œæˆ‘们å¯ä»¥å½’纳出它ä¸åŒäº?lz77 ½—法的一些主è¦ç‰¹ç‚¹ï¼š(x¨¬)
1) 对äºä¸€ŒD늟­è¯­ï¼Œå®ƒåªè¾“出一个数字,å›_­—å…æ€¸­çš„åºå—÷€‚(˜q™ä¸ªæ•°å­—çš„ä½æ•°å†³å®šäº†å­—典的最大容é‡ï¼Œå½“å®ƒçš„ä½æ•°å–得太大时åQŒæ¯”å¦?24 ä½ä»¥ä¸Šï¼Œå¯¹äºçŸ­åŒ¹é…å å¤šæ•°çš„æƒ…况,å‹ç¾ƒç‡å¯èƒ½å¾ˆä½ã€‚å–得太®æ—¶åQŒæ¯”å¦?8 ä½ï¼Œå­—典的容é‡å—到é™åˆ¶ã€‚æ‰€ä»¥åŒæ ·éœ€è¦å–èˆã€‚)
2) 对äºä¸€ä¸ªçŸ­è¯­ï¼Œæ¯”如 abcd åQŒå½“它在待勾~©æ–‡ä»¶ä¸­½W¬ä¸€‹Æ¡å‡ºç°æ—¶åQŒab 被加入字典,½W¬äºŒ‹Æ¡å‡ºç°æ—¶åQŒabc 被加入字典,½W¬ä¸‰‹Æ¡å‡ºç°æ—¶åQŒabcd æ‰ä¼š(x¨¬)被加入字典,对äºä¸€äº›é•¿åŒšw…åQŒå®ƒå¿…须高频ç‡åœ°å‡ºç°åQŒåƈ且字典有较大的容é‡ï¼Œæ‰ä¼š(x¨¬)被最¾lˆå®Œæ•´åœ°åŠ å…¥å­—å…¸ã€‚ç›¸åº”åœ°åQŒlz77 åªè¦åŒšw…在“字典区域â€ä¸­å­˜åœ¨åQŒé©¬ä¸Šå°±å¯ä»¥ç›´æ¥ä½¿ç”¨ã€?br />3) è®?lzw 的“字典åºå·â€å– n ä½ï¼Œå®ƒçš„æœ€å¤§é•¿åº¦å¯ä»¥è¾¾åˆ?2 çš?n ‹Æ¡æ–¹åQ›è®¾ lz77 的“匹é…长度â€å– n ä½ï¼Œâ€œåŒ¹é…è·¼› Z€å– d ä½ï¼Œå®ƒçš„æœ€å¤§é•¿åº¦ä¹Ÿæ˜?2 çš?n ‹Æ¡æ–¹åQŒä½†˜q˜è¦å¤šè¾“å‡?d ä½ï¼ˆd 臛_°‘ä¸å°äº?nåQ‰ï¼Œä»ç†è®ŞZ¸Šè¯?lzw æ¯è¾“å‡ŞZ¸€ä¸ªåŒ¹é…åªè¦?n ä½ï¼Œä¸ç®¡æ˜¯é•¿åŒšw…˜q˜æ˜¯çŸ­åŒ¹é…,å‹ç¾ƒç‡è¦æ¯?lz77 高至®‘一å€ï¼Œä½†å®é™…上åQŒlzw çš„å­—å…æ€¸­çš„匹é…长度的å¢é•¿ç”׃ºå„匹é…互相打断,很难辑ֈ°æœ€å¤§å€¹{€‚而且虽然 lz77 æ¯ä¸€ä¸ªåŒ¹é…都è¦å¤šè¾“出 d ä½ï¼Œä½?lzw æ¯ä¸€ä¸ªåŒ¹é…都è¦ä»å•字节开始å¢é•¿è“våQŒå¯¹äºç§¾cȹ多的匚w…åQŒlzw å±…äºåŠ£åŠ¿ã€?br />  å¯ä»¥çœ‹å‡ºåQŒåœ¨å¤šæ•°æƒ…况下,lz77 拥有更高的勾~©ç‡åQŒè€Œåœ¨å¾…勾~©æ–‡ä»¶ä¸­å ç»å¤§å¤šæ•°çš„æ˜¯äº›½€å•的匚w…æ—Ó¼Œlzw 更具优势åQŒGIF ®±æ˜¯é‡‡ç”¨äº?lzw ½—法æ¥å‹¾~©èƒŒæ™¯å•一ã€å›¾å½¢ç®€å•的囄¡‰‡ã€‚zip 是用æ¥å‹¾~©é€šç”¨æ–‡äšg的,˜q™å°±æ˜¯å®ƒé‡‡ç”¨å¯¹å¤§å¤šæ•°æ–‡äšg有更高勾~©ç‡çš?lz77 ½—法的åŸå› ã€?br />
  æ¥ä¸‹æ?zip ½—法®†è¦è§£å†³åœ¨â€œå­—典区域â€ä¸­å¦‚何高速查找最长匹é…的问题ã€?br />
åQˆæ³¨åQšä»¥ä¸‹å…³äºæŠ€æœ¯ç»†èŠ‚çš„æè¿°æ˜¯ä»¥ gzip 的公开æºä»£ç äØ“(f¨´)基础的,如æœéœ€è¦å®Œæ•´çš„代ç åQŒå¯ä»¥åœ¨ gzip 的官方网ç«?www.gzip.org 下è²ã€‚ä¸‹é¢æåˆ°çš„æ¯ä¸€ä¸ªé—®é¢˜ï¼Œéƒ½é¦–先介¾l最直观½€å•的解决æ–Ò(gu¨©)³•åQŒç„¶åæŒ‡å‡ø™¿™¿U方法的弊端所在,最å介¾l?gzip é‡‡ç”¨çš„åšæ³•,˜q™æ ·ä¹Ÿè®¸èƒ½ä‹É读者对 gzip çœ‹ä¼¼å¤æ‚ã€ä¸ç›´è§‚çš„åšæ³•çš„æ„义有更好的ç†è§£ã€‚)
最直观的æœç´¢æ–¹å¼æ˜¯™åºåºæœçƒ¦åQšä»¥å¾…勾~©éƒ¨åˆ†çš„½W¬ä¸€ä¸ªå­—节丽H—å£ä¸­çš„æ¯ä¸€ä¸ªå­—èŠ‚ä¾‹Æ¡æ¯”è¾ƒï¼Œå½“æ‰¾åˆîC¸€ä¸ªç›¸½{‰çš„字节æ—Ó¼Œå†æ¯”较å¾l­çš„字节…â€?éå†äº†çª—å£å得出最长匹é…。gzip 用的是被¿UîC½œâ€œå“ˆå¸Œè¡¨â€çš„æ–Ò(gu¨©)³•æ¥å®ç°è¾ƒé«˜æ•ˆçš„æœç´¢ã€‚â€œå“ˆå¸Œï¼ˆhashåQ‰â€æ˜¯åˆ†æ•£çš„æ„æ€ï¼ŒæŠŠå¾…æœçƒ¦çš„æ•°æ®æŒ‰ç…§å­—节值分散到一个个“桶â€ä¸­åQŒæœç´¢æ—¶å†æ ¹æ®å­—节值到相应的“桶â€ä¸­åÕd¯»æ‰¾ã€‚短语å¼å‹ç¾ƒçš„æœ€çŸ­åŒ¹é…䨓(f¨´) 3 个字节,gzip ä»?3 个字节的å€ég½œä¸ºå“ˆå¸Œè¡¨çš„烦引,ä½?3 个字节共æœ?2 çš?24 ‹Æ¡æ–¹¿Uå–å€û|¼Œéœ€è¦?16M 个桶åQŒæ¡¶é‡Œå­˜æ”„¡š„是窗å£ä¸­çš„ä½¾|®å€û|¼Œ½H—å£çš„大®äØ“(f¨´) 32KåQŒæ‰€ä»¥æ¯ä¸ªæ¡¶è‡›_°‘è¦æœ‰å¤§äºä¸¤ä¸ªå­—节的空é—ß_(d¨¢)¼Œå“ˆå¸Œè¡¨å°†å¤§äº 32MåQŒä½œä¸?90 òq´ä»£å¼€å‘çš„½E‹åºåQŒè¿™ä¸ªè¦æ±‚是太大了,而且éšç€½H—å£çš„移动,哈希表里的数æ®ä¼š(x¨¬)䏿–­˜q‡æ—¶åQŒç»´æŠ¤è¿™ä¹ˆå¤§çš„表åQŒä¼š(x¨¬)é™ä½½E‹åºçš„æ•ˆç‡ï¼Œgzip å®šä¹‰å“ˆå¸Œè¡¨äØ“(f¨´) 2 çš?15 ‹Æ¡æ–¹åQ?2KåQ‰ä¸ªæ¡Ó¼Œòq¶è®¾è®¡äº†ä¸€ä¸ªå“ˆå¸Œå‡½æ•°æŠŠ 16M ¿Uå–值对应到 32K 个桶中,ä¸åŒçš„倯D¢«å¯¹åº”到相åŒçš„æ¡¶ä¸­æ˜¯ä¸å¯é¿å…çš„åQŒå“ˆå¸Œå‡½æ•°çš„ä»ÕdŠ¡æ˜?1.使儿Uå–值尽å¯èƒ½å‡åŒ€åœ°åˆ†å¸ƒåˆ°å„个桶中åQŒé¿å…许多ä¸åŒçš„值集中到æŸäº›æ¡¶ä¸­åQŒè€Œå¦ä¸€äº›æ˜¯½Iºæ¡¶åQŒä‹Éæœçƒ¦çš„æ•ˆç‡é™ä½ã€?.函数的计½—å°½å¯èƒ½åœ°ç®€å•ï¼Œå› äØ“(f¨´)æ¯æ¬¡â€œæ’å…¥â€å’Œâ€œæœå¯ Z€å“ˆå¸Œè¡¨éƒ½è¦æ‰§è¡Œå“ˆå¸Œå‡½æ•°åQŒå“ˆå¸Œå‡½æ•°çš„夿‚度直æ¥åª„å“程åºçš„æ‰§è¡Œæ•ˆç‡åQŒå®¹æ˜“æƒ³åˆ°çš„å“ˆå¸Œå‡½æ•°æ˜¯å– 3 个字节的左边åQˆæˆ–匙¾¹åQ?5 ä½äºŒ˜q›åˆ¶å€û|¼Œä½†è¿™æ ·åªè¦å·¦è¾¹ï¼ˆæˆ–å³è¾¹ï¼‰2 个字节相åŒï¼Œ®×ƒ¼š(x¨¬)被放到åŒä¸€ä¸ªæ¡¶ä¸­ï¼Œè€?2 个字节相åŒçš„æ¦‚ç‡æ˜¯æ¯”较高的,ä¸ç¬¦åˆâ€œåã^å‡åˆ†å¸ƒâ€çš„è¦æ±‚。gzip 采用的算法是åQšA(4,5) + A(6,7,8) ^ B(1,2,3) + B(4,5) + B(6,7,8) ^ C(1,2,3) + C(4,5,6,7,8) åQˆè¯´æ˜ï¼š(x¨¬)A æŒ?3 个字节中的第 1 个字节,B 指第 2 个字节,C 指第 3 个字节,A(4,5) 指第一个字节的½W?4,5 ä½äºŒ˜q›åˆ¶ç ï¼Œâ€œ^â€æ˜¯äºŒè¿›åˆ¶ä½çš„异或æ“作,â€?â€æ˜¯â€œè¿æ¥â€è€Œä¸æ˜¯â€œåŠ â€ï¼Œâ€œ^â€ä¼˜å…ˆäºâ€?â€ï¼‰˜q™æ ·ä½?3 个字节都®½é‡â€œå‚ä¸â€åˆ°æœ€åçš„¾l“æœä¸­æ¥åQŒè€Œä¸”æ¯ä¸ª¾l“æœå€?h 都等äº?((å‰?个h << 5) ^ c)å–å³ 15 ä½ï¼Œè®¡ç®—也还½€å•ã€?
哈希表的具体å®ç°ä¹Ÿå€¼å¾—æ¢è®¨,因䨓(f¨´)æ— æ³•é¢„å…ˆçŸ¥é“æ¯ä¸€ä¸ªâ€œæ¡¶â€ä¼š(x¨¬)存放多少个元素,所以最½€å•çš„åQŒä¼š(x¨¬)惛_ˆ°ç”¨é“¾è¡¨æ¥å®ç°åQšå“ˆå¸Œè¡¨é‡Œå­˜æ”„¡€æ¯ä¸ªæ¡¶çš„½W¬ä¸€ä¸ªå…ƒç´ ï¼Œæ¯ä¸ªå…ƒç´ é™¤äº†å­˜æ”¾ç€è‡ªèínçš„å€û|¼Œ˜q˜å­˜æ”„¡€ä¸€ä¸ªæŒ‡é’ˆï¼ŒæŒ‡å‘åŒä¸€ä¸ªæ¡¶ä¸­çš„下一个元素,å¯ä»¥™åºç€æŒ‡é’ˆé“¾æ¥éå†è¯¥æ¡¶ä¸­çš„æ¯ä¸€ä¸ªå…ƒç´ ï¼Œæ’入元素æ—Ó¼Œå…ˆç”¨å“ˆå¸Œå‡½æ•°½—出该放到第几个桶中åQŒå†æŠŠå®ƒæŒ‚到相应链表的最å。这个方案的¾~ºç‚¹æ˜¯é¢‘¾J地甌™¯·å’Œé‡Šæ”‘Ö†…存会(x¨¬)é™ä½˜q行速度åQ›å†…å­˜æŒ‡é’ˆçš„å­˜æ”¾å æ®äº†é¢å¤–的内存开销。有更少内存开销和更快速的æ–Ò(gu¨©)³•æ¥å®ç°å“ˆå¸Œè¡¨åQŒåƈ且ä¸éœ€è¦é¢‘¾J的内存甌™¯·å’Œé‡Šæ”¾ï¼š(x¨¬)gzip 在内存中甌™¯·äº†ä¸¤ä¸ªæ•°¾l„ï¼Œä¸€ä¸ªå« head[]åQŒä¸€ä¸ªå« pre[]åQŒå¤§®éƒ½ä¸?32KåQŒæ ¹æ®å½“å‰ä½¾|?strstart 开始的 3 个字节,用哈希函数计½—出åœ?head[] 中的ä½ç½® ins_håQŒç„¶å把 head[ins_h] ä¸­çš„å€ÆD®°å…?pre[strstart]åQŒå†æŠŠå½“å‰ä½¾|?strstart è®°å…¥ head[ins_h]。éšç€å‹ç¾ƒçš„进行,head[]é‡Œè®°è½½ç€æœ€˜q‘çš„å¯èƒ½çš„匹é…çš„ä½ç½®åQˆå¦‚æœæœ‰åŒšw…çš„è¯åQŒhead[ins_h]ä¸äØ“(f¨´) 0åQ‰ï¼Œpre[]中的所有佾|®ä¸åŸå§‹æ•°æ®çš„ä½¾|®ç›¸å¯¹åº”åQŒä½†æ¯ä¸€ä¸ªä½¾|®ä¿å­˜çš„值是å‰ä¸€ä¸ªæœ€˜q‘çš„å¯èƒ½çš„匹é…çš„ä½ç½®ã€‚(“å¯èƒ½çš„匚w…â€æ˜¯æŒ‡å“ˆå¸Œå‡½æ•°è®¡½—出çš?ins_h 相åŒã€‚)™åºç€ pre[] 中的指示找下å»ï¼Œç›´åˆ°é‡åˆ° 0åQŒå¯ä»¥å¾—到所有匹é…在åŸå§‹æ•°æ®ä¸­çš„ä½ç½®åQ? 表示ä¸å†æœ‰æ›´˜qœçš„匚w…ã€?br />  æ¥ä¸‹æ¥å¾ˆè‡ªç„¶åœ°è¦è§‚察 gzip 具体是如何判断哈希表中数æ®çš„˜q‡æ—¶åQŒå¦‚何清ç†å“ˆå¸Œè¡¨çš„ï¼Œå› äØ“(f¨´) pre[] 里åªèƒ½å­˜æ”?32K 个元素,所以这™å¹å·¥ä½œæ˜¯å¿…é¡»è¦åšçš„ã€?br />  gzip ä»åŸå§‹æ–‡ä»¶ä¸­è¯Õd‡ºä¸¤ä¸ª½H—å£å¤§å°çš„内容(å…?64K 字节åQ‰åˆ°ä¸€å—内存中åQŒè¿™å—内存也是一个数¾l„,¿UîC½œ Window[]åQ›ç”³è¯?head[]ã€pre[] òq¶æ¸…é›Ó¼›strstart ¾|®äØ“(f¨´) 0。然å?gzip è¾Ò(gu¨©)œç´¢è¾¹æ’å…¥åQŒæœç´¢æ—¶é€šè¿‡è®¡ç®— ins_håQŒæ£€æŸ?head[] ä¸­æ˜¯å¦æœ‰åŒšw…åQŒå¦‚æœæœ‰åŒšw…åQŒåˆ¤æ–?strstart å‡?head[] 中的ä½ç½®æ˜¯å¦å¤§äº 1 个窗å£çš„大å°åQŒå¦‚æœå¤§äº?1 个窗å£çš„大å°åQŒå°±ä¸åˆ° pre[] 䏭廿œçƒ¦äº†ï¼Œå› äØ“(f¨´) pre[] 中ä¿å­˜çš„ä½ç½®æ›´è¿œäº†ï¼Œå¦‚æœä¸å¤§äºï¼Œ®±é¡ºç€ pre[] 的指½Cºåˆ° Window[] 中é€ä¸ªåŒšw…ä½ç½®å¼€å§‹ï¼Œé€ä¸ªå­—节ä¸å½“å‰ä½¾|®çš„æ•°æ®æ¯”较åQŒä»¥æ‰‘Ö‡ºæœ€é•¿åŒ¹é…,pre[] 中的ä½ç½®ä¹Ÿè¦åˆ¤æ–­æ˜¯å¦­‘…出一个窗å£ï¼Œå¦‚é‡åˆ°è¶…å‡ŞZ¸€ä¸ªçª—å£çš„ä½ç½®æˆ–è€?0 ®×ƒ¸å†æ‰¾ä¸‹å»åQŒæ‰¾ä¸åˆ°åŒšw…®Şp¾“出当å‰ä½¾|®çš„å•个字节到å¦å¤–的内存åQˆè¾“å‡ºæ–¹æ³•åœ¨åæ–‡ä¸­ä¼š(x¨¬)介ç»åQ‰ï¼Œòq¶æŠŠ strstart æ’入哈希表,strstart 递å¢åQŒå¦‚æœæ‰¾åˆîCº†åŒšw…åQŒå°±è¾“出匚w…ä½ç½®å’ŒåŒ¹é…长度这两个数字到å¦å¤–的内存中,òq¶æŠŠ strstart 开始的åQŒç›´åˆ?strstart + 匚w…长度 为止的所有佾|®éƒ½æ’入哈希表,strstart += 匚w…长度。æ’å…¥å“ˆå¸Œè¡¨çš„æ–¹æ³•äØ“(f¨´)åQ?br />pre[strstart % 32K] = head[ins_h];
head[ins_h] = strstart;
å¯ä»¥çœ‹å‡ºåQŒpre[] 是åó@ç¯åˆ©ç”¨çš„åQŒæ‰€æœ‰çš„ä½ç½®éƒ½åœ¨ä¸€ä¸ªçª—å£ä»¥å†…,但æ¯ä¸€ä¸ªä½¾|®ä¿å­˜çš„å€ég¸ä¸€å®šæ˜¯ä¸€ä¸ªçª—å£ä»¥å†…的。在æœçƒ¦æ—Ó¼Œhead[] å’?pre[] 中的ä½ç½®å€¼å¯¹åº”到 pre[] 时也è¦?% 32K。当 Window[] 中的åŸå§‹æ•°æ®®†è¦å¤„ç†å®Œæ¯•æ—Ó¼Œè¦æŠŠ Window[] 中å一½H—的数æ®å¤åˆ¶åˆ°å‰ä¸€½H—,å†è¯»å?32K 字节的数æ®åˆ°å一½H—,strstart -= 32KåQŒéå?head[]åQŒå€¼å°äºç­‰äº?32K 的,¾|®äØ“(f¨´) 0åQŒå¤§äº?32K 的,-= 32KåQ›pre[] å?head[] 一样处ç†ã€‚ç„¶ååŒå‰é¢ä¸€æ ·å¤„ç†æ–°ä¸€½H—的数æ®ã€?br />  分æåQšç°åœ¨å¯ä»¥çœ‹åˆÍ¼Œè™½ç„¶ 3 个字节有 16M ¿Uå–å€û|¼Œä½†å®é™…上一个窗å£åªæœ?32K 个å–å€¼éœ€è¦æ’入哈希表åQŒç”±äºçŸ­è¯­å¼é‡å¤çš„存在,å®é™…åªæœ‰ < 32K ¿Uå–值æ’入哈希表çš?32K 个“桶â€ä¸­åQŒè€Œä¸”哈希函数åˆç¬¦åˆâ€œåã^å‡åˆ†å¸ƒâ€çš„è¦æ±‚åQŒæ‰€ä»¥å“ˆå¸Œè¡¨ä¸­å®é™…存在的“冲½Hâ€ä¸€èˆ¬ä¸ä¼?x¨¬)多åQŒå¯¹æœçƒ¦æ•ˆç‡çš„媄å“ä¸å¤§ã€‚å¯ä»¥é¢„计,在“一般情况â€ä¸‹åQŒæ¯ä¸ªâ€œæ¡¶â€ä¸­å­˜æ”¾çš„æ•°æ®ï¼Œæ­£æ˜¯æˆ‘ä»¬è¦æ‰¾çš„。哈希表在儿Uæœç´¢ç®—法中åQŒå®ç°ç›¸å¯¹çš„æ¯”较½€å•,å®Ò(gu¨©)˜“ç†è§£åQŒâ€œåã^凿œç´¢é€Ÿåº¦â€æœ€å¿«ï¼Œå“ˆå¸Œå‡½æ•°çš„设计是æœçƒ¦é€Ÿåº¦çš„关键,åªè¦½W¦åˆâ€œåã^å‡åˆ†å¸ƒâ€å’Œâ€œè®¡½—简å•â€ï¼Œ®±å¸¸å¸¸èƒ½æˆäØ“(f¨´)è¯¸ç§æœçƒ¦½—法中的首选,所以哈希表是最‹¹è¡Œçš„一¿Uæœç´¢ç®—法。但在æŸäº›ç‰¹ŒDŠæƒ…况下åQŒå®ƒä¹Ÿæœ‰¾~ºç‚¹åQŒæ¯”如:(x¨¬)1.当键ç ?k ä¸å­˜åœ¨æ—¶åQŒè¦æ±‚找出å°äº?k çš„æœ€å¤§é”®ç æˆ–å¤§äº k 的最®é”®ç ï¼Œå“ˆå¸Œè¡¨æ— æ³•有效ç‡åœ°æ»¡­‘Œ™¿™¿Uè¦æ±‚ã€?.哈希表的“åã^凿œç´¢é€Ÿåº¦â€æ˜¯å»ºç«‹åœ¨æ¦‚ç‡è®ºçš„基¼‹€ä¸Šçš„åQŒå› ä¸ŞZº‹å…ˆä¸èƒ½é¢„知待æœçƒ¦çš„æ•°æ®é›†åˆï¼Œæˆ‘们åªèƒ½â€œä¿¡èµ–â€æœç´¢é€Ÿåº¦çš„“åã^å‡å€¼â€ï¼Œè€Œä¸èƒ½â€œä¿è¯â€æœç´¢é€Ÿåº¦çš„“上é™â€ã€‚在åŒäh¾cÀL€§å‘½æ”¸å…³çš„应用中åQˆå¦‚åŒÈ–—或宇航领域)åQŒå°†æ˜¯ä¸åˆé€‚的。这些情况åŠ(qi¨¢ng)其他一些特ŒDŠæƒ…况下åQŒæˆ‘们必™åÀL±‚助其他“åã^å‡é€Ÿåº¦â€è¾ƒä½ï¼Œä½†èƒ½æ»¡èƒö相应的特ŒDŠè¦æ±‚çš„½—法。(è§ã€Šè®¡½—机½E‹åºè®¾è®¡è‰ºæœ¯ã€‹ç¬¬3å?æ’åºä¸æŸ¥æ‰¾ï¼‰ã€‚幸而“在½H—å£ä¸­æœç´¢åŒ¹é…字节串â€ä¸å±äºç‰Ò(gu¨©)®Šæƒ…况ã€?br />
æ—‰™—´ä¸å‹¾~©ç‡çš„åã^衡:(x¨¬)
gzip 定义了几¿Uå¯ä¾›é€‰æ‹©çš?levelåQŒè¶Šä½çš„ level å‹ç¾ƒæ—‰™—´­‘Šå¿«ä½†å‹¾~©ç‡­‘Šä½åQŒè¶Šé«˜çš„ level å‹ç¾ƒæ—‰™—´­‘Šæ…¢ä½†å‹¾~©ç‡­‘Šé«˜ã€?br />ä¸åŒçš?level 对下é¢å››ä¸ªå˜é‡æœ‰ä¸åŒçš„å–å€û|¼š(x¨¬)

nice_length
max_chain
max_lazy
good_length

nice_lengthåQšå‰é¢è¯´˜q‡ï¼Œæœçƒ¦åŒšw…æ—Ó¼Œ™åºç€ pre[] 的指½Cºåˆ° Window[] 中é€ä¸ªåŒšw…ä½ç½®å¼€å§‹ï¼Œæ‰‘Ö‡ºæœ€é•¿åŒ¹é…,但在˜q™è¿‡½E‹ä¸­åQŒå¦‚æœé‡åˆîC¸€ä¸ªåŒ¹é…的长度辑ֈ°æˆ–è¶…˜q?nice_lengthåQŒå°±ä¸å†è¯•图å¯ÀL‰¾æ›´é•¿çš„匹é…。最ä½çš„ level 定义 nice_length ä¸?8åQŒæœ€é«˜çš„ level 定义 nice_length ä¸?258åQˆå³ä¸€ä¸ªå­—节能表示的最大短语匹é…é•¿åº?3 + 255åQ‰ã€?br />
max_chainåQšè¿™ä¸ªå€ÆD§„定了™åºç€ pre[] 的指½Cºå¾€å‰å›æº¯çš„æœ€å¤§æ¬¡æ•°ã€‚最ä½çš„ level 定义 max_chain ä¸?4åQŒæœ€é«˜çš„ level 定义 max_chain ä¸?4096。当 max_chain å’?nice_length 有冲½Hæ—¶åQŒä»¥å…ˆè¾¾åˆ°çš„为准ã€?br />
max_lazyåQšè¿™é‡Œæœ‰ä¸€ä¸ªæ‡’惰匹é…(lazy matchåQ‰çš„æ¦‚念åQŒåœ¨è¾“出当å‰ä½ç½®åQˆstrstartåQ‰çš„匚w…之å‰åQŒgzip ä¼?x¨¬)廿‰¾ä¸‹ä¸€ä¸ªä½¾|®ï¼ˆstrstart + 1åQ‰çš„匚w…åQŒå¦‚æœä¸‹ä¸€ä¸ªåŒ¹é…的长度比当å‰åŒ¹é…的长度更长åQŒgzip ®±æ”¾å¼ƒå½“å‰åŒ¹é…,åªè¾“出当å‰ä½¾|®å¤„的首个字节,然å冿Ÿ¥æ‰?strstart + 2 处的匚w…åQŒè¿™æ ïL(f¨¥ng)š„æ–¹å¼ä¸€ç›´å¾€å找åQŒå¦‚æœåä¸€ä¸ªåŒ¹é…æ¯”å‰ä¸€ä¸ªåŒ¹é…更长,®±åªè¾“出å‰ä¸€ä¸ªåŒ¹é…的首字节,直到é‡åˆ°å‰ä¸€ä¸ªåŒ¹é…é•¿äºå一个匹é…,æ‰è¾“出å‰ä¸€ä¸ªåŒ¹é…ã€?br />gzip 作者的æ€èµ\是,如æœåä¸€ä¸ªåŒ¹é…æ¯”å‰ä¸€ä¸ªåŒ¹é…更长,®Şq‰ºç‰²å‰ä¸€ä¸ªåŒ¹é…çš„é¦–å­—èŠ‚æ¥æ¢å–åé¢çš„大äºç­‰äº?çš„é¢å¤–的匚w…长度ã€?br />max_lazy 规定了,如æœåŒšw…的长度达到或­‘…过了这个å€û|¼Œ®Şq›´æ¥è¾“出,ä¸å†½¡åä¸€ä¸ªåŒ¹é…æ˜¯å¦æ›´é•Ñ€‚最ä½çš„4¾U?level ä¸åšæ‡’æƒ°åŒšw…åQŒç¬¬5¾U?level 定义 max_lazy ä¸?4åQŒæœ€é«˜çš„ level 定义 max_lazy ä¸?258ã€?br />
good_lengthåQšè¿™ä¸ªå€ég¹Ÿå’Œæ‡’æƒ°åŒ¹é…æœ‰å…»I¼Œå¦‚æœå‰ä¸€ä¸ªåŒ¹é…长度达到或­‘…过 good_lengthåQŒé‚£åœ¨å¯»æ‰‘Ö½“å‰çš„æ‡’惰匚w…æ—Ó¼Œå›æº¯çš„æœ€å¤§æ¬¡æ•°å‡®åˆ° max_chain çš?1/4åQŒä»¥å‡å°‘当å‰çš„æ‡’惰匹é…花费的旉™—´ã€‚第5¾U?level 定义 good_length ä¸?4åQˆè¿™ä¸€¾U§ç­‰äºå¿½ç•¥äº† good_lengthåQ‰ï¼Œæœ€é«˜çš„ level 定义 good_length ä¸?32ã€?br />
分æåQšæ‡’æƒ°åŒ¹é…æœ‰å¿…è¦å—?å¯ä»¥æ”¹è¿›å—?
gzip 的作者是无æŸå‹ç¾ƒæ–šw¢çš„专å®Ó¼Œä½†æ˜¯ä¸–界上没有ç»å¯¹çš„æƒå¨åQŒå¾çˆ±å¾å¸ˆï¼Œæ›´çˆ±çœŸç†ã€‚我觉得 gzip 的作者对懒惰匚w…的考虑¼‹®å®ä¸å¤Ÿå‘¨è¯¦ã€‚åªè¦æ˜¯˜q›è¡Œäº†è®¤çœŸå®¢è§‚的分æåQŒè°éƒ½æœ‰æƒåˆ©æå‡ºè‡ªå·±çš„è§‚ç‚V€?br />采用懒惰匚w…åQŒéœ€è¦å¯¹åŸå§‹æ–‡äšg的更多的ä½ç½®æŸ¥æ‰¾åŒšw…åQŒæ—¶é—´è‚¯å®šå¢åŠ äº†è®¸å¤šå€ï¼Œä½†å‹¾~©ç‡çš„æé«˜åœ¨æ€ÖM½“上å分有é™ã€‚åœ¨å‡ ç§æƒ…况下,它å而å¢é•¿äº†çŸ­è¯­å‹ç¾ƒçš„结æœï¼Œæ‰€ä»¥å¦‚æœä¸€å®šè¦ç”¨æ‡’惰匹é…,也应该改˜q›ä¸€ä¸‹ç®—æ³•ï¼Œä¸‹é¢æ˜¯å…·ä½“的分æã€?br />1. ˜q箋3‹Æ¡ä»¥ä¸Šæ‰¾åˆîCº†æ›´é•¿çš„匹é…,®×ƒ¸åº”该å•个输出å‰é¢çš„那些字节,而应该作为匹é…输出ã€?br />2. äºæ˜¯åQŒå¦‚æœè¿¾l­æ‰¾åˆ°æ›´é•¿çš„匚w…的次数大äºç¬¬ä¸€ä¸ªåŒ¹é…的长度åQŒå¯¹äºç¬¬ä¸€ä¸ªåŒ¹é…ï¼Œç›¸å½“äºæ²¡æœ‰åšæ‡’æƒ°åŒšw…ã€?br />3. 如朮亽W¬ä¸€ä¸ªåŒ¹é…的长度但大äº?åQŒå°±æ²¡æœ‰å¿…è¦ä½œæ‡’惰匹é…ï¼Œå› äØ“(f¨´)输出的æ€ÀL˜¯ä¸¤ä¸ªåŒšw…ã€?br />4. 所以找åˆîC¸€ä¸ªåŒ¹é…ååQŒæœ€å¤šåªéœ€è¦å‘ååš 2 ‹Æ¡æ‡’惰匹é…,®±å¯ä»¥å†³å®šæ˜¯è¾“出½W¬ä¸€ä¸ªåŒ¹é…,˜q˜æ˜¯è¾“出1åQˆæˆ– 2åQ‰ä¸ªé¦–字节加åé¢çš„匹é…了ã€?br />5. äºæ˜¯åQŒå¯¹äºä¸€ŒDµåŸå§‹å­—节串åQŒå¦‚æœä¸åšæ‡’æƒ°åŒ¹é…æ—¶è¾“出两个匚w…åQˆå¯¹äºæ¯ä¸ªåŒ¹é…,è·ç¦»å?5ä½äºŒ˜q›åˆ¶æ•ͼŒé•¿åº¦å?ä½äºŒ˜q›åˆ¶æ•ͼŒåŠ è“væ¥çº¦å?字节åQŒè¾“å‡ŞZ¸¤ä¸ªåŒ¹é…约需è¦?字节åQ‰ï¼Œåšäº†æ‡’惰匚w…å¦‚æœæœ‰æ”¹˜q›çš„è¯ï¼Œ®†æ˜¯è¾“出1æˆ?个å•字节加上1个匹é…(也就是约4æˆ?字节åQ‰ã€‚è¿™æ øP¼Œæ‡’惰匚w…å¯ä»¥ä½¿æŸäº›çŸ­è¯­å‹¾~©çš„¾l“æœå†ç¾ƒçŸ?/3åˆ?/6ã€?br />6. å†è§‚察这样一个例å­ï¼š(x¨¬)
1232345145678[当å‰ä½ç½®]12345678
ä¸ç”¨æ‡’惰匚w…åQŒçº¦è¾“出6字节åQŒç”¨æ‡’惰匚w…åQŒçº¦è¾“出7字节åQŒç”±äºä‹É用了懒惰匚w…åQŒæŠŠæ›´åé¢çš„ä¸€ä¸ªåŒ¹é…æ‹†æˆäº†ä¸¤ä¸ªåŒšw…ã€‚ï¼ˆå¦‚æœ 678 正好能归入å†åé¢çš„一个匹é…,那懒惰匹é…å¯èƒ½æ˜¯æœ‰ç›Šçš„。)
7. ¾l¼åˆè€ƒè™‘å„ç§å› ç´ åQˆåŒ¹é…数和未匚w…çš„å•åŒå­—节在åŸå§‹æ–‡äšg中所å çš„æ¯”例åQŒå一个匹é…长度大äºå‰ä¸€ä¸ªåŒ¹é…长度的概ç‡åQŒç­‰½{‰ï¼‰åQŒç»˜q‡æ”¹˜q›çš„æ‡’惰匚w…½—法åQŒå¯¹æ€Èš„å‹ç¾ƒç‡å³ä½¿æœ‰è´¡çŒ®åQŒä¹Ÿä»æ˜¯å¾ˆå°çš„,而且也ä»ç„¶å¾ˆæœ‰å¯èƒ½ä¼š(x¨¬)é™ä½å‹ç¾ƒç‡ã€‚å†è€ƒè™‘到时间的¼‹®å®šçš„æ˜æ˜„¡š„å¢åŠ ä¸å‹¾~©ç‡çš„丼‹®å®šçš„å¾®å¼Şqš„å¢ç›ŠåQŒä¹Ÿè®¸æœ€å¥½çš„æ”¹è¿›æ˜¯æœæ–­åœ°æ”‘Ö¼ƒæ‡’惰匚w…ã€?/div>
™å‰™ƒ¨




 
å‘表äº?2006-3-3 14:49  资料短消æ?/a> 
gzip 在完æˆçŸ­è¯­å¼å‹ç¾ƒå,®†è{入编ç å¼å‹ç¾ƒçš„阶ŒDüc(di¨£n)€‚这个阶ŒD늚„å®ç°æ˜¯å¾ˆå¤æ‚的,å¯Ò(gu¨©)œ€¾lˆçš„å‹ç¾ƒç‡è‡³å…³é‡è¦ï¼Œæˆ‘会(x¨¬)详细解说 gzip çš„åšæ³•。gzip 是开放æºä»£ç çš„æ— æŸå‹¾~©ç¨‹åºä¸­æœ€è‘—å的,其中的秿U技巧很有å¯å‘æ„义,但是他是比较早期的程åºï¼Œç°åœ¨æœ‰å¾ˆå¤šçš„½E‹åºå·²ç»åœ¨å‹¾~©ç‡ä¸Šè¶…˜q‡äº†å®ƒï¼Œæ‰€ä»¥æˆ‘ä¼?x¨¬)æ ¹æ®è‡ªå·±å¯¹æ— æŸå‹ç¾ƒçš„基本规律的ç†è§£æå‡ºå¯¹å®ƒçš„æ”¹˜q›ã€?br />
¾~–ç å¼å‹¾~©çš„几点考虑åQ?br />1. huffman ½—法å‹ç¾ƒç‡çš„关键是å„节点值的差异è¦å¤§åQŒè¿™æ ·å°±è¦æ±‚分段¾~–ç è¾“出。因为æŸäº›æ®µè½ä¸­æŸäº›èŠ‚ç‚¹çš„å‡ºç°é¢‘ç‡è¾ƒé«˜ï¼Œå¦ä¸€äº›æ®µè½ä¸­˜q™äº›èŠ‚ç‚¹å‡ºç°é¢‘ç‡è¾ƒä½åQŒå¦‚æœä¸åˆ†æ®µè¾“出åQŒé¢‘ç‡çš„差异ä¼?x¨¬)被彼此抉|¶ˆåQŒè€Œä¸åŒæ®µè½ä¸­åQŒèŠ‚ç‚¹çš„å‡ºç°é¢‘ç‡ä¸åŒæ˜¯å¸¸æœ‰çš„ã€?br />  è¦å†³å®šåˆ†ŒD늚„大å°åQŒå¿…™å»è§£å†³ä¸€å¯¹çŸ›ç›¾ï¼š(x¨¬)上é¢çš„分æä¼¼ä¹è¦æ±‚段è½è¶Š®è¶Šå¥½ï¼Œä½†ç”±äºè¦ä¿å­˜ç è¡¨ä»¥å¯¹ huffman å‹ç¾ƒ¾l“朘q›è¡Œè§£å‹åQŒæ¯ä¸ªæ®µè½éƒ½è¦ä¿å­˜ä¸€ä»½ä¸åŒçš„ç è¡¨åQŒæ‰€ä»¥æ®µè½å–得太®ï¼Œä¿å­˜äº†ç è¡¨åå¾—ä¸å¿å¤±åQŒè¿™æ øP¼Œä¼ég¹åˆè¦æ±‚段è½è¦®½é‡å¤§ï¼Œä½¿ç è¡¨çš„ä¿å­˜ä»½æ•°®½é‡®‘ã€?br />  gzip 采å–了这æ ïL(f¨¥ng)š„½{–ç•¥æ¥ç¡®å®šæ®µè½çš„大å°åQšlz77 å‹ç¾ƒæ¯äñ”ç”?4kåQˆå°åQ‰çš„æ•°æ®åQŒå°±åˆ¤æ–­ç°åœ¨å¯Ò(gu¨©)œª¾~–ç éƒ¨åˆ†˜q›è¡Œ¾~–ç è¾“出是å¦åˆé€‚,最多积å‹åˆ° 32kåQˆå¤§åQ‰çš„æ—¶å€™ï¼Œå¿…定˜q›è¡Œå¼ºåˆ¶è¾“出åQŒå› ä¸ºåã^庸的数殿U¯å‹å¾—太多,åé¢å³ä‹É有好的数æ®ï¼Œé¢‘燾lŸè®¡åœ¨ä¸€èµøP¼Œä¹Ÿä¼š(x¨¬)被åã^庸化ã€?br />  判断当å‰è¾“出åˆé€‚ä¸å¦çš„æ¡äšg是:(x¨¬)1)用预先设定好的å„节点长度和å„节点å®é™…çš„å‡ºç°æ¬¡æ•ͼŒè®¡ç®—å‹ç¾ƒ¾l“æœçš„大概å€û|¼Œçœ‹è¿™ä¸ªå€¼æ˜¯å¦å°äºæœªå‹ç¾ƒæ—¶çš„ 1/2ã€?)看目å‰äØ“(f¨´)止的匚w…数是å¦å°äºæœªåŒšw…的字节数åQŒå› ä¸?lz77 å‹ç¾ƒäº§ç”Ÿçš„æ•°æ®åŒ…括“匹é…â€å’Œâ€œæœªåŒšw…çš„åŸå§‹å­—节â€ï¼ŒŒDµè½é—´çš„节点频ç‡å·®å¼‚主è¦ä½“ç°åœ¨â€œæœªåŒšw…çš„åŸå§‹å­—节â€ä¸­ã€?br />  上é¢çš„åˆ¤æ–­åªæ˜¯ä¸€¿U“猜‹¹‹â€ï¼ŒçœŸæ­£çš„ç²¾¼‹®çš„计算需è¦èбè´Ò(gu¨©)›´å¤šçš„æ—‰™—´ã€?br />  我觉å¾?gzip 的策略å¯ä»¥æ”¹˜q›ï¼Œæˆ‘çš„½{–略是:(x¨¬)1)输出的时机是å‹ç¾ƒç‡çš„关键之一åQŒç°åœ¨è®¡½—机的速度和ä¹(ji¨¦)å年代时已ç»ä»Šé昔比åQŒç°åœ¨å®Œå…¨æœ‰æ¡äšgé‡‡ç”¨çœŸæ­£çš„å¾ huffman æ ?w¨¨i)çš„æ–Ò?gu¨©)³•得到å„节点的ç é•¿åQŒä½œ¾_„¡¡®çš„判断ã€?)ä¸åº”è¯¥ä¸æœªå‹¾~©çš„åŸå§‹æ•°æ®æ¯”较åQŒè€Œåº”è¯¥ä¸ lz77 è¾“å‡ºçš„æ•°æ®æ¯”较,å¦åˆ™è®¡ç®—出的å‹ç¾ƒæ¯”很大一部分是短语å¼å‹ç¾ƒçš„功功ë€?)ç”׃ºé‡‡ç”¨äº†çœŸæ­£çš„å»?huffman æ ?w¨¨i)çš„æ–Ò?gu¨©)³•åQŒä¸ç”¨å†åÕdšåŒšw…æ•îC¸æœªåŒ¹é…的字节数的比较åQŒå› ä¸ºé‚£åªæ˜¯ä¸€¿U猜‹¹‹ã€?)æ¯?4k 的数æ®éƒ½å•独¾lŸè®¡é¢‘ç‡åQŒå¦‚æœæ˜¯åˆé€‚çš„åQŒå°±å…ˆè¾“å‡ŞZ¹‹å‰çš„¿U¯å‹åQˆå¦‚æœæœ‰çš„è¯åQ‰ï¼Œå†è¾“出当å‰çš„ 4kåQŒè¿™æ ·å¯ä»¥é¿å…当å‰çš„æ•°æ®è¢«ç§¯å‹çš„æ•°æ®òq›_º¸åŒ–。如æœä¸åˆé€‚,®±æŠŠå½“å‰çš„频ç‡å½’入到¿U¯å‹çš„æ•°æ®ï¼ˆå¦‚æœæœ‰ï¼‰çš„频ç‡ä¸­åQŒå†åˆ¤æ–­æ˜¯å¦åˆé€‚,如ä»ä¸åˆé€‚就暂缓输出åQŒå¦åˆ™ä¸€èµ¯‚¾“出,˜q™å’Œ gzip 的作法是一æ ïL(f¨¥ng)š„。说æ˜ï¼š(x¨¬)几段差的数殿U¯å‹åˆîC¸€èµ·ä»æœ‰å¯èƒ½æˆä¸ºå¥½çš„æ•°æ®ï¼Œæ¯”如 01ã€?02ã€â€¦â€¦ç§¯å‹åœ¨ä¸€èµøP¼Œ0 的频ç‡é€æ¸é«˜å‡ºäº†å…¶ä»–字节ã€?)å¦‚æœæ„¿æ„付出更多的时é—ß_(d¨¢)¼Œåœ¨æŠŠå½“å‰çš„频ç‡å½’入之å‰çš„é¢‘ç‡æ—Ó¼Œå¯ä»¥å…ˆå’Œä¹‹å‰ 4k 的频ç‡åˆòqÓ¼Œå¦‚æœä¸åˆé€‚,和之å‰?8k 的频ç‡åˆòqÓ¼Œ˜q™æ ·é€æ¸å¾€å‰åˆòq?4kåQŒé¿å…å‰é¢ä¸å¥½çš„æ•°æ®æ‹–ç¯åˆåƈå的好的数æ®ã€?)有了å‰é¢çš„æœºåˆÓ¼Œ32k 的强制输出点å¯ä»¥å–消ã€?)˜q›ä¸€æ­¥çš„æ”¹è¿›åQšå½“è¦è¾“出时åQŒåªè¾“出¿U¯å‹çš„ä¸å¥½çš„部分åQŒå¥½çš„æ•°æ®å…ˆç•™ç€åQŒç­‰åé¢çš?4kåQŒå¦‚æœæ–°çš„加入ååQŒä»æ˜¯å¥½çš„æ•°æ®ï¼Œ®±å†½{‰ï¼Œå¦‚æœä¼?x¨¬)é™ä½å‹¾~©ç‡åQŒæ‰è¾“å‡ºå¥½çš„éƒ¨åˆ†ã€‚è¿™æ øP¼Œè®©å¥½çš„æ•°æ®å¤§ŒD늚„输出åQŒå¯ä»¥å‡®‘ç è¡¨çš„ä¿å­˜ä»½æ•°ã€?)å†è¿›ä¸€æ­¥çš„æ”¹è¿›åQšåçš„æ•°æ®æ”¾åœ¨ä¸€èµ·å¯èƒ½ä¼š(x¨¬)æé«˜å‹ç¾ƒç‡ï¼Œå¥½çš„æ•°æ®æ”‘Öœ¨ä¸€èµ·ä¹Ÿå¯èƒ½æ›´å¥½åQŒå½“ç„Ó¼Œä¸¤ç§æƒ…况也都有å¯èƒ½é™ä½å‹¾~©ç‡åQŒæ‰€ä»¥å‰é¢åˆ¤æ–­â€œå¥½â€è¿˜æ˜¯â€œä¸å¥½â€ï¼Œâ€œåˆé€‚â€è¿˜æ˜¯â€œä¸åˆé€‚â€çš„æ ‡å‡†åº”è¯¥ä»æŸä¸€ä¸ªå›ºå®šçš„å‹ç¾ƒç‡æ ‡å‡†æ”¹å˜äØ“(f¨´)åQšæé«˜äº†å‹ç¾ƒç‡è¿˜æ˜¯é™ä½äº†å‹ç¾ƒç‡ã€‚(æé«˜çš„幅度应该至®‘抵消多ä¿å­˜ä¸€ä»½ç è¡¨çš„æŸå¤±åQ›é™ä½çš„òq…度也应该至®‘抵消少ä¿å­˜ä¸€ä»½ç è¡¨çš„得益åQ?)¾l¼åˆå‰é¢çš„分æï¼Œ¼‹®å®šåˆ†æ®µå¤§å°çš„策略最¾lˆè°ƒæ•´äØ“(f¨´)åQšå½“新的数æ®å’Œå‰é¢çš„æœªåˆ‡åˆ†æ•°æ®æ”¾åœ¨ä¸€èµäh—¶åQŒä¸¤è€…中ä»ÖM½•一方å—到æŸå¤±ï¼Œéƒ½åº”该设¾|®åˆ‡åˆ†ç‚¹åQŒç§¯ç´¯äº†ä¸¤ä¸ªåˆ†æ®µå,通过计算åQŒå½“切分带æ¥çš„æ”¶ç›Šå¤§äºå°‘ä¿å­˜ä¸€ä»½ç è¡¨æ—¶åQŒæ‰è¾“出å‰ä¸€ŒDµï¼Œå¦åˆ™å–消它们之间的切分点。这个策略å®é™…上å¯ä»¥æ¶ëŠ›–å‰é¢æåˆ°çš„æ‰€æœ‰æ”¹˜q›ï¼Œå› äØ“(f¨´)æ¯ä¸ªå®é™…的分ŒDµä¹‹ä¸­çš„æ•°æ®æˆ–者相互促˜q›ï¼Œæˆ–è€…å½¼æ­¤ç¨æœ‰å¦¨å®»I¼Œä½†å¥½˜q‡å¤šä¿å­˜ä¸€ä»½ç è¡¨ï¼›è€Œæ¯ä¸¤ä¸ªç›”R‚»çš„分ŒDµä¹‹é—´çš„æ•°æ®å½¼æ­¤å¦¨å®³åQŒæŠµæ¶ˆäº†®‘ä¿å­˜ä¸€ä»½ç è¡¨çš„æ”¶ç›Šã€‚这个策略简å•直观地体ç°äº†æˆ‘们设¾|®åˆ†ŒD늚„åˆè¡·åQšå°±æ˜¯åˆ†ŒDµè¾“出必™å»èƒ½æé«˜å‹ç¾ƒç‡ã€?br />
2. 如æœä¸è€ƒè™‘ç è¡¨åQŒhuffman ½—法能得到最短的¾~–ç å¼å‹¾~©ç»“æœï¼Œä½†æ˜¯˜q™ç§½—法必须ä¿å­˜ç è¡¨ä»¥ä¾¿è§£å‹¾~©ï¼Œæ‰€ä»¥ä¸èƒ½ä¿è¯ç»“æœæ˜¯æœ€ä½³çš„。gzip é¢„å…ˆæ‹Ÿå®šäº†ä¸€å¥—é€šç”¨çš„é™æ€çš„¾~–ç åQŒå½“è¦è¾“å‡ŞZ¸€ä¸ªæ®µè½æ—¶åQŒæ¯”è¾?huffman å‹ç¾ƒ¾l“æœåŠ ç è¡¨çš„é•¿åº¦å’Œé™æ€ç¼–ç çš„å‹ç¾ƒ¾l“æœé•¿åº¦åQŒå†å†›_®šç”¨å“ª¿Uæ–¹æ³•è¾“å‡ø™¿™ä¸ªæ®µè½ã€‚陿€ç¼–ç ä¸éœ€è¦å¾æ ?w¨¨i),计算å‹ç¾ƒ¾l“æœé•¿åº¦æ—¶è€—时很少。如æœå„节点的频ç‡çš„差异很å°åQŒhuffman å‹ç¾ƒ¾l“æœåŠ ç è¡¨å而å¢å¤§äº†¾l“æœåQŒé™æ€ç¼–ç ä¹Ÿä¸åˆé€‚ï¼ŒåŒæ ·å¢å¤§äº†ç»“æœï¼Œgzip ®Şq›´æ¥ä¿å­?lz77 çš„åŸå§‹è¾“出。由äºè¾“å‡ŞZ¸€ä¸ªæ®µè½æ—¶åQŒå¢åŠ äº†é™æ€ç¼–ç çš„æ–Ò(gu¨©)¡ˆåQŒä‹É输出的å®é™…长度和之剼‹®å®šåˆ†æ®µç‚Ò(gu¨©)—¶è®¡ç®—的值å¯èƒ½ä¸åŒï¼Œé‚£ä¹ˆå‰é¢è®¡ç®—出的˜q™ä¸ªåˆ†æ®µç‚Ò(gu¨©)˜¯å¦ä»æ˜¯æ­£¼‹®çš„åQŸå‰é¢çš„分段½{–略是å¦éœ€è¦è°ƒæ•ß_(d¨¢)¼Ÿ
  分æåQ?)陿€ç¼–ç çš„å„èŠ‚ç‚¹ç¼–ç æ˜¯ä¸å˜çš„,对二Dµè½çš„åˆòq¶æ˜¯æ— æ‰€è°“çš„åQŒä¸¤ä¸ªè¿¾l­æ®µè½å³ä½‰Kƒ½é‡‡ç”¨é™æ€ç¼–ç ï¼Œä¹Ÿä¸ç”¨åˆòqÓ¼Œå› äØ“(f¨´)åˆåƈå结æœé•¿åº¦æ˜¯ä¸ä¼š(x¨¬)å˜çš„ã€?)所以åªå¯¹ä¸€¿U情况å¯èƒ½æœ‰å½±å“åQšä¸€ä¸ªæ®µè½ä¸­æ‹†åˆ†å‡ŞZ¸€äº›éƒ¨åˆ†ç”¨ huffman ¾~–ç åQŒå¦ä¸€äº›éƒ¨åˆ†ç”¨é™æ€ç¼–ç ï¼Œå‹ç¾ƒ¾l“æœæ›´å¥½ã€‚当˜q™ç§æƒ…况å‘生æ—Ó¼Œåˆ™å¿…有一些部分的优势节点åQˆé¢‘ç‡é«˜çš„节点)ä¸é™æ€ç¼–ç é¢„先拟定的优势节点相近åQŒé‡‡ç”¨é™æ€ç¼–ç å有ç¨è®¸æ”¹å–„,其他部分则ä¸é™æ€ç¼–ç é¢„å…ˆæ‹Ÿå®šçš„ä¼˜åŠ¿èŠ‚ç‚¹æœ‰ä¸€å®šåˆ†æ­§ï¼Œé‡‡ç”¨é™æ€ç¼–ç åä¼?x¨¬)有½E许ä¸åˆ©ã€‚之所以说“ç¨è®¸â€ï¼Œæ˜¯å› ä¸ºæˆ‘们已知åŒä¸€ä¸ªæ®µè½é‡Œçš„å„éƒ¨åˆ†æ•°æ®æˆ–è€…äº’ç›æ€¿ƒ˜q›ï¼Œæˆ–者仅有ç¨è®¸å¦¨å®»I¼Œè¯´æ˜å®ƒä»¬çš„优势节ç‚Ò(gu¨©)˜¯å¤§è‡´­‘‹åŒçš„。考虑到拆分åå¯èƒ½è¦å¤šä¿å­˜å‡ ä†¾ç è¡¨åQŒæ‹†åˆ†å¸¦æ¥æ”¶ç›Šçš„å¯èƒ½æ€§å’Œ½E‹åº¦æ˜¯å¾ˆ®çš„åQŒè€Œä¸”è®¡ç®—çš„å¤æ‚度较大åQŒæ‰€ä»¥å‰é¢çš„æ‹†åˆ†½{–ç•¥å¯ä»¥ä¸ä½œè°ƒæ•´ã€?br />  至äºç›´æ¥ä¿å­˜ lz77 çš„åŸå§‹è¾“出,å¯ä»¥çœ‹ä½œé™æ€ç¼–ç çš„一¿U特ŒDŠåÅå¼ï¼Œåªä¸˜q‡å®ƒå‡å®šå„节点的频ç‡ç›¸è¿‘åQŒæ²¡æœ‰ä¼˜åŠ¿èŠ‚ç‚V€‚它å¯ä»¥å¥—ç”¨é™æ€ç¼–ç çš„分æåQŒæ¥è¯æ˜ä¸åª„å“å‰é¢å·²¾l制定的分段½{–ç•¥ã€?br />
3.采用 huffman ¾~–ç åQŒå¿…™åÀL·±å…¥ç ”½I¶ç è¡¨çš„ä¿å­˜æ–¹å¼ã€?br />  åªè¦è®¡ç®—一下采用简å•çš„æ–¹å¼æ¥ä¿å­˜ç è¡¨ï¼Œéœ€è¦å¤šå¤§çš„½Iºé—´åQŒå°±çŸ¥é“˜q™æ˜¯ä¸€ä¸ªæŒ‘战ã€?br />  ½€å•地ä¿å­˜ç è¡¨çš„æ–¹æ³•是™åºåºåœîC¿å­˜æ¯ä¸€ä¸ªå€¼çš„ç é•¿å’Œç¼–ç ã€‚之所以è¦ä¿å­˜ç é•¿åQŒæ˜¯å› äØ“(f¨´)¾~–ç æ˜¯ä¸å®šé•¿çš„,没有ç é•¿åQŒè§£å‹æ—¶æ— æ³•正确è¯Õd–¾~–ç ã€‚ç é•¿å¿…™åÀL˜¯å®šé•¿çš„,也就是说必须é™åˆ¶ huffman æ ?w¨¨i)的最大层æ•ͼŒä½¿ç é•¿çš„使•°èƒ½æ°å¥½è¡¨½Cø™¿™ä¸ªå±‚数。é™åˆ?huffman æ ?w¨¨i)的最大层数的æ–Ò(gu¨©)³•是:(x¨¬)如æœè§„定的最大层æ•îCØ“(f¨´) nåQŒåˆ™åœ?n - 1 层找åˆîC¸€ä¸ªå¶å­èŠ‚ç‚?aåQˆå¦‚æ?n - 1 层没有å¶å­èŠ‚ç‚¹ï¼Œ®±é€å±‚地往上寻找,直到扑ֈ°ä¸€ä¸ªå¶å­èŠ‚ç‚¹ï¼‰åQŒåœ¨èŠ‚ç‚¹ a 的佾|®æ”¾ä¸€ä¸ªéå¶å­èŠ‚ç‚¹ AåQŒä‹É a æˆäØ“(f¨´) A çš„å­èŠ‚ç‚¹åQŒæŠŠæŸä¸ª­‘…过 n 层的å¶å­èŠ‚ç‚¹ b æä¸Šæ¥ä½œä¸?A çš„å¦ä¸€ä¸ªå­èŠ‚ç‚¹åQŒæ­¤æ—?b 的父节点 B åªå‰©ä¸‹ä¸€ä¸ªå­èŠ‚ç‚¹ cåQŒå–æ¶?BåQŒæŠŠ c 攑֜¨ B 的佾|®ï¼Œé‡å¤˜q™æ ·çš„过½E‹ï¼Œç›´åˆ°æ‰€æœ?n 层以下的节点都被æä¸Šæ¥ã€‚之所以è¦ä»?n - 1 层开始é€å±‚往上找åQŒæ˜¯å› äØ“(f¨´)下层的节炚w¢‘ç‡å°åQŒç é•¿å˜åŒ–å的媄å“å°ã€‚å‡è®¾æ¯ä¸€å±‚节点的频ç‡ç›¸è¿‘åQŒé‚£ä¹ˆä¸Šå±‚çˆ¶èŠ‚ç‚¹çš„é¢‘ç‡æ˜¯å…¶ä¸‹å±‚å­èŠ‚ç‚¹çš„ä¸¤å€ï¼Œ½W?11 层节点的频ç‡åªæœ‰½W¬ä¸€å±‚节炚w¢‘ç‡çš„ 1 / 1024åQŒæ‰€ä»¥åº”该ä»ä¸‹å¾€ä¸Šæ‰¾ã€?br />  ç°åœ¨®±å¼€å§‹è®¡½—ç è¡¨å¤§®ï¼š(x¨¬)
ã€€ã€€å¯¹äº 256 个åŸå§‹å­—节å€û|¼Œé™åˆ¶å®ƒçš„ huffman æ ?w¨¨i)的层数ä?0 åQ?15åQŒç é•¿å°±éœ€è¦?4 ä½ï¼Œ256 个ç é•‰Kœ€è¦?4 bit * 256 = 128 字节åQ›è€?256 个新¾~–ç éœ€è¦è‡³®?256 å­—èŠ‚ã€‚ï¼ˆå½“äºŒå‰æ ‘(w¨¨i)的所有å¶å­èŠ‚ç‚šwƒ½æ”‘Öœ¨½W?8 å±?—â€?ä¸ç®—根节点一层,正好能放ä¸?2 çš?8 ‹Æ¡æ–¹ = 256 个å¶å­èŠ‚ç‚¹ï¼Œå…¶ä¸­ä»ÖM½•一个å¶å­èŠ‚ç‚¹å¾€ä¸Šå‡åQŒè‡³®‘造æˆä¸¤ä¸ªå¶å­èŠ‚ç‚¹å¾€ä¸‹é™ã€‚æ¢ä¸€ä¸ªè§’度说åQŒå¦‚æœåœ¨½W?8 层以上存在一个å¶å­èŠ‚ç‚?aåQŒåœ¨èŠ‚ç‚¹ a 的佾|®æ”¾ä¸€ä¸ªéå¶å­èŠ‚ç‚¹ AåQŒä‹É a æˆäØ“(f¨´) A çš„å­èŠ‚ç‚¹åQŒæŠŠæŸä¸ª­‘…过 8 层的å¶å­èŠ‚ç‚¹ b æä¸Šæ¥ä½œä¸?A çš„å¦ä¸€ä¸ªå­èŠ‚ç‚¹åQŒæ­¤æ—?b 的父节点 B åªå‰©ä¸‹ä¸€ä¸ªå­èŠ‚ç‚¹ cåQŒå–æ¶?BåQŒæŠŠ c 攑֜¨ B 的佾|®ï¼Œæ­¤æ—¶ a å¢é•¿äº†ä¸€ä½ï¼Œc ¾~©çŸ­äº†ä¸€ä½ï¼Œb ¾~©çŸ­äº†è‡³®‘一ä½ï¼Œ¾~–ç çš„åã^å‡ä½é•¿ç¾ƒçŸ­ã€‚所以,当第 8 层以上ä¸å­˜åœ¨å¶å­èŠ‚ç‚¹åQŒæ‰€æœ‰å¶å­èŠ‚ç‚šwƒ½æ”‘Öœ¨½W?8 层时åQŒç¼–ç çš„òq›_‡ä½é•¿è¾‘Öˆ°æœ€çŸ?—â€?8ä½ã€‚)˜q™å¥—ç è¡¨å…±éœ€è‡›_°‘ 128 + 256 = 384 字节ã€?br />  256 个“匹é…长度â€çš„æƒ…况ä¸åŸå§‹å­—节值相åŒï¼Œä¸¤å¥—ç è¡¨å…±éœ€è‡›_°‘ 384 * 2 = 768 字节ã€?br />ã€€ã€€å¯¹äº 32k 个“匹é…è·¼› Z€ï¼Œå¦‚æœé™åˆ¶è¯?huffman æ ?w¨¨i)的层数ä?0 åQ?31åQŒä¿å­˜æ¯ä¸ªå€¼çš„ç é•¿éœ€è¦?5 ä½ï¼Œæ–°ç¼–ç çš„òq›_‡é•¿åº¦­‘…过 15 ä½ã€‚ï¼ˆå› äØ“(f¨´)所有å¶å­èŠ‚ç‚šwƒ½æ”‘Öœ¨½W?15 å±?—â€?ä¸ç®—根节点一层,正好能放ä¸?2 çš?15 ‹Æ¡æ–¹ = 32k 个å¶å­èŠ‚ç‚V€‚)˜q™å¥—ç è¡¨è¦è¶…˜q?0k 字节åQ?(5 + 15) * 32k / 8 = 80k åQ‰ã€?br />  å‰é¢è®¨è®ºåˆ†æ®µ½{–略时已¾l说˜q‡ï¼Œä¸ŞZº†é¿å…个段è½é—´èŠ‚ç‚¹é¢‘ç‡å·®å¼‚è¢«äº’ç›¸æŠµæ¶ˆï¼Œè¦æ±‚ŒDµè½åˆ’分®½é‡¾l†è‡´ã€å‡†¼‹®ï¼Œæœ€®çš„ŒDµè½å¯ä»¥ä»…䨓(f¨´) 4kåQŒè€Œé‡‡ç”¨ä¸Šé¢è¿™¿U简å•的方å¼åQŒç è¡¨è¦­‘…过 80kåQŒæ˜¾ç„¶æ˜¯æ— æ³•æ¥å—çš„ã€?br />  对ç è¡¨çš„ä¿å­˜æ–¹å¼çš„æ·±å…¥ç ”½IÓ¼Œ¼‹®å®æ˜¯ä¸ªæ— æ³•¾l•开的挑战,如æœä¸æ”»å…‹è¿™ä¸ªéš¾å…»I¼Œ¾~–ç å¼å‹¾~©æ— æ³•进行下å»ï¼æŒ‘战ä¼?x¨¬)带æ¥ä¹­‘£ï¼Œå›°éš¾ä¼š(x¨¬)æ¿€å‘豪情。我们所è¦åšçš„æ˜¯åQšè§‚å¯?gzip 如何一步步地通过¾Jå¤ä½†åˆå·§å¦™çš„åšæ³•解册™¿™ä¸ªéš¾é¢˜ï¼Œå¯¹å…¶ä¸­çš„åšæ³•çš„é“ç†åŠ¡æ±‚çŸ¥å…¶ç„¶ã€çŸ¥å…¶æ‰€ä»¥ç„¶åQŒé€šè¿‡è§‚å¯Ÿã€æ€è€ƒï¼ŒæŠŠæ¡æ— æŸå‹ç¾ƒå†…åœ¨çš„ã€æ·±å±‚çš„ã€æœ¬è´¨çš„规律åQ事å®ä¸ŠåQŒå¯¹ gzip çš„è¿™äº›åšæ³•进行阅读(æºä»£ç ï¼‰ã€åˆ†æã€æŒ–æ˜å…¶ä¸­çš„æ™ºæ…§åQŒæœ¬íw«å°±æ˜¯ä¸€ä¸ªå¯¹æ™ºæ…§ã€è€åŠ›ã€ä¹ƒè‡›_†³å¿ƒçš„长期的挑战,我æ¥å—了˜q™ä¸ªæŒ‘战åQŒåƈ把它æè¿°ã€è§£é‡Šå‡ºæ¥ï¼Œè¯»è€…é¢å¯¹çš„æŒ‘战是花费较长期的时间å»é˜…读ã€ç†è§£ï¼Œå¸Œæœ›è¯»è€…完全有è€åŠ›ã€è±ªæƒ…ã€å…´­‘£æ¥æ¥å—˜q™ä¸ªæŒ‘战åQŒæ·±åŒ–è‡ªå·Şqš„æŠ€æœ¯å±‚‹Æ¡ã€æ€ç»´å±‚次ã€?br />
3.1 åªä¿å­˜ç é•¿ï¼Œòq¶å¢åŠ ä¸€äº›ç‰¹ŒDŠçš„倹{€?br />
3.1.1 æŠ?huffman æ ?w¨¨i)çš„æ¯ä¸€å±‚上的å¶å­èŠ‚ç‚šwƒ½æ¢åˆ°è¯¥å±‚的左边,按照其åŸå§‹å€ég»®åˆ°å¤§ä¾‹Æ¡æ’列,éå¶å­èŠ‚ç‚¹åˆ™é›†ä¸­åœ¨è¯¥å±‚å³è¾¹ï¼Œ˜q™æ—¶ä»æ˜¯ä¸€‹‚µäºŒå‰æ ‘(w¨¨i)åQŒå¾—到的¾~–ç ä»ç¬¦åˆå‰¾~€¾~–ç çš„è¦æ±‚。æ¯ä¸ªå¶å­èŠ‚ç‚¹çš„¾~–ç é•¿åº¦ä¸å˜åQŒæ‰€ä»¥å‹¾~©ç‡ä¹Ÿä¸å˜ã€‚ä»…éœ€è¦æŒ‰ç…§åŸå§‹å€ég»®åˆ°å¤§ä¾‹Æ¡ä¿å­˜æ¯ä¸ªå€¼çš„ç é•¿åQŒè§£å‹æ—¶®±å¯ä»¥è¿˜åŸè¿™å¥—ç¼–ç è¡¨åQŒè¿˜åŸæ–¹æ³•是åQšç é•¿äØ“(f¨´) n 的第一个值的¾~–ç æ˜¯ç é•¿äØ“(f¨´) n - 1 的最å一个值的¾~–ç åŠ?1åQŒåƈ左移一ä½ï¼ˆä¹Ÿå°±æ˜¯è¯´åQŒåœ¨¾~–ç æœ€å加ä¸?0åQ‰ï¼Œè€Œç é•¿äØ“(f¨´) n 的其他值的¾~–ç æ˜¯å‰ä¸€ä¸ªç é•¿äØ“(f¨´) n 的值的¾~–ç åŠ?1。ä»ä¸Šé¢æ‰€è¯´çš„æ ?w¨¨i)的角度æ¥è§£é‡Šï¼Œæ¯ä¸€å±‚çš„½W¬ä¸€ä¸ªå¶å­èŠ‚ç‚Ò(gu¨©)˜¯å…¶ä¸Šå±‚最å一个å¶å­èŠ‚ç‚¹çš„åŒ™¾¹ä¸€ä¸ªèŠ‚ç‚¹çš„å·¦å­èŠ‚ç‚¹åQŒæ‰€ä»¥å®ƒçš„ç¼–ç æ˜¯ä¸Šå±‚最å一个å¶å­èŠ‚ç‚¹çš„¾~–ç åŠ?1 òq¶å·¦¿UÖM¸€ä½ï¼Œè€Œæ¯ä¸€å±‚上的å¶å­èŠ‚ç‚šwƒ½ç´§å¯†æ’列åQŒæ‰€ä»¥é™¤äº†ç¬¬ä¸€ä¸ªå¶å­èŠ‚ç‚¹å¤–åQŒå…¶ä»–å¶å­èŠ‚ç‚¹çš„¾~–ç éƒ½æ˜¯å‰ä¸€ä¸ªå¶å­èŠ‚ç‚¹çš„¾~–ç åŠ?1。编½E‹ä¸Šçš„å®ç°æ–¹æ³•是åQšéå†ç è¡¨ï¼Œå¾—到æ¯ä¸ªç é•¿(n)上有多少个å€û|¼Œè®¡ç®—出æ¯ä¸ªç é•¿ä¸Š½W¬ä¸€ä¸ªå€¼çš„¾~–ç åQŒæ”¾åœ¨æ•°¾l?bit_len[]ä¸­ï¼Œå†æ¬¡éå†ç è¡¨åQŒä¾‹Æ¡æ ¹æ®æ¯ä¸ªå€¼çš„ç é•¿(n)åQŒèµ‹äºˆå®ƒçš„ç¼–ç äØ“(f¨´)该ç é•¿ä¸Šçš„å‰ä¸€ä¸ªå€¼çš„¾~–ç  (bit_len[n]) åŠ?1åQŒbit_len[n] ++ã€?br />  ç”׃ºåªéœ€è¦ä¿å­˜ç é•¿ï¼Œç°åœ¨ç è¡¨ç”Şp¶…˜q?80k 字节å‡å°åˆ°çº¦ 20k 字节ã€?br />
3.1.2 如何åªä¿å­˜åœ¨ŒDµè½ä¸­å‡ºç°è¿‡çš„节点(有效节点åQ‰çš„¾~–ç åQ?br />  一ä¸?ASCⅡ文本,128 以å的值是ä¸ä¼š(x¨¬)在文件中出ç°çš„,按照 3.1.1 的方法,ç è¡¨ä¸­ååŠéƒ¨åˆ†ï¼ˆéƒ½æ˜¯ 0åQ‰åœ¨è§£å‹¾~©æ—¶æ˜¯ç”¨ä¸åˆ°çš„ã€‚äØ“(f¨´)了é¿å…è¿™¾cÀLµªè´¹ï¼Œåªä¿å­˜æœ‰æ•ˆèŠ‚ç‚¹ï¼ˆç é•¿ä¸äØ“(f¨´) 0 的节点)åQŒä¸€¿U方法是ä¿å­˜æœ‰æ•ˆèŠ‚ç‚¹çš„åŸå§‹å€¼å’Œæ–°ç¼–ç çš„ç é•¿åQŒå½“有效节点­‘…过所有节点的1/4åQŒè¿™¿U方法ä¿å­˜çš„ç è¡¨çš„大®ä¼š(x¨¬)­‘…过 3.1.1 的方法ã€?br />  gzip 采用的方法是åQšåœ¨ 3.1.1 的基¼‹€ä¸Šï¼Œäºè‹¥òq²ç§ç é•¿ä¹‹å¤–åQŒå¢åŠ ä¸€äº›ç‰¹ŒDŠçš„å€û|¼Œä»–们表示当å‰ä¸ŞZ¹‹å‰ä¸€ä¸ªç é•¿æˆ– 0 ç é•¿åQˆæ— æ•ˆèŠ‚ç‚¹ï¼‰çš„é‡å¤ï¼Œé‡åˆ°˜q™ç§å€û|¼Œé‚£åé¢çš„一个数字表½Cºé‡å¤çš„‹Æ¡æ•°ã€‚第一¿Uå€ég»£è¡¨å½“å‰äØ“(f¨´)之å‰ä¸€ä¸ªç é•¿çš„é‡å¤ 3 åQ?6 ‹Æ¡ï¼Œåé¢è·Ÿç€ 2 bit 为具体的é‡å¤‹Æ¡æ•°åQ›ç¬¬äºŒç§å€ég»£è¡¨å½“å‰äØ“(f¨´) 0 ç é•¿çš„é‡å¤?3 åQ?10 ‹Æ¡ï¼Œåé¢è·Ÿç€ 3 bit 为具体的é‡å¤‹Æ¡æ•°åQ›ç¬¬ä¸‰ç§å€ég»£è¡¨å½“å‰äØ“(f¨´) 0 ç é•¿çš„é‡å¤?11 åQ?138 ‹Æ¡ï¼Œåé¢è·Ÿç€ 7 bit 为具体的é‡å¤‹Æ¡æ•°ã€‚é™åˆ¶æœ€®é‡å¤æ¬¡æ•îCØ“(f¨´) 3åQŒå¯ä»¥ç¡®ä¿è¿™¿U方法得到的ç è¡¨ä¸ä¼š(x¨¬)大过 3.1.1。第一¿U值é™åˆ¶æœ€å¤§é‡å¤æ¬¡æ•îCØ“(f¨´) 6åQŒæ˜¯å› äØ“(f¨´)˜q箋 6 个å€ég»¥ä¸Šçš„ç é•¿ç›¸ç­‰åQˆè¯´æ˜é¢‘ç‡å分楘q‘)的情况ä¸å¸¸è§åQŒåš˜q™ä¸ªé™åˆ¶å¯ä»¥èŠ‚çœé™„加 bitåQ›ç¬¬äºŒç¬¬ä¸‰ç§å€¼åŒºåˆ†é‡å¤æ¬¡æ•°çš„范围åQŒä¹Ÿæ˜¯äØ“(f¨´)了节çœé™„åŠ?bitã€‚åœ¨åªæœ‰®‘数有效节点的情况下åQŒè¿™¿U方法åªéœ€è¦ä¿å­˜è¾ƒ?y¨­u)®‘的数æ®åQŒåŒæ—¶ä¹Ÿå…ähœ‰½€å•çš„å»é‡å¤çš„作用ã€?br />ã€€ã€€å¦‚æœæœ€å¤§ç é•¿æ˜¯ 15åQ? åQ?15 å…?16 ¿Uå€û|¼Œä¸€ä¸ªç é•‰Kœ€è¦?4 ä½ï¼ŒåŠ ä¸Šä¸Šé¢ 3 ¿Uå€û|¼Œå…?19 ¿Uå€û|¼Œéœ€è¦?5 ä½ï¼Œåœ¨é‡å¤ä¸å¤šæ—¶åQŒåŠ äº†è¿™ 3 ¿Uå€û|¼Œæ˜¯ä¸æ˜¯ä¼š(x¨¬)å¢å¤§ç è¡¨åQŸå…¶å®ä¸ç”¨æ‹…心,gzip ä¼?x¨¬)对ç è¡¨å†è¿›è¡Œä¸€‹Æ?huffman å‹ç¾ƒåQŒæ ¹æ®è¿™ 19 ¿U值的频ç‡åˆ†é…¾l™å®ƒä»¬å¯å˜ç é•¿çš„¾~–ç åQŒä¸ä¼?x¨¬)造戋¹ªè´¹åQŒç”±äºæ¶‰å?qi¨¢ng)到一些其他情况,对ç è¡¨çš„å†ç¼–ç å‹¾~©åœ¨å题q˜ä¼š(x¨¬)详细介ç»åQ?br />
3.2 把åŸå§‹å­—节值和匚w…长度值å¾åœ¨ä¸€‹‚‰| ‘(w¨¨i)上ã€?br />  ç°åœ¨å…ˆè€ƒè™‘å¦ä¸€ä¸ªé—®é¢˜ï¼š(x¨¬)å¦‚ä½•ä½¿è§£å‹æ—¶èƒ½åŒºåˆ†å½“剿˜¯ä¸€ä¸ªæœªåŒšw…的字节,˜q˜æ˜¯ä¸€ä¸ªåŒ¹é…?未匹é…字节值和匚w…长度ã€åŒ¹é…è·¼›ÀL˜¯ä¸‰æ£µä¸åŒçš?huffman æ ?w¨¨i),它们的编ç äº’ç›æ€¸½W¦åˆå‰ç¼€¾~–ç çš„è¦æ±‚,部分节点甚至å¯èƒ½¾~–ç ç›¸åŒåQŒè§£å‹æ—¶å¦‚何区分åQ?br />  ½W¬ä¸€¿U方法是用标志ä½ã€‚输出勾~©ç»“æœæ—¶åQŒé™¤äº†è¾“出æ¯ä¸€ŒD늚„ç è¡¨ã€é‡æ–°ç¼–ç åçš„æ•°æ®æµåQŒè¿˜è¦ä¿å­˜å¯¹åº”亘q™ä¸€ŒD‰|•°æ®çš„æ ‡å¿—使µåQŒæµä¸­çš„æ¯ä¸€ä½?0 æˆ?1 è¡¨ç¤ºå½“å‰æ˜¯ä¸€ä¸ªæœªåŒšw…的字节,˜q˜æ˜¯ä¸€ä¸ªåŒ¹é…ã€?br />  ½W¬äºŒ¿U方法是¾l™åŸå§‹å­—节值和匚w…长度å€ég¸åŒçš„¾~–ç åQŒåƈ½W¦åˆå‰ç¼€¾~–ç çš„è¦æ±‚ã€‚æœ€å¥½çš„åšæ³•是把它们建在一‹‚‰| ‘(w¨¨i)上,以确ä¿å®ƒä»¬ç¬¦åˆå‰¾~€¾~–ç çš„è¦æ±‚,òq¶ç”±å®ƒä»¬çš„é¢‘ç‡æ¥¼‹®å®šå„自的ç é•Ñ€?br />  ½W¬ä¸€¿U方法相当äºåŸå§‹å­—节值和匚w…长度值的¾~–ç éƒ½å¢é•¿ä¸€ä½ã€?br />  ½W¬äºŒ¿U方法中˜q™ä¸¤å¥—节点的ç é•¿å˜åŒ–è¦æ ¹æ®å…·ä½“节点å„自的频ç‡è€Œå®šã€?br />  ¾l过分æåQŒç¬¬äºŒç§æ–Ò(gu¨©)³•更好åQŒå› ä¸ºç¬¬ä¸€¿U方法å¯ä»¥çœ‹ä½œæ˜¯½W¬äºŒ¿U方法的å˜ç§åQŒç›¸å½“亽€å•地在两‹‚?huffman æ ?w¨¨i)的根节点上å†åŠ ä¸€ä¸ªçˆ¶èŠ‚ç‚¹åQŒè¿™æ äh˜¾ç„¶æ˜¯ä¸èƒ½ä¿è¯æœ€ä½³çš„¾l“æœçš„ã€?br />
3.3 把匹é…长度ã€åŒ¹é…è·¼›Õd˜ä¸ºé•¿åº¦èŒƒå›´ã€è·¼›»èŒƒå›ß_(d¨¢)¼Œå‡å°‘节点ã€?br />  ¾l过上é¢å¯¹ä¿å­˜ç è¡¨çš„æ–Ò(gu¨©)³•的改˜q›ååQŒç°åœ¨ç è¡¨è¿˜æœ‰å¤šå¤§ï¼Ÿ
  ç”׃ºæœ‰äº†ä¸Šé¢ä»‹ç»çš„å»é‡å¤æœºåˆ¶åQŒç è¡¨çš„å®é™…大å°å’ŒèŠ‚ç‚¹çš„é‡å¤æƒ…况有关åQŒå¦‚æœæœ‰å¾ˆå¤š˜q箋 3 个以上节点的ç é•¿ç›¸ç­‰çš„æƒ…况出çͼŒæˆ–有很多˜q箋 3 个以上的无效节点的情况出çͼŒç è¡¨å¯èƒ½æ˜¯å¾ˆ®çš„åQŒä½†ä½œäØ“(f¨´)通用的无æŸå‹¾~©ç®—法,必须考虑é‡å¤ä¸å¤šçš„æƒ…å†üc(di¨£n)€‚“匹é…è·¼› Z€æ˜¯ç è¡¨ä¸­æœ€ä¸»è¦çš„部分,我们æ¥åˆ†æä¸€ä¸‹å®ƒçš„é‡å¤æƒ…况,“匹é…è·¼› Z€å…±æœ?32k 个å–å€û|¼Œå¦‚æœä¸€ä¸ªæ®µè½ä¸åˆ?32kåQŒâ€œåŒ¹é…è·¼› Z€çš„æœ‰æ•ˆèŠ‚ç‚¹æ•°å½“ç„¶æ˜¯ä¸å¯èƒ½åˆ° 32k 的,æ€è€ƒä¸€ä¸‹ï¼Œå¯ä»¥çŸ¥é“åQŒå®ƒçš„æœ‰æ•ˆèŠ‚ç‚Ò(gu¨©)•°å’Œè¿™æ ·å‡ ä¸ªå› ç´ æœ‰å…»I¼š(x¨¬)一ŒD‰|œ‰å¤šé•¿åQŒæ®µè½ä¸­åŒšw…æ•°å’ŒæœªåŒ¹é…æ•°çš„æ¯”例,军_®šäº†å®ƒæœ‰å¤š®‘个å€û|¼Œå†åŠ ä¸Šè¿™äº›å€¼çš„é‡å¤æ€§ï¼Œå†›_®šäº†å®ƒæœ‰å¤š®‘个有效节点。å†åˆ†æä¸€ä¸‹è¿™äº›å€¼çš„é‡å¤æ€§ï¼š(x¨¬)ä¸åŒäºåŸå§‹å­—节和“匹é…长度â€éƒ½åªæœ‰ 256 个å–å€û|¼Œå®ƒæœ‰ 32k 个å–å€û|¼Œç›¸åŒçš„åŒ¹é…æœ‰ç›¸åŒçš„匹é…长度但ä¸ä¸€å®šæœ‰ç›¸åŒçš„匹é…è·¼›»ï¼Œæ‰€ä»¥å®ƒçš„å»å€ÆDŒƒå›´å¹¿åQŒé‡å¤ç‡ä½ï¼Œæœ‰æ•ˆèŠ‚ç‚¹å¤šã€‚è™½ç„¶å®é™…的情况无法预测åQŒä½†æˆ‘们å¯ä»¥åšä¸€äº›â€œå¤§è‡´åˆç†â€çš„å‡è®¾åQŒä»¥ä¾¿å¯¹ç è¡¨çš„大®æœ‰ä¸€ä¸ªåŸºæœ¬çš„æ¦‚念åQŒå‡å¦‚短语å¼å‹ç¾ƒçš„输出段è½çš„大å°ä¸?90k 字节åQŒå…¶ä¸­æœªåŒšw…字节数和匚w…数的比例ä¸?3 : 1åQŒæ¯ä¸ªæœªåŒšw…字节å?8 ä½ï¼›æ¯ä¸ªåŒšw…中,长度å?8 ä½ï¼Œè·ç¦»å?15 ä½ï¼Œå…?23 ä½ï¼Œ¾U¦äØ“(f¨´)未匹é…字节的 3 å€ï¼Œæ‰€ä»¥åŒ¹é…å äº?90k 字节中的¾U?45k 字节åQŒåŒ¹é…æ•°¾U?15k 个,也就是说æœ?15k 个跼›Õd€û|¼Œå‡å¦‚è·ç¦»å€¼çš„òq›_‡èŠ‚ç‚¹é¢‘ç‡ä¸?3åQŒé‚£ä¹ˆå»æ‰é‡å¤åæœ?5k 个有效跼›Õd€ÆDŠ‚ç‚¹ï¼Œä¿å­˜åˆ°ç è¡¨æ—¶æ¯ä¸ªç é•¿éœ€è¦?5 ä½ï¼Œä¿å­˜ 5k 个ç é•‰Kœ€è¦?5k * 5 / 8 ¾U?3k 字节åQŒç®—上无效节ç‚V€ç é•¿çš„é‡å¤çš„因素,åŸå§‹å­—节倹{€åŒ¹é…长度的ä¿å­˜åQŒæœ€¾lˆç è¡¨çº¦ 5k 字节åQŒäØ“(f¨´) 90k çš?18 分之一。当ŒDµè½å‡å°æ—Ó¼Œæœ‰æ•ˆèŠ‚ç‚¹­‘‹äº½E€ç–,无效节点å®Ò(gu¨©)˜“˜qæˆç‰‡ï¼Œå»é‡å¤æœºåˆ¶èƒ½å‘挥更大的作用;当段è½å¢å¤§æ—¶åQŒæ— æ•ˆèŠ‚ç‚¹å¯†åº¦å‡®ï¼Œå¯èƒ½æ— æ³•大片˜qæ¥åQŒå»é‡å¤æœºåˆ¶çš„æ•ˆç”¨é™ä½ï¼Œç è¡¨çš„æ¯”例å¯èƒ½ä¼š(x¨¬)å¢å¤§ã€‚一旦“匹é…è·¼› Z€éœ€è¦ä¿å­˜çš„ç é•¿æ•°è¾¾åˆîCº† 32k个,ç è¡¨è¾‘Öˆ°æœ€å¤§ï¼Œä¹‹åŒDµè½å†å¢å¤§ä¹Ÿä¸ä¼š(x¨¬)å¢å¤§ç è¡¨åQŒäºæ˜¯ç è¡¨çš„æ¯”例åˆä¼š(x¨¬)逿¸ä¸‹é™ã€‚当然段è½é€šå¸¸ä¸ä¼š(x¨¬)辑ֈ°˜q™ä¹ˆå¤§ï¼Œä½¿å¾—“匹é…è·¼› Z€éœ€è¦ä¿å­˜çš„ç é•¿æ•°èƒ½æœ‰æœºä¼?x¨¬)è¾¾å?32kã€?br />  gzip 以牺牲勾~©ç‡çš„代ä»äh¥æ¢å–ç è¡¨çš„进一步的大幅度凮。我们先æè¿°ä¸€ä¸‹å®ƒçš„å…·ä½“åšæ³•ï¼Œå†æ¥åˆ†æå…¶åˆ©å¼Šã€?br />  gzip 把匹é…长度划æˆ?29 个范å›ß_(d¨¢)¼ŒæŠŠåŒ¹é…è·¼›Õdˆ’æˆ?30 个范å›ß_(d¨¢)¼Œæ Ò(gu¨©)®æ¯ä¸ªèŒƒå›´ä¸­èŠ‚ç‚¹çš„æ€»é¢‘ç‡ï¼Œä¸?29 个长度范围加 258 ä¸ªå­—èŠ‚å€¼å¾ huffman æ ?w¨¨i)ï¼?x¨¬)l_treeåQŒäØ“(f¨´) 30 个跼›»èŒƒå›´å¾ huffman æ ?w¨¨i)ï¼?x¨¬)d_treeã€‚è¾“å‡ŞZ¸€ä¸ªå€¼æ—¶å…ˆè¾“凸™¯¥å€¼æ‰€åœ¨èŒƒå›´çš„¾~–ç åQŒå†è¾“出附加ç ï¼Œå›_®ƒæ˜¯è¯¥èŒƒå›´ä¸­çš„½W¬å‡ ä¸ªå€¹{€‚è¿™æ ïL(f¨¥ng) è¡¨ä¸­åªéœ€ä¿å­˜èŒƒå›´çš„ç é•Ñ€‚范围的大å°éƒ½æ˜¯ 2 的乘方,所以范围大®å’Œé™„加ç çš„ä½é•¿æ˜¯äº’相决定的ã€?br />29 个长度范围的附加ç ä½é•¿æ˜¯åQ?br />{0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
30 个跼›»èŒƒå›´çš„附加ç ä½é•¿æ˜¯åQ?br />{0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
å¯ä»¥çœ‹å‡ºåQšèŒƒå›´çš„åˆ’åˆ†æ˜¯ä»®åˆ°å¤§çš„ã€‚äØ“(f¨´)什么ä¸òq›_‡åˆ’分呢?
  如æœä»ä»¥å•个节点的角度æ¥çœ‹ï¼Œè¢«åˆ†åˆ°åŒä¸€èŒƒå›´çš„节点相当äºè¢«èµ‹äºˆäº†ç›¸åŒçš„ç é•¿ï¼š(x¨¬)范围¾~–ç çš„ç é•¿åŠ é™„åŠ ç çš„ç é•¿ã€‚若频ç‡å·®åˆ«å¾ˆå¤§çš„节点因划分入åŒä¸€ä¸ªèŒƒå›´è€Œæ‹¥æœ‰ç›¸åŒçš„ç é•¿åQŒå°±ä¸ç¬¦å?huffman ¾~–ç çš„åˆè¡øP¼Œä¼?x¨¬)对å‹ç¾ƒç‡äñ”生ä¸è‰¯åª„å“ã€‚å› æ­¤è¦æ±‚划分ååQŒèŒƒå›´é‡Œçš„节炚w¢‘ç‡ç›¸˜q‘,以尽é‡é™ä½åŒä¸€ä¸ªèŒƒå›´é‡Œä¸åŒèŠ‚ç‚¹é—´çš„ç›æ€º’å½±å“ã€?br />  “匹é…长度â€ä»çŸ­åˆ°é•¿ï¼Œé¢‘ç‡ä¼?x¨¬)逿¸è¡°å‡åQŒè€Œä¸”è¡°å‡çš„幅度有ä»å¤§åˆ°å°çš„特点,˜q™ä¸ªç‰¹ç‚¹æ˜¯åœ¨å¤§å¤šæ•°åŸå§‹æ–‡ä»¶ä¸­â€œè‡ªç„¶å­˜åœ¨â€çš„。比如在 google 上æœç´¢ï¼Œ2 个字的短语和 22 个字的短语,æœåˆ°çš„ç»“æœæ•°å·®åˆ«å·¨å¤§åQ?00 个字å’?220 个字åQŒæœåˆ°çš„¾l“æœæ•°å·®åˆ«å°±æ²¡æœ‰é‚£ä¹ˆå¤§ã€‚频ç‡å¤§è‡´ä¸Šå•å‘åœ°é€æ­¥å˜åŒ–åQŒæ‰€ä»¥åˆ’分范围ååQŒèŒƒå›´å†…节点的频ç‡è¾ƒæ¥è¿‘åQ›å˜åŒ–速度由大到å°åQŒæ‰€ä»¥èŒƒå›´çš„划分应该ä»å°åˆ°å¤§ã€?br />  “匹é…è·¼› Z€ä¹Ÿæœ‰ç±»ä¼¼çš„特点åQŒå¯¹å¤§å¤šæ•°æ–‡ä»¶æ¥è¯ß_(d¨¢)¼ŒåŒšw…å‘生åœ?1k 以内比å‘生在 5k å·¦å³çš„å¯èƒ½æ€§è¦å¤§å¾—多,但å‘生在 28k 处附˜q‘çš„å¯èƒ½æ€§å’Œå‘生åœ?32k 处附˜q‘çš„å¯èƒ½æ€§çš„差别®±æ²¡é‚£ä¹ˆæ˜æ˜¾ã€‚所以范围划分也应该是仮到大ã€?br />  “未匚w…çš„åŸå§‹å­—节â€ä¸å…ähœ‰é¢‘ç‡è¡°å‡æˆ–递å¢çš„å•å‘å˜åŒ–的规律åQŒå®ƒä»¬çš„频ç‡åˆ†å¸ƒå¾€å¾€æ˜¯å‚å·®ä¸é½ã€éš¾ä»¥é¢„‹¹‹çš„åQŒä¸å¯èƒ½ç”¨é¢„先设定的范围表对它们˜q›è¡Œå¤§è‡´åˆç†çš„划分,®±åƒâ€œåŒ¹é…长度â€å’Œâ€œåŒ¹é…è·¼› Z€é‚£æ —÷€‚虽然也å¯ä»¥é€šè¿‡è®¡ç®—分æåQŒå¯¹å®ƒä»¬˜q›è¡Œä¸è®¾å®šèŒƒå›´æ•°é‡å’Œå¤§å°çš„划分,以求æ¯ä¸ªèŒƒå›´ä¸­çš„å„节炚w¢‘ç‡å¤§è‡´ç›¸˜q‘,ä½?1) “匹é…è·¼› Z€çš„划分已ç»å¤§å¹…度地¾~©å°äº†ç è¡¨çš„大å°åQ?) ç”׃ºä¸å…·æœ‰é¢‘ç‡å•å‘å˜åŒ–çš„­‘‹å‘åQŒè¦å¼ø™¡Œåˆ’出节点频ç‡ç›¸è¿‘òq¶ä¸”节点数是 2 的乘方的范围太勉强,隑ֺ¦ä¹Ÿå¤§åQ?) 未匹é…的字节æ•îC¸€èˆ¬è¦å¤§äºâ€œåŒ¹é…æ•°â€ï¼ˆæ³¨æ„åQšä¸æ˜¯â€œåŒ¹é…字节数â€ï¼‰åQŒå¼ºè¡Œåˆ’分造æˆçš„ä¸è‰¯å应较大。所ä»?gzip ä¿ç•™äº†è¿™å¥—èŠ‚ç‚¹ï¼Œæ²¡å»æ‹†åˆ†ã€?br />  长度范围的最å一个附加ç ä½é•¿æ˜?0åQŒæ˜¯å› äØ“(f¨´)é•¿åº¦å¤§äº 258 的匹é…都被截断到 258åQŒæ‰€ä»?258 的频ç‡å¯èƒ½ä¼š(x¨¬)高出å‰é¢çš„节点,å•ç‹¬åˆ’äØ“(f¨´)一个范围ã€?br />  如æœä¸€ä¸ªèŒƒå›´é‡Œçš„节炚w¢‘ç‡ç›¸åŒï¼ŒèŠ‚ç‚¹æ•°æ˜¯ 2 的乘方,且没有无效节点,那么˜q™ä¸ªèŒƒå›´å¯ä»¥çœ‹ä½œ huffman æ ?w¨¨i)中的一‹‚µå­æ ?w¨¨i),范围的编ç å¯ä»¥çœ‹ä½œè¿™‹‚µå­æ ‘(w¨¨i)的根的¾~–ç åQŒè¿™æ ïL(f¨¥ng)š„划分是ä¸ä¼?x¨¬)媄å“勾~©ç‡çš„ã€?br />  对勾~©ç‡çš„æŸå®Ïx¥è‡ªé¢‘ç‡ä¸ä¸€è‡ß_(d¨¢)¼Œä»¥åŠ(qi¨¢ng)æ— æ•ˆèŠ‚ç‚¹çš„å­˜åœ¨ã€‚èŒƒå›´é‡Œçš„æœ‰æ•ˆèŠ‚ç‚¹å¦‚æœæ²¡æœ‰è¿‡åŠï¼Œâ€œé™„加ç â€çš„使•°®Şp‡³®‘æœ‰ä¸€ä½æµªè´¹äº†åQŒä¹Ÿ®±æ˜¯è¯ß_(d¨¢)¼ŒèŒƒå›´é‡Œæ‰€æœ‰æœ‰æ•ˆèŠ‚ç‚¹çš„ç é•¿æ— ç«¯å¢é•¿äº†ä¸€ä½ï¼Œå¦‚æœæœ‰æ•ˆèŠ‚ç‚¹æ²¡æœ‰˜q?1/4åQŒè‡³®‘å°±æœ?2 ä½é™„加砋¹ªè´¹ã€?br />  划分范围的收益是使ç è¡¨å‡®åˆ°ä¸èƒö 0.2kåQŒåŠ ä¸Šåé¢ä¼š(x¨¬)介ç»çš„对ç è¡¨çš„第二次å‹ç¾ƒåQŒç è¡¨çš„æœ€¾lˆå¤§®æ˜¯å¾®ä¸­‘³é“çš„ã€?br />  ç°åœ¨æˆ‘们æ¥è¿‘似地估计一下划分范围在“一般情况â€ä¸‹å¯¹å‹¾~©ç‡çš„æŸå®³çš„æƒ…å†µåQŒä»¥ä¾¿æœ‰ä¸€ä¸ªå¤§è‡´çš„æ¦‚念åQŒä»ä¸‘Ö‰é¢çš„例å­åQ𿮵è½å¤§®äØ“(f¨´) 90kåQŒè®¾å…¶ä¸­æœªåŒ¹é…å­—èŠ‚æ•°å’ŒåŒ¹é…æ•°çš„æ¯”例䨓(f¨´) 3:1åQŒæœªåŒšw…字节æœ?45k 个,匚w…è·ç¦»å€¼å’ŒåŒšw…é•¿åº¦å€¼å„ 15k 个,有效è·ç¦»å€ÆDŠ‚ç‚¹äØ“(f¨´) 5k个(节点òq›_‡é¢‘ç‡ä¸?3åQ‰ï¼Œæ— æ•ˆè·ç¦»å€ÆDŠ‚ç‚¹äØ“(f¨´) 32k - 5k = 27k 个,有效è·ç¦»å€ÆDŠ‚ç‚¹çš„òq›_‡å¯†åº¦ä¸?5/32åQŒä¸åˆ?1/6。范围的划分是剮åå¤§ï¼Œæœ‰æ•ˆèŠ‚ç‚¹é¢‘ç‡æ˜¯å‰å¤§å®ï¼Œæ— æ•ˆèŠ‚ç‚¹æ˜¯å‰®‘å多。跼›Õd€¼æœ‰ 15k ä¸ªï¼Œè®‘Ö‰é¢æœ‰æ•ˆèŠ‚ç‚šw¢‘ç‡é«˜ã€å¯†åº¦è¾ƒå¤§çš„部分å ä¸€åŠï¼Œ¾U?7k 个å€û|¼Œ˜q™ä¸ªéƒ¨åˆ†ä¸­æ— æ•ˆèŠ‚ç‚¹å¸¦æ¥çš„æŸå®³è¾ƒå°åQŒè€Œä¸”范围划分¾l†ï¼ŒèŠ‚ç‚¹é—´é¢‘ç‡ä¸ä¸€è‡´å¸¦æ¥çš„æŸå®³ä¹Ÿå°åQŒå§‘且ä¸å»è®¡½—。åé¢çš„èŒƒå›´åˆ’åˆ†å¤§ã€æœ‰æ•ˆèŠ‚ç‚¹å¯†åº¦å°çš„部分æŸå®Œ™¾ƒå¤§ï¼Œ˜q™ä¸ªéƒ¨åˆ†å äº†¾U?7k 个å€û|¼Œç”׃ºå‰é¢çš„部分有效节点密度大åQŒæ‰€ä»¥å‡è®¾è¿™ä¸ªéƒ¨åˆ†æœ‰æ•ˆèŠ‚ç‚¹å¯†åº¦äØ“(f¨´) 1/8åQˆä¹Ÿ®±æ˜¯è¯ß_(d¨¢)¼Œ¾U¦ä¸€åŠçš„匚w…å‘生åœ?1k è·ç¦»ä»¥å†…åQŒä¸” 1k 以内无效节点很少åQŒé‚£ä¹?4k / 31k ¾U¦ç­‰äº?1/8åQ‰ï¼Œé™„åŠ ç æµªè´¹äº† 3 ä½ï¼Œ7k 个值浪è´?3 ä½ï¼Œå…±æµªè´¹äº† 21k bit ¾U¦ç­‰äº?3k 字节ã€?br />  å†çœ‹é¢‘ç‡ä¸ä¸€è‡´å¸¦æ¥çš„æŸå®³åQšhuffman ¾~–ç å¦‚æœè¦è¾¾åˆ?50% 的勾~©ç‡åQŒéœ€è¦èŠ‚ç‚šw—´é¢‘ç‡çš„差异达到几癑ր。读者å¯ä»¥è™šæ‹Ÿä¸€äº›èŠ‚ç‚šw¢‘ç‡ï¼Œè¯•ç€å»ŞZ¸€ä¸?huffman æ ?w¨¨i),会(x¨¬)å‘ç°å½“节点频ç‡å·®å¼‚在几åå€ç”šè‡›_ªæœ‰å‡ å€çš„æ—¶å€™ï¼Œå‹ç¾ƒç‡å…¶å®å¾®ä¹å…¶å¾®ã€‚绘q‡ä¸Šé¢è¿™æ ·åˆç†åœ°åˆ’分范围åQŒèŒƒå›´å†…的节炚w¢‘ç‡å·®å¼‚一般ä¸ä¼?x¨¬)那么大åQŒæ‰€ä»¥æˆ‘们å‡è®ùN¢‘ç‡ä¸ä¸€è‡´é€ æˆçš„æŸå®³äØ“(f¨´) 1k åQ?2kã€?br />  匚w…长度值的å–倯DŒƒå›´åªæœ?258 个,而且匚w…长度å¯èƒ½å¾ˆå°‘ä¼?x¨¬)è¶…˜q?20 字节åQŒè€Œå‰ 20 字节的范围划分是很细的,所以无效节点的æŸå®³å’Œé¢‘ç‡ä¸ä¸€è‡´çš„æŸå®³éƒ½è¾ƒ?y¨­u)®ã€?br />  ˜q™æ ·åQŒåœ¨˜q™ä¸ªä¾‹å­ä¸­ï¼Œåˆ’分范围带æ¥çš„æŸå®³çº¦åœ?5k åQ?6kåQŒå’Œä¸åˆ’分范围时ç è¡¨çš„大®é常相ä¼û|¼Œè‡›_°‘也是在一个数é‡çñ”上ã€?
ã€€ã€€å†æ¥çœ‹çœ‹æŸå®³æ¯”例å˜åŒ–的趋势:(x¨¬)当段è½å¾ˆ®æ—¶åQŒèŒƒå›´ä¸­çš„æœ‰æ•ˆå€¼ç¨€ç–,æŸå®³æ¯”例ä¼?x¨¬)加大。而ä¸åˆ’分范围æ—Ó¼Œç è¡¨çš„å»é‡å¤æœºåˆ¶ä¼?x¨¬)有更大作用åQŒæ— æ•ˆèŠ‚ç‚¹è¿æˆç‰‡åQŒæŸå®Ïx¯”例凮。å之,ŒDµè½å¢å¤§åQŒèŒƒå›´é‡Œæœ‰æ•ˆèŠ‚ç‚¹å¯†åº¦å¤§ï¼ŒæŸå®³æ¯”例é™ä½åQŒè€Œä¸åˆ’分范围æ—Ó¼Œæ— æ•ˆèŠ‚ç‚¹å¯èƒ½æ— æ³•大片˜qæ¥åQŒå»é‡å¤æœºåˆ¶çš„æ•ˆç”¨é™ä½ï¼ŒæŸå®³æ¯”例å¢å¤§ã€?br />  ç”׃ºåˆ’分范围能ä‹É huffman æ ?w¨¨i)çš„èŠ‚ç‚¹ä»æœ€å¤?32k å‡åˆ°ä¸èƒö 320 个,ä»è€Œä‹Éå‹ç¾ƒé€Ÿåº¦æ˜¾è‘—改善。综上所˜qͼŒŒDµè½®ï¼ˆæ¯”如ä¸åˆ° 10kåQ‰ï¼Œä¸å®œåˆ’分范围åQŒå¦åˆ™åˆ’分范围是有益的ã€?/div>
™å‰™ƒ¨

 
å‘表äº?2006-3-3 14:50  资料短消æ?/a> 
3.4 对ç è¡¨è¿›è¡Œç¬¬äºŒæ¬¡å‹ç¾ƒã€?br />  目å‰ä¸ºæ­¢åQŒç è¡¨ä¸­åªéœ€è¦ä¿å­˜å„个节点绘q?huffman ¾~–ç å的新编ç çš„ç é•¿ã€‚共两棵æ ?w¨¨i),l_tree: 256 个åŸå§‹å­—节值加 29 个长度范围值加 1 个段è½ä¸­æ­¢ç¬¦åQŒå…± 286 个节点,ŒDµè½ä¸­æ­¢½W¦ç”¨æ¥åœ¨è§£å‹æ—¶æ ‡½CŞZ¸€ä¸ªæ®µè½çš„¾lˆç»“。d_tree: 30 个跼›»èŒƒå›´å€¹{€‚也®±æ˜¯è¯ß_(d¨¢)¼Œå…±éœ€è¦ä¿å­?286 + 30 = 316 个编ç çš„ç é•¿ã€‚gzip é™åˆ¶ huffman æ ?w¨¨i)的最大层æ•îCØ“(f¨´) 15åQŒè¿™æ øP¼Œç é•¿®±æœ‰ 0 åQ?15 å…?16 ¿Uå€û|¼Œå†åŠ ä¸Šå‰é¢ä»‹¾l过的å»é‡å¤æœºåˆ¶ä½¿ç”¨çš?3 ¿U特ŒDŠå€û|¼Œå…?19 ¿Uå€û|¼Œå¦‚朮Şp¿™æ ·ä¿å­˜ç è¡¨çš„è¯ï¼Œæ¯ä¸ªç é•¿éƒ½éœ€è¦?5 ä½ï¼Œæ‰èƒ½è¡¨ç¤º 19 ¿U倹{€‚我们观察一下,316 个ç é•¿ï¼Œä¸€å…±åªæœ?19 ¿Uå€û|¼Œç é•¿å€¼çš„é‡å¤æ˜¯å¿…ç„¶çš„åQŒè€Œä¸”ç”׃º huffman æ ?w¨¨i)上æ¯å±‚的节ç‚Ò?gu¨©)•°ä¸åŒåQŒæ‰€ä»¥å„个ç é•¿å€¼çš„频ç‡ä¹Ÿä¸ä¸€æ —÷€‚所以还å¯ä»¥ä¸ø™¿™ 19 ¿U值å†å»?huffman æ ?w¨¨i),˜q›è¡Œ½W¬äºŒ‹Æ¡ç¼–ç ã€‚è¿™‹‚‰| ‘(w¨¨i)åªæœ‰ 19 个节点,é™åˆ¶å®ƒçš„层数ä¸?0 åQ?7åQŒå¯ä»¥ç”¨ 3 ä¸?bit 表示˜q?19 个节点的“长度â€ã€‚è¿™æ øP¼Œç”¨æ–°çš„“ç é•¿çš„¾~–ç â€æ¥ä¿å­˜ 316 个ç é•¿ï¼Œå¦éœ€é¢å¤–ä¿å­˜ 3 * 19 = 57 bitåQŒå°±å¯ä»¥è§£å‹å‡ø™¿™ 19 个“ç é•¿çš„¾~–ç â€ã€‚(至亘q?57 bitåQŒå°±æ²¡æœ‰å¿…è¦å†ä½œ½W?3 ‹Æ¡ç¼–ç äº†åQ?br />

4. 解决了ç è¡¨çš„问题åQŒç°åœ¨å†å›è¿‡å¤´æ¥çœ‹é™æ€ç¼–ç ã€?br />ã€€ã€€é™æ€ç¼–ç æ˜¯ gzip 预先讑֮šçš„ç¼–ç æ–¹æ¡ˆï¼Œå®ƒçš„ç è¡¨æ˜¯å›ºå®šçš„ã€?br />  该如何åˆç†è®¾è®¡è¿™å¥—ç¼–ç ï¼Ÿä½œäØ“(f¨´) huffman ¾~–ç çš„补助,它的耗时应尽é‡å°‘åQŒå‰é¢è¯´˜q‡ï¼Œlz77 输出一个分ŒDµä¹‹å‰ï¼Œè¦æ¯”è¾?huffman ¾~–ç å’Œé™æ€ç¼–ç çš„å‹ç¾ƒ¾l“æœåQŒäØ“(f¨´)了直æ¥åˆ©ç”?lz77 输出时åšçš„匹é…长度范围ã€åŒ¹é…è·¼›»èŒƒå›´çš„频ç‡çš„ç»Ÿè®¡ï¼Œé™æ€ç¼–ç é‡‡ç”¨äº†åŒæ ·çš„范å›ß_(d¨¢)¼é™„加ç çš„æ–Ò(gu¨©)¡ˆåQŒè¿™æ ·å¯ä»¥å¿«é€Ÿå¾—åˆ°é™æ€ç¼–ç çš„å‹ç¾ƒ¾l“æœå¤§å°ã€?br />ã€€ã€€é™æ€ç¼–ç çš„ç é•¿çš„åˆ†é…æ˜¯˜q™æ ·çš„:(x¨¬)29 个长度范围中å‰?24 个范围的ç é•¿ä¸?7åQŒå 5 个范围的ç é•¿ä¸?。åŸå§‹å­—节å€ég¸­ 0 åQ?143 çš„ç é•¿äØ“(f¨´) 8åQ?44 åQ?255 çš„ç é•¿äØ“(f¨´) 9。è€?30 个跼›»èŒƒå›´çš„ç é•¿ä¸?5。根æ®è¿™äº›é¢„先设定的ç é•¿å»ºç«‹é™æ€çš„ l_tree å’?d_treeåQŒç¼–ç ä¹Ÿ®×ƒñ”生了。结åˆå‰é¢æåˆ°çš„附加ç ä½æ•°çš„定义åQ?br />29 个长度范围的附加ç ä½é•¿ï¼š(x¨¬)
{0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
30 个跼›»èŒƒå›´çš„附加ç ä½é•¿ï¼š(x¨¬)
{0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
读者å¯ä»¥çŸ¥é“æ¯ä¸€ä¸ªå€¼çš„å®é™…ç é•¿ã€‚长度范围值和åŸå§‹å­—节值å¾åœ¨ä¸€‹‚‰| ‘(w¨¨i)上,节点多所以ç é•¿è¾ƒé•¿ï¼Œ30 个跼›»èŒƒå›´å€¼åªéœ€è¦?5 ä½äºŒ˜q›åˆ¶æ•°è¡¨½Cºã€‚短匚w…的长度范围å€ég½é•¿è¾ƒçŸ­ï¼Œå­—节å€?0 åQ?143 çš„ä½é•¿ä¸­½{‰ï¼Œå…¶ä»–字节值和长匹é…çš„é•¿åº¦èŒƒå›´å€ÆD¾ƒé•Ñ€‚è¿™æ ïL(f¨¥ng)š„分é…åæ˜ äº?gzip ä½œè€…å¯¹â€œå¤§å¤šæ•°â€æ–‡ä»¶ä¸­å„ç§å€¼çš„频ç‡çš„ç²—ç•¥ä¼°è®¡ã€‚ä½œä¸ŞZ¸€ä¸ªé€šç”¨çš„勾~©ç®—法,无法预先知é“一个文件的å®é™…情况åQŒä¸å¯èƒ½åšç²¾¼‹®çš„估计ã€?br />  ˜q›ä¸€æ­¥çš„æ€è€ƒï¼š(x¨¬)陿€ç¼–ç æœ‰å¿…è¦å—ï¼Ÿé™æ€ç¼–ç é‡‡ç”¨äº†å’?huffman ¾~–ç ç›¸åŒçš„范å›ß_(d¨¢)¼é™„加ç çš„æ–Ò(gu¨©)¡ˆåQŒåœ¨ç é•¿çš„分é…上ä¸å¯èƒ½è¶…˜q?huffman ¾~–ç åQŒå¦‚æœèƒ½â€œè·èƒœâ€ï¼Œé‚£å°±æ˜¯èƒœåœ¨ä¸éœ€è¦ä¿å­˜ç è¡¨ä¸ŠåQŒè€Œå‰é¢åˆ†æè¿‡åQŒç è¡¨æ˜¯å¾ˆå°çš„,对勾~©ç‡æ²¡æœ‰å¤šå¤§å½±å“åQŒæ‰€ä»?gzip è®¾è®¡çš„è¿™ä¸ªé™æ€ç¼–ç æ–¹æ¡ˆåº”è¯¥æ˜¯å¯æœ‰å¯æ— çš„ã€?br />
5. å…³äºå †æ’åºç®—法ã€?br />  ä¼ég¹å·²ç»è§£å†³äº†æ‰€æœ‰çš„éšùN¢˜åQŒä½†æ˜¯å¯¹äºæ²¡æœ‰å­¦˜q‡æ•°æ®ç»“æ„的读者,ä»ç„¶æœ‰ä¸€ä¸ªä¼š(x¨¬)å¯¹ç¨‹åºæ•ˆç‡äñ”生媄å“的问题需è¦å…³æ³¨ï¼Œé‚£å°±æ˜¯â€œæ’åºâ€ã€?br />  已ç»è®²è¿‡åQŒhuffman ½—法®±æ˜¯ä»ä¸€ä¸ªèŠ‚ç‚¹åºåˆ—中åQŒä¸æ–­æ‰¾å‡ŞZ¸¤ä¸ªæœ€®çš„节点åQŒäØ“(f¨´)å®ƒä»¬å»ŞZ¸€ä¸ªçˆ¶èŠ‚ç‚¹åQŒå€égØ“(f¨´)˜q™ä¸¤ä¸ªèŠ‚ç‚¹ä¹‹å’Œï¼Œç„¶åä»èŠ‚ç‚¹åºåˆ—中å»é™¤˜q™ä¸¤ä¸ªèŠ‚ç‚¹ï¼ŒåŠ å…¥å®ƒä»¬çš„çˆ¶èŠ‚ç‚¹åˆ°åºåˆ—中åQŒä¸æ–­é‡å¤è¿™æ ïL(f¨¥ng)š„æ­¥éª¤åQŒç›´åˆ°èŠ‚ç‚¹åºåˆ—中åªå‰©ä¸‹ä¸€ä¸ªèŠ‚ç‚V€‚如何快速地扑ևºæœ€®çš„元素呢?
  在普通的¾U¿æ€§ç½—列的数殾l“æ„中,ä»?N 个元素中扑ևºæœ€®çš„元素的时间和 N æˆæ­£æ¯”ï¼Œå¦‚æœæ•°æ®ä»¥æˆ‘们所è¦ä»‹¾l的“堆â€çš„¾l“æ„存储åQŒæ—¶é—´å’Œ lg N æˆæ­£æ¯”(注:(x¨¬)lg ä»?2 为底æ•ͼŒå¦?lg 256 = 8åQŒlg 1024 = 10 ...åQ‰ã€?集åˆä¸­çš„元素­‘Šå¤šåQŒå †æ’庽—法的优势越½H出åQŒè€Œä¸”å †æ’åºé帔R€‚åˆäºåœ¨æ•°æ®åºåˆ—䏭䏿–­åœ°å–走最®çš„元素òq¶åŠ å…¥æ–°çš„å…ƒç´ ã€?br />
5.1 什么是堆?
  堆首先是一‹‚µâ€œå®Œå…¨äºŒå‰æ ‘(w¨¨i)â€ï¼ŒåÏx‰€æœ‰çš„å¶å­èŠ‚ç‚¹éƒ½åœ¨æ ?w¨¨i)的最ä½äºŒå±‚,最ä½ä¸€å±‚çš„èŠ‚ç‚¹ä¾æ¬¡é å·¦æ’åˆ—çš„äºŒå‰æ ‘(w¨¨i)。如图:(x¨¬)

ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€ã€€å®Œå…¨äºŒå‰æ ?br />                         ï½?br />              åQ‹ï¼åQï¼åQï¼åQï¼åQï¼åQâ—‹åQï¼åQï¼åQï¼åQï¼åQï¼åQ?br />              |                     ï½?br />      åQ‹ï¼åQï¼åQï¼åQï¼â—‹ï¼åQï¼åQï¼åQ+          åQ‹ï¼åQï¼â—‹ï¼åQï¼åQ?br />      |              |          |       ï½?br />  åQ‹ï¼åQï¼â—‹ï¼åQï¼åQ‹ã€€ã€€ã€€ã€€ã€€ã€€åQ‹ï¼åQï¼â—‹ï¼åQï¼åQ‹ã€€ã€€ã€€ã€€åQ‹ï¼â—‹ï¼åQ‹ã€€ã€€ã€€åQ‹ï¼â—‹ï¼åQ?br />  |       |      |       |    |   |   |   ï½?br />åQ‹ï¼â—‹ï¼åQ‹ã€€ã€€ã€€åQ‹ï¼â—‹ï¼åQ‹ã€€ã€€åQ‹ï¼â—‹ï¼åQ‹ã€€ã€€ã€€åQ‹ï¼â—‹ï¼åQ‹ã€€ã€€â– ã€€ã€€ã€€â– ã€€ã€€ã€€â– ã€€ã€€ã€€â–?br />|   |   |   |  |   |   |   ï½?br />■   ■   ■   ■  ■   ■   ■   â–?br />

  堆分大根堆和®æ ¹å †ï¼Œå¤§æ ¹å †çš„æ‰€æœ‰å­èŠ‚ç‚¹éƒ½å°äºå®ƒçš„父节点åQŒå°æ ¹å †çš„æ‰€æœ‰å­èŠ‚ç‚¹éƒ½å¤§äºå®ƒçš„父节点。下é¢å°±æ˜¯ä¸€ä¸ªå°æ ¹å †åQ?br />
                         ®æ ¹å ?br />                          ï½?br />              åQ‹ï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQ’ï¼åQï¼åQï¼åQï¼åQï¼åQ+
              |                      ï½?br />      åQ‹ï¼åQï¼åQï¼åQï¼åQ“ï¼åQï¼åQï¼åQ+          åQ‹ï¼åQï¼åQ8åQï¼åQ+
      |              |          |        ï½?br />  åQ‹ï¼åQï¼åQ–ï¼åQï¼åQ‹ã€€ã€€ã€€ã€€ã€€ã€€åQ‹ï¼åQï¼åQ”ï¼åQï¼åQ‹ã€€ã€€ã€€ã€€åQ‹ï¼åQ‘5åQ+   åQ‹ï¼åQ‘8åQ+
  |       |      |       |    |    |   |    ï½?br />åQ‹ï¼åQ˜ï¼åQ‹ã€€ã€€ã€€åQ‹ï¼åQ™ï¼åQ‹ã€€ã€€åQ‹ï¼åQ•ï¼åQ‹ã€€ã€€ã€€åQ‹ï¼åQ•ï¼åQ‹ã€€ã€€åQ‘6  åQ’ï¼ã€€ã€€ã€€åQ‘9   åQ’ï¼
|   |   |   |  |   |   |   ï½?br />åQ™ã€€ã€€ã€€åQ™ã€€ã€€åQ‘1  åQ‘3  åQ–   åQ˜ã€€ã€€ã€€åQ–   åQ?br />
5.2 堆如何在内存中存储?
  堆存攑֜¨ä¸€ä¸ªæ•°¾l„中åQŒå­˜æ”„¡š„™åºåºæ˜¯ï¼š(x¨¬)仿 ¹å¼€å§‹ï¼Œä¾æ¬¡å­˜æ”¾æ¯ä¸€å±‚ä»å·¦è‡³å³çš„节点ã€?br />5.3 如何å¯ÀL‰¾ä»ÀL„节点的å­èŠ‚ç‚¹å’Œçˆ¶èŠ‚ç‚¹åQ?br />  数组中第 k 个元素,它的左å­èŠ‚ç‚¹æ˜¯ç¬¬ 2k 个元素,å›_­èŠ‚ç‚¹æ˜¯ç¬¬ 2k + 1 个元素。它的父节点是┖ k/2 ┚(注:(x¨¬)â”?X ┚表½Cºå°äºç­‰äº?X 的最大整æ•ͼ‰ã€?br />5.4 如何建立堆?
  先把 n 个元素例ơ放入数¾l„中åQŒä×o(h¨´)å˜é‡ k = â”?n/2 ┚,˜q™æ—¶½W?k 个元素是最å一个元素的父节点,ä»ç¬¬ k 个元素的两个å­èŠ‚ç‚¹ä¸­æ‰‘Ö‡ºè¾ƒå°çš„ä¸€ä¸ªä¸ k 元素比较åQŒå¦‚æœå°äº?k 元素åQŒå°±å’?k 元素交æ¢ä¸€ä¸‹ä½¾|®ï¼Œæ¢ä½åçš„åŸå…ˆçš?k 元素å†å’Œæ–°çš„å­èŠ‚ç‚Ò(gu¨©)¯”è¾ƒï¼ˆå¦‚æœæœ‰å­èŠ‚ç‚¹çš„è¯åQ‰ï¼Œç›´åˆ°å®ƒä¸å†å°äºæ–°çš„å­èŠ‚ç‚¹æˆ–æ²¡æœ‰å­èŠ‚ç‚¹ã€‚ä×o(h¨´) k = k - 1。å†é‡å¤ä¸Šé¢çš„åšæ³•ç›´åˆ?k < 1åQŒä¸€ä¸ªå †®±å¾æˆäº†ã€?br />5.5 如何ä»å †ä¸­æ‰¾å‡ºç¬¬äºŒä¸ªæœ€®çš„元素åQ?br />  把堆中第一个元素(最®çš„元素åQ‰å­˜æ”‘Öˆ°å…¶ä»–地方åQŒæŠŠ½W?n 个元素(最å一个)攑ֈ°½W¬ä¸€ä¸ªçš„ä½ç½®åQŒå†ç”¨å‰é¢çš„æ–Ò(gu¨©)³•和下层节点交æ¢ç›´åˆ°å®ƒæ”‘Öˆ°åˆé€‚çš„ä½ç½®åQŒè¿™æ—¶æ•°¾l„ä»ç„¶æ˜¯ä¸€ä¸ªå †åQŒç¬¬ä¸€ä¸ªå…ƒç´ æ˜¯æœ€®çš„节点åQŒæ•°¾l„的最å一个有效节ç‚Ò(gu¨©)˜¯½W?n - 1 个元素ã€?br />ã€€ã€€èŠŞp´¹çš„æ—¶é—´å’Œäº¤æ¢çš„æ¬¡æ•°æˆæ­£æ¯”åQŒæœ€å¤§çš„å¯èƒ½çš„äº¤æ¢æ¬¡æ•°æ˜¯åQ?堆的层数 - 1 =â”?lg (元素æ•?+ 1) â”? 1åQˆæ³¨åQšâ” X ┒表½Cºå¤§äºç­‰äº?X 的最®æ•´æ•ͼ‰ã€?br />  ç°åœ¨å¯ä»¥çœ‹åˆ°åQŒå †ä¹‹æ‰€ä»¥é‡‡ç”¨å®Œå…¨äºŒå‰æ ‘(w¨¨i)çš„åÅå¼ï¼Œæ˜¯äØ“(f¨´)了树(w¨¨i)的层数尽å¯èƒ½®‘ã€?br />  而抽出最å一个元素放到树(w¨¨i)æ ¹ï¼Œè€Œä¸æ˜¯æŠ½å‡ºç¬¬äºŒå±‚çš„å…ƒç´ ï¼Œæ˜¯äØ“(f¨´)了维æŒå®Œå…¨äºŒå‰æ ‘(w¨¨i)的结æ„ï¼
5.6 如何加入新的元素到堆中?
  把第一个元素存攑ֈ°å…¶ä»–地方åQŒæŠŠæ–°çš„元素攑ֈ°½W¬ä¸€ä¸ªçš„ä½ç½®åQŒå†ç”¨å‰é¢çš„æ–Ò(gu¨©)³•和下层节点交æ¢ï¼Œç›´åˆ°å®ƒè¢«æ”‘Öˆ°åˆé€‚çš„ä½ç½®åQŒæ­¤æ—¶æ•°¾l„中ä»ç„¶æ˜¯ä¸€ä¸ªå †ã€?br />
6. å»?huffman æ ?w¨¨i)å’Œ¾~–ç çš„算法:(x¨¬)
  如æœç°åœ¨æœ?n 个待¾~–ç çš„节点,按照åŸå§‹æ•°å€ég»®åˆ°å¤§å­˜æ”‘Öœ¨æ•°ç»„ tree[n] 中,那么åQŒå°†è¦å¾ç«‹çš„ huffman æ ?w¨¨i)æ€Õd…±ä¼?x¨¬)æœ?2n -1 节点åQŒåŒ…括å¶å­èŠ‚ç‚¹å’Œéå¶å­èŠ‚ç‚V€‚申请一å—å†…å­˜ï¼Œå¤§å°æ˜¯èƒ½æ”¾ä¸‹ huffman æ ?w¨¨i)的所有节点,先把 n 个待¾~–ç èŠ‚ç‚¹æ”‘Ö…¥˜q™å—内存的左端,然å用“堆æ’åºâ€ç®—æ³•å…ˆæŠŠå®ƒä»¬å¾æˆä¸€ä¸ªå †ã€?br />  然å䏿–­ç”¨â€œå †æ’åºâ€ç®—法å–å‡ºé¢‘ç‡æœ€®çš„节点åQŒæŠŠå®ƒä»¬ä»å³åˆ°å·¦ã€ä»®åˆ°å¤§æ’攑֜¨å†…å­˜å—çš„å³ç«¯åQŒæ¯å½“å–å‡ŞZ¸¤ä¸ªèŠ‚ç‚¹ï¼Œ¾l™å®ƒä»¬ç”Ÿæˆä¸€ä¸ªçˆ¶èŠ‚ç‚¹åQŒé¢‘ç‡ç­‰äºå®ƒä»¬ä¹‹å’Œï¼ŒåŠ å…¥å †ä¸­ã€‚è¿™æ ïL(f¨¥ng)›´åˆ°å †ä¸­åªå‰©ä¸‹ä¸€ä¸ªæ ¹èŠ‚ç‚¹åQŒè¿™æ—Ó¼Œå†…存中ä»å·¦åˆ°å›_­˜å‚¨çš„æ˜¯é¢‘ç‡ä»å¤§åˆ°®çš„æ‰€æœ‰èŠ‚ç‚¹ï¼Œä¸€‹‚?huffman æ ?w¨¨i)å…¶å®ä¹Ÿ®±å¾æˆäº†åQŒå±‚æ•°å°çš„节点在å‰ï¼Œå±‚数大的节点在ååQŒæ¯ä¸€å±‚çš„èŠ‚ç‚¹åˆæ˜¯æŒ‰é¢‘ç‡ä»å¤§åˆ°®ä¾‹Æ¡æ’列ã€?br />  甌™¯·ä¸¤ä¸ªæ•°ç»„åQšbl_count[]åQŒbl_base[]。置根节点的ç é•¿ä¸?0åQŒä»å·¦è‡³å»I¼Œæ‰€æœ‰èŠ‚ç‚¹çš„ç é•¿(len)为它的父节点的ç é•?+ 1åQŒå¦‚æœæ˜¯å¶å­èŠ‚ç‚¹åQŒbl_count[len]++åQŒå¾—åˆîCº†æ¯ä¸€å±‚上的å¶å­èŠ‚ç‚Ò(gu¨©)•°ç›®ã€‚ä×o(h¨´)å˜é‡ code = 0åQŒç„¶åæ ¹æ?bl_count[] ç”Ÿæˆ bl_base[]åQšç é•?len ä»?1 开始递å¢åQŒbl_base[len] = code = (code + bl_count[len - 1]) << 1åQŒå¾—åˆîCº†æ¯ä¸€å±‚上½W¬ä¸€ä¸ªå¶å­èŠ‚ç‚¹çš„¾~–ç ã€?br />  ç°åœ¨æ‰€æœ‰å¾…¾~–ç èŠ‚ç‚¹éƒ½è¢«èµ‹äºˆäº†ç é•¿ï¼Œéå†å¾…ç¼–ç èŠ‚ç‚¹ï¼Œæ Ò(gu¨©)®å®ƒä»¬çš„ç é•¿å¾—到它们的¾~–ç åQšåºå?n 递å¢åQŒtree[n].code = bl_base[ tree[n].len ] ++ã€?br />  注æ„åQšæˆ‘ä»¬å‰é¢è®¨è®ºç è¡¨çš„æ—¶å€™è¯´˜q‡ï¼Œgzip å¯?huffman ¾~–ç ˜q›è¡Œäº†æ”¹˜q›ï¼Œåªéœ€è¦å¾—到æ¯ä¸€ä¸ªå¶å­èŠ‚ç‚¹ï¼ˆå¾…ç¼–ç èŠ‚ç‚¹ï¼‰çš„ç é•¿ï¼Œ®±å¯ä»¥è¿›è¡Œç¼–ç ï¼Œè€Œä¸éœ€è¦å…³å¿ƒå®ƒçš„çˆ¶èŠ‚ç‚¹çš„ç¼–ç æ˜¯ä»€ä¹ˆã€‚而ä¿å­˜ç è¡¨æ—¶åQŒåªéœ€è¦ä¿å­˜ç é•Ñ€?br />
动æ€?huffman å‹ç¾ƒå’Œè§£å‹çš„æ•´ä¸ª‹¹ç¨‹åQ?br />å‹ç¾ƒåQ?br />  lz77 的勾~©è¿‡½E‹ä¸­è¾“出未匹é…çš„å•åŒå­—节åQŒå’ŒåŒšw…åQŒåƈ¾lŸè®¡å„字节值和匚w…长度范围ã€åŒ¹é…è·¼›»èŒƒå›´çš„频ç‡åQŒæ ¹æ®è¿™äº›é¢‘ç‡å¾ç«‹ä¸¤‹‚?huffman æ ?w¨¨i)ï¼?x¨¬)ltreeã€dtreeåQŒå¾—到这两棵æ ?w¨¨i)上所有节点的长度和编ç ã€?br />  ¾lŸè®¡˜q™ä¸¤‹‚‰| ‘(w¨¨i)节点长度的ä‹É用频ç‡ï¼Œå¯¹å„节点长度建立 huffman æ ?w¨¨i)ï¼?x¨¬)bl_treeåQŒå¾—åˆ?bl_tree 的长度和¾~–ç ã€?br />  存储 bl_tree 的节炚w•¿åº¦æ•°¾l„ã€?br />  å†ç”¨ bl_tree 的编ç å­˜å‚?ltreeã€dtree 的节炚w•¿åº¦æ•°¾l„ã€?br />  å†ç”¨ ltree 的编ç å­˜å‚¨å„字节值和匚w…长度范围åQˆåŠ(qi¨¢ng)附加ç ï¼‰çš„æµåQ›ç”¨ dtree 的编ç å­˜å‚¨åŒ¹é…è·¼›»èŒƒå›ß_(d¨¢)¼ˆå?qi¨¢ng)附加ç åQ‰çš„‹¹ã€?br />è§£å‹åQ?br />  先根æ?bl_tree 的节炚w•¿åº¦æ•°¾l„å¾—åˆ?bl_tree 的编ç ã€?br />  å†ç”¨˜q™äº›¾~–ç å¾—到 ltreeã€dtree 的节炚w•¿åº¦æ•°¾l„,˜q›è€Œå¾—åˆ?ltreeã€dtree 的编ç ã€?br />ã€€ã€€å†æ ¹æ?ltreeã€dtree 的编ç åŠ(qi¨¢ng)附加ç çš„定义åQŒå¾—åˆ?lz77 的输出的åŸå§‹¾l“æœåQšå„字节值和匚w…长度的æµåQŒåŒ¹é…è·¼›Èš„‹¹ã€?/div>
 
 
å‘表äº?2006-3-3 14:50  资料短消æ?/a> 
åè®°åQ?br />ã€€ã€€å†™ä½œæœ¬æ–‡èŠŞp´¹äº†è¶…˜q‡ä¸€òq´çš„业余旉™—´åQŒå…¶å®çœ‹æ‡?gzip æºç åªç”¨äº†ä¸€ä¸ªåŠæœˆçš„业余旉™—´åQŒç­‰çœŸæ­£å¼€å§‹å†™˜q™ç¯‡æ–‡ç« çš„æ—¶å€™ï¼Œå‘ç°æ·±å…¥åˆ†ææ— æŸå‹ç¾ƒ½—æ³•è¦æŠ•å…¥çš„å¿ƒåŠ›ä¼?x¨¬)远­‘…è¿‡æˆ‘åŸæ¥çš„æƒŒ™±¡åQŒä¸æ˜¯å…‰é â€œæ¯…然决然的æ€åº¦â€å’Œâ€œæ‹¼æç²¾¼œâ€å°±å¯ä»¥å®Œæˆçš„ã€‚åªæœ‰è€å¿ƒåœ°å»ä»˜å‡ºã€?br />  ¾l过了一òq´å¤šçš„æ—¶é—ß_(d¨¢)¼Œ¾lˆäºæœ‰äº†ç°åœ¨˜q™æ ·è´¨é‡çš„è¿™½‹‡æ–‡ç« ã€‚这期间åQŒæˆ‘的工作已¾lä»åº”用工程师è{å˜åˆ°äº†ç ”½I¶å‘˜åQŒåº”该说åQŒå†™ä½œè¿™½‹‡æ–‡ç« å¯¹ä¿ƒæˆæˆ‘把今å的工作è{å˜äØ“(f¨´)æç ”½I¶æ˜¯æœ‰åª„å“的。所以这½‹‡æ–‡ç« å¯¹æˆ‘è‡ªå·Şqš„人生é“èµ\当然是有é‡è¦çš„æ„ä¹‰ï¼Œæˆ‘ä¹Ÿå¸Œæœ›å®ƒä¼š(x¨¬)促æˆè¯»è€…投íw«ç ”½I¶çš„军_¿ƒã€?br />  巴甫‹z›å¤«è¯ß_(d¨¢)¼š(x¨¬)“科学研½I‰™œ€è¦çš„æ˜¯ä¼Ÿå¤§çš„热情和艰苦的劳作â€ï¼Œä»çœ‹åˆ°è¿™å¥è¯èµøP¼Œæˆ‘就一直很喜欢它,常常ä¼?x¨¬)想赯‚¿™å¥è¯ã€‚希望这½‹‡æ–‡ç« èƒ½ä½¿è¯»è€…è”æƒ›_ˆ°â€œé•¿ä¹…的热情和è€å¿ƒçš„劳作â€ï¼Œòq¶åœ¨ç”Ÿæ´»å’Œå·¥ä½œä¸­è´¯å½»˜q™ç§¾_„¡¥ã€?br />  一½‹‡æ–‡ç« å‘布以å,它的全部价值就在äºè¯»è€…的阅读åQŒæ„Ÿè°¢è¯»è€…诸å›ã€?/div>


sea 2006-11-17 16:27 å‘表评论
]]>
Java中文处ç†å­¦ä¹ (f¨¤n)½W”记——Hello Unicode(转帖)http://www.shnenglu.com/nchsea/archive/2006/11/07/14827.htmlseaseaTue, 07 Nov 2006 14:46:00 GMThttp://www.shnenglu.com/nchsea/archive/2006/11/07/14827.htmlhttp://www.shnenglu.com/nchsea/comments/14827.htmlhttp://www.shnenglu.com/nchsea/archive/2006/11/07/14827.html#Feedback0http://www.shnenglu.com/nchsea/comments/commentRss/14827.htmlhttp://www.shnenglu.com/nchsea/services/trackbacks/14827.html阅读全文

sea 2006-11-07 22:46 å‘表评论
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            ¾Ã¾Ã±¾µÀ×ÛºÏÉ«ºİºİÎåÔÂ| ÑÇÖŞ¾«Æ·ÔÚÏßÊÓÆµ| Å·ÃÀ¾Ã¾Ã³ÉÈË| ¾Ã¾Ã¹ú²ú¾«Æ·99¹ú²ú| Ò»±¾¾Ã¾Ã×ÛºÏ| Å·ÃÀ¸£ÀûµçÓ°Íø| ¾Ã¾Ã¾Ã¾Ã¾Ã¾ÃÍøÕ¾| ÑÇÖŞ×ÛºÏÈÕº«| av³ÉÈË»ÆÉ«| ÔÚÏß¹Û¿´ÈÕº«¾«Æ·| ¹ú²úÎçÒ¹Ò»Çø¶şÇøÈıÇø| Å·ÃÀÎŞÂÒÂë¾Ã¾Ã¾ÃÃâ·ÑÎçÒ¹Ò»Çø| ¾Ã¾Ã×ÛºÏÎåÔÂ| Ïã½¶³ÉÈËÒÁÊÓÆµÔÚÏß¹Û¿´| 99¹ú²ú¾«Æ·¹ú²ú¾«Æ·Ã«Æ¬| ÑÇÖŞµçÓ°ÔÚÏß| ¾Ã¾Ãҹɫ¾«Æ·¹ú²úÅ·ÃÀÂÒ| ĞÔÊÓÆµ1819p¾Ã¾Ã| ÑÇÖŞÊÓÆµÏã½¶ÈËÑı| ÈÕº«ÊÓÆµ¾«Æ·ÔÚÏß| ÑÇÖŞÅ·ÖŞ¾«Æ·Ò»Çø¶şÇø| ¹úÄÚ¾«Æ·ÊÓÆµÔÚÏß²¥·Å| ¹ú²úÅ·ÃÀÒ»Çø¶şÇø¾«Æ·Ïɲİßä | Å·ÃÀ¼¤Çé×ÔÅÄ| ¾Ã¾Ã×ÛºÏÉ«²¥ÎåÔÂ| ¾Ã¾ÃÂãÌåÊÓÆµ| ¾Ã¾Ã¾Ã999¾«Æ·Ãâ·Ñ| Ïã¸Û³ÉÈËÔÚÏßÊÓÆµ| ÎçÒ¹Ò»Çø¶şÇøÈıÇøÔÚÏß¹Û¿´| ÔÚÏßÊÓÆµÖĞÎÄÑÇÖŞ| ÖĞÎľþÃÂÒÂëÒ»Çø¶şÇø| ÑÇÖŞÃâ·Ñ¾Ã¾Ã| ÑÇÖŞÃ«Æ¬ÊÓÆµ| ÑÇÖŞÂÒÂ뾫Ʒһ¶şÈıËÄÇøÈÕº«ÔÚÏß | ¾Ã¾Ã¾Ãwww³ÉÈËÃâ·ÑëƬÂé¶¹| ÑÇÖŞÅ·ÃÀÁíÀà¹ú²ú| ÑÇÖŞÅ·ÃÀÈÕº«¹ú²ú¾«Æ·| ÑÇÖŞÒ»Çø¼¤Çé| ÑÇÖŞÅ·ÃÀ¿¨Í¨ÁíÀà91av| ÑÇÖŞÅ·ÃÀÔÚÏßÒ»Çø¶şÇø| ÑÇÖŞÅ·ÖŞavÒ»Çø¶şÇø| ÎçÒ¹¾«Æ·¾Ã¾ÃһţӰÊÓ| ÑÇÅ·ÃÀÖĞÈÕº«ÊÓÆµ| ¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã×ÛºÏɫһ±¾| ¾Ã¾ÃÇà²İÅ·ÃÀÒ»Çø¶şÇøÈıÇø| ¾Ã¾ÃÔÚÏß91| Å·ÃÀ¹ú²úÊÓÆµÔÚÏß¹Û¿´| Å·ÃÀ¾«Æ·³ÉÈËÔÚÏß| Å·ÃÀÈÕº«ÎçÒ¹| ¹ú²ú¾«Æ·ÀíÂÛÆ¬ÔÚÏß¹Û¿´| ¹ú²ú¾«Æ·Å·ÃÀÒ»ÇøÅçË®| ¹ú²úÇø¶ş¾«Æ·ÊÓ| ¾«Æ·¶¯ÂşÒ»Çø¶şÇø| ÑÇÖŞ¾­µäÔÚÏß¿´| Ò¹Ò¹àËavÒ»Çø¶şÇøÈıÇøÖĞÎÄ×ÖÄ»| Ò»Çø¶şÇøÈıÇø¾«Æ·| Å·ÃÀÒ»Çø¶şÇøÈÕº«Ò»Çø¶şÇø| ¾Ã¾Ã¾«Æ·Èı¼¶| Ãâ·ÑµÄ³ÉÈËav| ÑÇÖŞ¾«Æ·¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã| Ò»±¾É«µÀ¾Ã¾Ã×ÛºÏ| ÎçÒ¹¾«Æ·¾Ã¾Ã¾Ã¾Ã¾Ã¾ÃÃÛÌÒapp| ¾Ã¾Ã¹ú²ú¾«Æ·¾Ã¾Ã¾Ã| Å·ÃÀ³ÉÈËÃâ·ÑÔÚÏß| Å·ÃÀÉ«×ÛºÏÍø| ¹úÄÚÒ»Çø¶şÇøÈıÇøÔÚÏßÊÓÆµ| ÑÇÖŞ¸ßÇå¾Ã¾Ã¾Ã| ÑÇÖŞÌìÌÃÍøÕ¾ÔÚÏß¹Û¿´ÊÓÆµ| Å·ÃÀÔÚÏßÈÕº«| Å·ÃÀ¼¤ÇéÒ»¶şÇø| ÑÇÖŞÊÓÆµ×¨ÇøÔÚÏß| ¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾«| Å·ÃÀÈÕº«ÁíÀà¹ú²úÑÇÖŞÅ·ÃÀÒ»¼¶| ¹ú²ú¾«Æ·ÃÀÅ®Ò»Çø¶şÇø| Ò»Çø¶şÇøÔÚÏß¹Û¿´ÊÓÆµ| Ò»Çø¶şÇøÈıÇøÈÕº«| ¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾ÃÅ®¹ú²úÂÒ| Å·ÃÀ¸ßÇåÔÚÏßÊÓÆµ¹Û¿´²»¿¨| ÔÚÏßÊÓÆµÒ»Çø¶şÇø| ¾Ã¾Ã¾Ã¾Ã¹ú²ú¾«Æ·Ò»Çø¶şÇø| Å·ÃÀÈÕº«1080p| ¹ú²ú×Ô²ú2019×îв»¿¨| Ò»Çø¶şÇøavÔÚÏß| ¾Ã¾Ã¾Ã¾Ã¾Ã¹ú²ú¾«Æ·mv| ÑÇÖŞ¾«Æ·¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã| ÑÇÖŞÃâ·ÑÒ»¼¶µçÓ°| Å·ÃÀ¼¤ÇéÒ»Çø¶şÇøÈıÇøÈ«»Æ| ¹ú²úÄÛ²İÒ»Çø¶şÇøÈıÇøÔÚÏß¹Û¿´ | Å·ÃÀ¹ú²ú¾«Æ·ÈÕº«| ¹ú²úÅ·ÃÀÈÕº«×ÛºÏÒ»ÇøÔÚÏß¹Û¿´| ×îĞÂÈÕº«Å·ÃÀ| ¾Ã¾Ã¾«Æ·¹ú²ú³ÉÈË| 99¾«Æ·99| ÃÀÅ®Í¼Æ¬Ò»Çø¶şÇø| ¹ú²úÑÇÖŞ¾«Æ·³ÉÈËav¾Ã¾Ãww| 99ÊÓÆµÒ»Çø| Ãâ·Ñ¹Û¿´¹ú²ú³ÉÈË| ÑÇÖŞÒ»Çø¾Ã¾Ã¾Ã| Å·ÃÀ¾«Æ·vÈÕº«¾«Æ·v¹ú²ú¾«Æ·| ¹ú²úÔ­´´Ò»Çø¶şÇø| ÑÇÖŞÒ»Çø¾«Æ·ÊÓÆµ| ÑÇÖŞ¹ú²ú¸ßÇå¸ß³±¾«Æ·ÃÀÅ®| ÎçÒ¹ÈÕº«¼¤Çé| ¹ú²ú¾«Æ·¾Ã¾Ã¶şÇø| ÈÕº«ÎçÒ¹Ãâ·Ñ| Å·ÃÀ³ÉeeÈËÃâ·ÑÊÓÆµ| ĞÔÉ«avÒ»Çø¶şÇøÈıÇøÔÚÏß¹Û¿´ | ÑÇÖŞµÚÒ»Ò³×ÔÅÄ| ¾Ã¾ÃµçÓ°Ò»Çø| ¹ú²úÂÒ×ÓÂ×Ò»Çø¶şÇøÈıÇø¹úÉ«ÌìÏã| ÑÇÖŞ¾«Æ·Ò»Çø¶ş| ÀÏÉ«ÅúavÔÚÏß¾«Æ·| Å·ÃÀÒ»Çø¶şÇøÔÚÏß¿´| ¹ú²ú¾«Æ·¾Ã¾Ã¾Ã¾ÃëƬ´óƨÍêÕû°æ| ÑÇÖŞ¾«Æ·ÍøÖ·ÔÚÏß¹Û¿´| Å·ÃÀ ÑÇÅ· ÈÕº«ÊÓÆµÔÚÏß| ÎçÒ¹ÑÇÖŞ¾«Æ·| ¹ú²ú¾«Æ·ÏµÁĞÔÚÏß²¥·Å| ÑÇÖŞÎŞÑÇÖŞÈ˳ÉÍøÕ¾77777| ÑÇÖŞ¹ú²úÅ®ÈËaaaëƬÔÚÏß| ¾Ã¾Ã¾Ã¾ÃÅ·ÃÀ¾«Æ·| º«¹ú³ÉÈ˸£ÀûƬÔÚÏß²¥·Å| Å·ÃÀÖĞÈÕº«Ãâ·ÑÊÓÆµ| ÑÇÖŞÓ°ÔºÃâ·Ñ¹Û¿´| ¹ú²ú¾«Æ·ÈÕº«ÔÚÏß²¥·Å| ÑÇÖŞÓÈÎïÔÚÏß| Ò»Çø¶şÇøÈıÇøËÄÇø¹ú²ú¾«Æ·| Å·ÃÀÈÕº«ÃÀÅ®ÔÚÏß| Ò»Çø¶şÇøÈıÇøÅ·ÃÀÑÇÖŞ| ÑÇÖŞÃÀÅ®ÉÙ¸¾ÎŞÌמžÉëÒ÷| Å·ÃÀ¼¤ÇéÒ»Çø¶şÇø¾Ã¾Ã¾Ã| ÑÇÖŞ¾«Æ·Ãâ·ÑÒ»Çø¶şÇøÈıÇø| Å·ÃÀ¹ú²úÈÕº«Ò»Çø¶şÇø| ÁíÀഺɫУ԰ÑÇÖŞ| ÑÇÖŞ¼¤ÇéµÚÒ»Ò³| ÑÇÖŞ¹ú²úÈ˳É×ÛºÏÍøÕ¾| Å·ÃÀ¾«Æ·Ò»ÇøÊÓÆµ| ÖйúÈÕº«Å·ÃÀ¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã| ÑÇÖŞÈÕ±¾³ÉÈË| Å·ÃÀÆÆ´¦´óƬÔÚÏßÊÓÆµ| ÑÇÖŞÉî°®¼¤Çé| ÑÇÖŞÒ»Çø¶şÇøÔÚÏß| ¹ú²úÈÕ±¾Å·ÃÀÊÓÆµ| ¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã999| ¾Ã¾Ã¾ÃÎŞÂ뾫ƷÑÇÖŞÈÕº«°´Ä¦| ÒÁÈ˾þÃÑÇÖŞÃÀŮͼƬ| Å·ÃÀº«ÈÕÒ»Çø| Å·ÃÀÈÕº«ÊÓÆµ| ÎçÒ¹ÔÚÏß²»¿¨| ¾Ã¾Ã¹ú²ú¾«Æ·µçÓ°| 91¾Ã¾Ã¾«Æ·Ò»Çø¶şÇø±ğ| 91¾Ã¾Ã¾«Æ·ÃÀÅ®¸ß³±| Å·ÃÀÈÕº«Ò»Çø¶şÇøÈıÇøÃâ·Ñ¿´| ÑÇÖŞÅ·ÃÀ³ÉÈË| Å·ÃÀÒ»Çø¶şÇøÔÚÏß²¥·Å| ÑÇÖŞ¸£Àû¾«Æ·| 99¹ú²ú¾«Æ·¾Ã¾Ã¾Ã| ¹ú²úÅ·ÃÀÈÕº«ÑÇÖŞ¾«Æ·| Ãâ·ÑÈÕ±¾ÊÓÆµÒ»Çø| Å·ÃÀÃͽ»Ãâ·Ñ¿´| Å·ÃÀÒ»¼¶ÊÓÆµÃâ·ÑÔÚÏß¹Û¿´| Å·ÃÀÔÚÏß¶şÇø| ÑÇÖŞÈı¼¶Ó°Æ¬| ÑÇÖŞ×÷°®ÊÓÆµ| ¹úÄÚ¾«Æ·¹úÓï×Ô²úÅÄÔÚÏß¹Û¿´| Å·ÃÀ³ÉÈËÒ»¶şÈı| Å·ÃÀÈÕº«ÑÇÖŞÒ»Çø¶şÇø| ¾Ã¾Ã³ÉÈ˾«Æ·ÊÓÆµ| ¾Ã¾Ã¾ÃÑÇÖŞÅ·ÖŞÈÕ²ú¹úÂë¦Áv | ÑÇÖŞÉ«Í¼ÖÆ·şË¿Íà| ÎçÒ¹¾Ã¾Ã¾Ã¾Ã| ÑÇÖŞ¹ú²ú¾«Æ·¼¤ÇéÔÚÏß¹Û¿´| ÑÇÖŞÃâ·Ñav¹Û¿´| ¹ú²úÎçÒ¹¾«Æ·ÀíÂÛÆ¬a¼¶Ì½»¨| ÑÇÖŞ³ÉÈËÔÚÏßÊÓÆµ²¥·Å | ¹ú²úÅ·ÃÀÊÓÆµÒ»Çø¶şÇø| ÃÛÌҾþÃav| Å·ÃÀÊÓÆµÔÚÏß¹Û¿´ÊÓÆµ¼«Æ·| ¾Ã¾Ã¹ú²ú¾«Æ·ºÚË¿| Å·ÃÀ¹ú²úÂÒÊÓÆµ| Å·ÃÀÑÇÖŞÃâ·ÑÔÚÏß| Å·ÃÀwwwÔÚÏß| Ïã½¶¾Ã¾ÃaëƬ| Å·ÃÀ´Ö±©jizzĞÔÅ·ÃÀ20| ¾Ã¾ÃavÒ»Çø¶şÇøÈıÇø| Å·ÃÀ´óƬ18| ¾Ã¾ÃÇà²İ¾Ã¾Ã| ¹ú²ú¾«Æ·hd| Å·ÃÀ¹ú²úÔÚÏß¹Û¿´| ¹ú²úË¿ÍàÒ»Çø¶şÇøÈıÇø| ÑÇÖŞÈÕ±¾¾«Æ·¹ú²úµÚÒ»Çø| ¹ú²úÑÇÖŞÅ·ÃÀÈÕº«ÈÕ±¾| ÈÕº«ÎçÒ¹¼¤ÇéµçÓ°| Ò»Çø¶şÇøÈıÇøÖĞÎÄÔÚÏß¹Û¿´| Ò»Çø¶şÇøÅ·ÃÀÈÕº«ÊÓÆµ| ÑÇÖŞ¹ú²ú¾«Æ·ºÚÈ˾þþÃ| ĞÔÅ·ÃÀvideoÁíÀàhdĞÔÍæ¾ß| Ò»±¾É«µÀ¾Ã¾Ã×ۺϾ«Æ·Öñ¾Õ| ¾Ã¾Ã¾«Æ·¹ú²ú91¾«Æ·ÑÇÖŞ| ÑÇÖŞÔÚÏß¹Û¿´Ãâ·Ñ|