﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-&lt;a href="http://huangwei.pro"&gt;&lt;font color='red'&gt;WisKeyのLullaby&lt;/font&gt;&lt;/a&gt;</title><link>http://www.cppblog.com/huangwei1024/</link><description>&lt;a href="http://huangwei.pro"&gt;&lt;font color='red'&gt;huangwei.pro 『我失去了一只臂膀』「就睁开了一只眼睛」&lt;/font&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:40:24 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:40:24 GMT</pubDate><ttl>60</ttl><item><title>现代OpenGL教程 04 - 相机，向量，输入</title><link>http://www.cppblog.com/huangwei1024/archive/2015/09/01/modern-opengl4.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Tue, 01 Sep 2015 09:38:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2015/09/01/modern-opengl4.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/211736.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2015/09/01/modern-opengl4.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/211736.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/211736.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://huangwei.pro/2015-09/modern-opengl4/&nbsp;本篇教程中，我们会巩固上一篇所提到的矩阵和相机知识，并使用tdogl::Camera类来实现第一人称射击类型的相机。然后，我们会将相机与键盘和鼠标挂钩，使得我们可以移动和浏览3D场景。这里会学一些向量数学，还有上一篇没提到的逆矩阵。获取代码所有例子代码的zip打包可以从这里获取：https://git...&nbsp;&nbsp;<a href='http://www.cppblog.com/huangwei1024/archive/2015/09/01/modern-opengl4.html'>阅读全文</a><img src ="http://www.cppblog.com/huangwei1024/aggbug/211736.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2015-09-01 17:38 <a href="http://www.cppblog.com/huangwei1024/archive/2015/09/01/modern-opengl4.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>现代OpenGL教程 03 - 矩阵，深度缓冲，动画</title><link>http://www.cppblog.com/huangwei1024/archive/2015/08/14/211561.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Fri, 14 Aug 2015 09:03:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2015/08/14/211561.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/211561.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2015/08/14/211561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/211561.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/211561.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://huangwei.pro/2015-08/modern-opengl3/&nbsp;本文中，我会将不会动的2D三角形替换为旋转的3D立方体。你会看到这样的效果：&nbsp;现在我们终于能在屏幕上搞点有趣的东西了，我放了更多的动图在这里：http://imgur.com/a/x8q7R为了生成旋转立方体，我们需要学些关于矩阵的数学，用于创建透视投影，旋转，平移和&#8220;相机&#8...&nbsp;&nbsp;<a href='http://www.cppblog.com/huangwei1024/archive/2015/08/14/211561.html'>阅读全文</a><img src ="http://www.cppblog.com/huangwei1024/aggbug/211561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2015-08-14 17:03 <a href="http://www.cppblog.com/huangwei1024/archive/2015/08/14/211561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>现代OpenGL教程 02 - 贴图</title><link>http://www.cppblog.com/huangwei1024/archive/2015/08/06/211496.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Thu, 06 Aug 2015 12:17:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2015/08/06/211496.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/211496.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2015/08/06/211496.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/211496.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/211496.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://huangwei.pro/2015-08/modern-opengl2/&nbsp;在本文中，我们将给三角形加一个贴图，这需要在顶点和片段着色器中加入一些新变量，创建和使用贴图对象，并且学习一点贴图单元和贴图坐标的知识。本文会使用两个新的类到tdogl命名空间中：tdogl:Bitmap和tdogl:Texture。这些类允许我们将jpg，png或bmp图片上传到显存并用于着色器。t...&nbsp;&nbsp;<a href='http://www.cppblog.com/huangwei1024/archive/2015/08/06/211496.html'>阅读全文</a><img src ="http://www.cppblog.com/huangwei1024/aggbug/211496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2015-08-06 20:17 <a href="http://www.cppblog.com/huangwei1024/archive/2015/08/06/211496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏中的随机概率</title><link>http://www.cppblog.com/huangwei1024/archive/2015/07/27/211380.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Sun, 26 Jul 2015 17:20:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2015/07/27/211380.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/211380.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2015/07/27/211380.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/211380.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/211380.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://huangwei.pro/2015-07/game-random/这段时间公司开发的游戏上线测试，许多玩家在抽卡时抱怨脸黑，很难抽到所需要的卡牌，而又有一部分玩家反应运气好能连着抽到紫卡，检查了下随机相关逻辑代码，并没有找出问题所在，玩家运气好与坏只是觉得真有可能是概率原因。测试开服了几天之后，需要开放某个限时抽卡活动，在内部测试时，我们发现玩家反应的问题在限时抽卡中格外明显，尤其是...&nbsp;&nbsp;<a href='http://www.cppblog.com/huangwei1024/archive/2015/07/27/211380.html'>阅读全文</a><img src ="http://www.cppblog.com/huangwei1024/aggbug/211380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2015-07-27 01:20 <a href="http://www.cppblog.com/huangwei1024/archive/2015/07/27/211380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>现代OpenGL教程 01 - 入门指南</title><link>http://www.cppblog.com/huangwei1024/archive/2015/05/21/modern-opengl1.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Thu, 21 May 2015 06:11:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2015/05/21/modern-opengl1.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/210704.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2015/05/21/modern-opengl1.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/210704.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/210704.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://huangwei.pro/2015-05/modern-opengl1/modern-opengl译序早前学OpenGL的时候还是1.x版本，用的都是glVertex，glNormal等固定管线API。后来工作需要接触DirectX9，shader也只是可选项而已，跟固定管线一起混用着。现在工作内容是手机游戏，又转到OpenGL ES，发现OpenGL的世界已经完...&nbsp;&nbsp;<a href='http://www.cppblog.com/huangwei1024/archive/2015/05/21/modern-opengl1.html'>阅读全文</a><img src ="http://www.cppblog.com/huangwei1024/aggbug/210704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2015-05-21 14:11 <a href="http://www.cppblog.com/huangwei1024/archive/2015/05/21/modern-opengl1.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码阅读辅助工具</title><link>http://www.cppblog.com/huangwei1024/archive/2011/04/27/145147.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Wed, 27 Apr 2011 07:21:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2011/04/27/145147.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/145147.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2011/04/27/145147.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/145147.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/145147.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://blog.huang-wei.com/2011/04/27/read-source-tool/<br><br>做程序员的，每天要对着显示器上的行行代码<br>尤其是一份你从未写过、未读过的代码放在你的面前时，尼会感到似那样滴心力憔悴<br>这些还都算了，尼玛连个注释都没！！！文档呢！有木有啊！！<br>哥幼小的心灵在一大堆代码中接受着无数次的摧残~&nbsp;&nbsp;<a href='http://www.cppblog.com/huangwei1024/archive/2011/04/27/145147.html'>阅读全文</a><img src ="http://www.cppblog.com/huangwei1024/aggbug/145147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2011-04-27 15:21 <a href="http://www.cppblog.com/huangwei1024/archive/2011/04/27/145147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows Socket IO 模型</title><link>http://www.cppblog.com/huangwei1024/archive/2010/11/21/134205.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Sun, 21 Nov 2010 04:10:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2010/11/21/134205.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/134205.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2010/11/21/134205.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/134205.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/134205.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://blog.huang-wei.com/2010/11/21/winsock-io/Windows Socket IO 模型套接字架构应用程序使用Winsock与传输协议驱动沟通时AFD.SYS负责缓冲区的管理。这就意味着当一个程序调用send或者WSASend发送数据时，数据将被复制到AFD.SYS它自己的内部缓冲区中（依赖SO_SNDBUF的设置）WSASend调用立即返回。然后A...&nbsp;&nbsp;<a href='http://www.cppblog.com/huangwei1024/archive/2010/11/21/134205.html'>阅读全文</a><img src ="http://www.cppblog.com/huangwei1024/aggbug/134205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2010-11-21 12:10 <a href="http://www.cppblog.com/huangwei1024/archive/2010/11/21/134205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++中实现委托（Delegate）</title><link>http://www.cppblog.com/huangwei1024/archive/2010/11/17/133870.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Wed, 17 Nov 2010 03:17:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2010/11/17/133870.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/133870.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2010/11/17/133870.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/133870.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/133870.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Http://Blog.Huang-Wei.Com/2010/08/09/C%E4%B8%AD%E5%AE%9E%E7%8E%B0%E5%A7%94%E6%89%98%EF%BC%88delegate%EF%BC%89/C++中实现委托（Delegate）公司的项目里有用到Don Clugston的FastDelegate，当时只知道是类似boost::function的东西，UI上当watche...&nbsp;&nbsp;<a href='http://www.cppblog.com/huangwei1024/archive/2010/11/17/133870.html'>阅读全文</a><img src ="http://www.cppblog.com/huangwei1024/aggbug/133870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2010-11-17 11:17 <a href="http://www.cppblog.com/huangwei1024/archive/2010/11/17/133870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bloom Filter 原理与应用</title><link>http://www.cppblog.com/huangwei1024/archive/2010/11/17/133869.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Wed, 17 Nov 2010 03:16:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2010/11/17/133869.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/133869.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2010/11/17/133869.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/133869.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/133869.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Http://Blog.Huang-Wei.Com/2010/11/02/Bloom-Filter/Bloom Filter 原理与应用介绍Bloom Filter是一种简单的节省空间的随机化的数据结构，支持用户查询的集合。一般我们使用STL的std::set, stdext::hash_set，std::set是用红黑树实现的，stdext::hash_set是用桶式哈希表。上述两种数据结构，都...&nbsp;&nbsp;<a href='http://www.cppblog.com/huangwei1024/archive/2010/11/17/133869.html'>阅读全文</a><img src ="http://www.cppblog.com/huangwei1024/aggbug/133869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2010-11-17 11:16 <a href="http://www.cppblog.com/huangwei1024/archive/2010/11/17/133869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>双数组字典树的内存占用测试</title><link>http://www.cppblog.com/huangwei1024/archive/2010/07/23/121096.html</link><dc:creator>威士忌</dc:creator><author>威士忌</author><pubDate>Fri, 23 Jul 2010 00:52:00 GMT</pubDate><guid>http://www.cppblog.com/huangwei1024/archive/2010/07/23/121096.html</guid><wfw:comment>http://www.cppblog.com/huangwei1024/comments/121096.html</wfw:comment><comments>http://www.cppblog.com/huangwei1024/archive/2010/07/23/121096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huangwei1024/comments/commentRss/121096.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huangwei1024/services/trackbacks/121096.html</trackback:ping><description><![CDATA[

<span style="widows: 2; text-indent: 0px; font: normal normal normal medium/normal Simsun; orphans: 2; "><span style="text-align: left; ">
<p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "></p>
<p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "></p>
<p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "></p><p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; "><font face="verdana, sans-serif"><span style="font-size: 14px; line-height: 21px;"><a href="http://blog.huang-wei.com/2010/07/20/%e5%8f%8c%e6%95%b0%e7%bb%84%e5%ad%97%e5%85%b8%e6%a0%91%e7%9a%84%e5%86%85%e5%ad%98%e5%8d%a0%e7%94%a8%e6%b5%8b%e8%af%95/">http://blog.huang-wei.com/2010/07/20/%e5%8f%8c%e6%95%b0%e7%bb%84%e5%ad%97%e5%85%b8%e6%a0%91%e7%9a%84%e5%86%85%e5%ad%98%e5%8d%a0%e7%94%a8%e6%b5%8b%e8%af%95/</a><br></span></font></p><p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><a style="COLOR: rgb(119,0,0); TEXT-DECORATION: none" href="http://www.huang-wei.com/blog/?p=386">上一篇文章</a>介绍了双数组字典树 DATrie，现在让我们来简单的测试下内存占用情况。</p>
<p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">测试用例，我选了<a style="COLOR: rgb(119,0,0); TEXT-DECORATION: none" href="http://www.jesus-is-lord.com/thebible.htm">The Holy Bible</a>，数据文件大小为4.2MB。只记录英文单词，全部转为小写。</p>
<div id="highlighter_956157" class="syntaxhighlighter nogutter  " style="border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">
<div class="lines">
<div class="line alt1">
<table border="0">
    <tbody>
        <tr>
            <td class="content"><code style="FONT-STYLE: normal" class="plain">words : 822,529</code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table border="0">
    <tbody>
        <tr>
            <td class="content"><code style="FONT-STYLE: normal" class="plain">u-words : 12,591</code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table border="0">
    <tbody>
        <tr>
            <td class="content"><code style="FONT-STYLE: normal" class="plain">nodes : 34,266</code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table border="0">
    <tbody>
        <tr>
            <td class="content"><code style="FONT-STYLE: normal" class="plain">trie-mem : 1,247,308</code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table border="0">
    <tbody>
        <tr>
            <td class="content"><code style="FONT-STYLE: normal" class="plain">datrie-mem : 483,376</code></td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
<p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">Trie的实现我已经做了一些优化，初始每个节点的指针数组 size 为0，当有节点插入时，再开 max(size, char) 大小的数组。trie-mem 显示的是已经除去节点自身的大小，即该数值体现的是申请的指针数组总大小。</p>
<p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">trie-mem / ptr-size / nodes = 9.1，说明平均每个节点（内节点+叶节点）分配了9.1个指针。相对完全Trie树而言，已经节省了很多空间了。但这样算浪费的量明显是不够精确的，nodes 应该换成内节点数（这里就用 u-words 代替叶节点，虽然两者是不等同的），因为叶节点未分配指针数组，并应该减去真正有用的转移边。这个浪费的值应该是 (trie-mem / ptr-size &#8211; nodes) / (nodes &#8211; u-words) = 12.8。</p>
<p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">DATrie的浪费值应该是 (datrie-mem / (2 * int-size) &#8211; nodes) / (nodes &#8211; u-words) &#8211; 1 = 1.2，可见 DATrie 的空间复杂度还是相当不错的。当然DATrie的实现我还没有进行深入的优化，基本就是<a style="COLOR: rgb(119,0,0); TEXT-DECORATION: none" href="http://www.huang-wei.com/blog/?p=386">上一篇文章</a>里的代码做的测试。如果按那文章里提到的优化方法继续优化，空间的浪费值会更低。</p>
<p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">但DATrie存在一个比较大的问题，就是它的空间是预先申请好的，因为根本无从得出它实际的大小，如果空间不够大了再重新分配的话，那势必又得消耗时间，而且还是无法解决空间是否足够的问题。另外，附加的信息域最好保存为指针的形式，否则重排时复制的复杂度就可能会很高。</p>
<p style="padding-bottom: 0px; margin-top: 1em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; border-collapse: separate; color: rgb(0, 0, 0); font-family: verdana, sans-serif; font-size: 14px; letter-spacing: normal; line-height: 21px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; " id="aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown">总结，DATrie还是比较适合在工程中应用，尤其对于数据集比较固定的。</p>
</span></span><img src ="http://www.cppblog.com/huangwei1024/aggbug/121096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huangwei1024/" target="_blank">威士忌</a> 2010-07-23 08:52 <a href="http://www.cppblog.com/huangwei1024/archive/2010/07/23/121096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>