<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8532043836625598378</id><updated>2012-02-12T19:52:27.118+08:00</updated><category term='Reading'/><category term='English'/><category term='声明'/><category term='Google'/><title type='text'>王元涛的Blog</title><subtitle type='html'>wangyuantao@msn.com</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default?start-index=101&amp;max-results=100'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>162</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-3293344950765949412</id><published>2012-02-12T19:52:00.001+08:00</published><updated>2012-02-12T19:52:27.251+08:00</updated><title type='text'>凯立德刷K币</title><content type='html'>话说道高一尺魔高一丈。先从最弱的一个魔开始吧。&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;打开一个记事本，粘贴如下代码另存为kld.user.js，然后拖到Chrome或Firefox（Firefox需要安装GreaseMonkey插件）里。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;然后在地址栏中输入：&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.kldjy.com/home.php#3"&gt;http://www.kldjy.com/home.php#3&lt;/a&gt;&amp;nbsp;&lt;/div&gt; &lt;div&gt;即可获得10个K币：因为访问了个人空间。虽说打开了12个Tab，但是家园的规则是每天由于访问个人空间获得K币的上限=10。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;当然，要提前弄好自动登录。为了不影响正常使用家园空间首页，只对加了&amp;quot;#3&amp;quot;无害后缀的网址做批量弹Tab了。&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;// ==UserScript==&lt;/div&gt;&lt;div&gt;// @name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; KLD K coins&lt;/div&gt; &lt;div&gt;// @include &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.kldjy.com/home.php#3"&gt;http://www.kldjy.com/home.php#3&lt;/a&gt;&lt;/div&gt;&lt;div&gt;// @run-at &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; document-end&lt;/div&gt;&lt;div&gt;// @description &amp;nbsp; &amp;nbsp;open 10 space&lt;/div&gt;&lt;div&gt;// @version &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1.0&lt;/div&gt; &lt;div&gt;// ==/UserScript==&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;function main() {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt;for(i=0;i&amp;lt;$(&amp;quot;portal_block_80_content&amp;quot;).children[0].children[0].children.length;++i)&lt;/div&gt; &lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;		&lt;/span&gt;window.open($(&amp;quot;portal_block_80_content&amp;quot;).children[0].children[0].children[i].children[0].href, &amp;quot;_blank&amp;quot;)&lt;/div&gt; &lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;	&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;var inject = document.createElement(&amp;quot;script&amp;quot;);&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;inject.setAttribute(&amp;quot;type&amp;quot;, &amp;quot;text/javascript&amp;quot;);&lt;/div&gt; &lt;div&gt;inject.appendChild(document.createTextNode(&amp;quot;(&amp;quot; + main + &amp;quot;)()&amp;quot;));&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;document.body.appendChild(inject);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-3293344950765949412?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/3293344950765949412/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=3293344950765949412' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3293344950765949412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3293344950765949412'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2012/02/k.html' title='凯立德刷K币'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5654149469543390085</id><published>2012-02-11T23:50:00.001+08:00</published><updated>2012-02-11T23:50:17.862+08:00</updated><title type='text'>如果我的证明是正确的，就不需要任何其他形式的肯定</title><content type='html'>&lt;span style&gt;想健康并且不浮躁地活，看来必须读一点书了。&lt;br&gt;&lt;/span&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5654149469543390085?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5654149469543390085/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5654149469543390085' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5654149469543390085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5654149469543390085'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2012/02/blog-post.html' title='如果我的证明是正确的，就不需要任何其他形式的肯定'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-3132817720856841622</id><published>2012-02-03T21:56:00.001+08:00</published><updated>2012-02-03T21:56:39.837+08:00</updated><title type='text'>2012年1月1日不是2012年的第一周</title><content type='html'>&lt;div&gt;&lt;span lang="EN-US" style&gt;&lt;p class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;gt; $ date -d &amp;quot;2012-01-01 00:00:00&amp;quot; +%U&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;gt; 01&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;gt; but in &amp;quot;man date&amp;quot;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;gt; %U&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; week number of year, with Sunday as first day of week (00..53)&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;gt; Is it a bug?&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span lang="EN-US" style&gt;&lt;div&gt;&lt;span lang="EN-US" style&gt;给gnu发了封信，得到了详尽的解答，长知识了。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span lang="EN-US" style&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt; &amp;nbsp;ISO 8601 是一个神奇的标准，它定义了周数应该怎样数。&lt;/span&gt;&lt;div&gt;&lt;font face="Calibri, sans-serif"&gt;&lt;span style="font-size:14px"&gt;美国人按直觉定义每年1月1日所在的周为一年的第一周，而欧洲人制定的标准&lt;/span&gt;&lt;/font&gt;&lt;span style="font-family:Calibri,sans-serif;font-size:14px"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:Calibri,sans-serif;font-size:14px"&gt;ISO 8601&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:14px;font-family:Calibri,sans-serif"&gt;则不然。&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;font face="Calibri, sans-serif"&gt;&lt;span style="font-size:14px"&gt;首先，&lt;/span&gt;&lt;/font&gt;&lt;span style="font-family:Calibri,sans-serif;font-size:14px"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:Calibri,sans-serif;font-size:14px"&gt;ISO 8601 定义每周的第一天为周日，其次，如果一年的第一周天数没有过半，则归入上一年的最后一周，第一个天数过半的周才真的算一年的第一周。&lt;/span&gt;&lt;span style="font-family:Calibri,sans-serif;font-size:14px"&gt;&lt;br&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family:Calibri,sans-serif;font-size:14px"&gt;POSIX提供了支持这个标准的实现，也给出了多种其他符合直觉的选择，info date仔细读一下，深了去了。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;font face="Calibri, sans-serif"&gt;&lt;span style="font-size:14px"&gt;查了一下中国国标，也是按这个ISO定义的。&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-3132817720856841622?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/3132817720856841622/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=3132817720856841622' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3132817720856841622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3132817720856841622'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2012/02/2012112012.html' title='2012年1月1日不是2012年的第一周'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-7516554524830920167</id><published>2012-01-18T21:37:00.001+08:00</published><updated>2012-01-18T21:37:36.251+08:00</updated><title type='text'>幂级数</title><content type='html'>假设有台印钞机每个月能印10元，不费纸不费电还终身保修，卖100元一台，要不要买一台呢？&lt;div&gt;假设月期望收益率是10%，那么还是不买为好，除非你忘了幂级数。&lt;/div&gt;&lt;div&gt;第一个月的收入折现：10/(1+0.1)=9.1，也就是说，第一个月月底的现金流入，在现在看来，价值只有9.1元。&lt;/div&gt;&lt;div&gt;同理，第N个月的工资折现：10/(1+0.1)^N&lt;/div&gt;&lt;div&gt;N趋于无穷的时候算部分和的极限=100&lt;/div&gt;&lt;div&gt; &lt;br&gt;&lt;/div&gt;&lt;div&gt;那应该怎么办呢？&lt;/div&gt;&lt;div&gt;把全部积蓄都拿来买这种印钞机，然后高价兜售给那些不懂幂级数的人XD&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-7516554524830920167?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/7516554524830920167/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=7516554524830920167' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7516554524830920167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7516554524830920167'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2012/01/blog-post_18.html' title='幂级数'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-7266965633555362754</id><published>2012-01-14T14:36:00.001+08:00</published><updated>2012-01-14T14:36:32.412+08:00</updated><title type='text'>./</title><content type='html'>有一天，我的C++程序在工作目录下建立了一个名为-1的目录，我想看看里面是什么鬼东西，不料&lt;br&gt;-bash-3.2$ ls -1/&lt;br&gt;ls: invalid option -- /&lt;br&gt;Try `ls --help&amp;#39; for more information.&lt;br&gt;分明是Tab出来的，怎么会这样。。。估计是ls的bug吧。cd进去看看？&lt;br&gt;-bash-3.2$ cd -1/&lt;br&gt;-bash: cd: -1: invalid option&lt;br&gt; cd: usage: cd [-L|-P] [dir]&lt;br&gt;我去。。。估计是没用了，删了吧&lt;br&gt;-bash-3.2$ rm -rf -1&lt;br&gt;rm: invalid option -- 1&lt;br&gt;Try `rm ./-1&amp;#39; to remove the file `-1&amp;#39;.&lt;br&gt;Try `rm --help&amp;#39; for more information.&lt;br&gt;原来如此，&lt;br&gt;rm -r ./-1&lt;br&gt;之后就天下太平了。&lt;br&gt; &lt;br&gt;有一天，我的C++程序在工作目录下建立了一个名为~的目录，我一看&lt;br&gt;-bash-3.2$ tree&lt;br&gt;.&lt;br&gt;|-- bin&lt;br&gt;|&amp;nbsp;&amp;nbsp; `-- run&lt;br&gt;`-- ~&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `-- workplace&lt;br&gt;&lt;br&gt;3 directories, 1 file&lt;br&gt;&lt;br&gt;没东西，那就删了吧&lt;br&gt;-bash-3.2$ rm -rf ~&lt;br&gt;rm: cannot remove directory `/home/ytwang&amp;#39;: Permission denied&lt;br&gt; 好生奇怪，我自己的程序跑出来的目录怎么会没有权限，难道程序里面用了sudo不成？。。。等等，为什么是/home。。。啊呀完了，赶快&lt;br&gt;-bash-3.2$ pwd&lt;br&gt;/home/ytwang/workplace&lt;br&gt; -bash-3.2$ ll&lt;br&gt; total 0&lt;br&gt; -bash-3.2$ cd&lt;br&gt; -bash-3.2$ ll&lt;br&gt;total 0&lt;br&gt;顿时心中拔凉拔凉的。。。&lt;br&gt;&lt;br&gt;&lt;br&gt;==结束语==&lt;br&gt;你永远不知道自己那充满了灵异事件的程序会创建出什么诡异的目录来，一旦他们被放出来，就将会像幽灵一样&amp;mdash;&amp;mdash;你看不见他，而当你想砍死他的时候，自己就死掉了&lt;br&gt;要养成用./表示当前路径的好习惯&lt;br&gt;当你听说哪个同事不小心删除了某个重要文件的时候，不要惊讶，要同情&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-7266965633555362754?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/7266965633555362754/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=7266965633555362754' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7266965633555362754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7266965633555362754'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2012/01/blog-post_14.html' title='./'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5157843533859834167</id><published>2012-01-07T21:09:00.001+08:00</published><updated>2012-01-07T21:09:15.022+08:00</updated><title type='text'>驾照换证攻略</title><content type='html'>转眼驾照6年到期，要换本了。&lt;br&gt;第-1天：早上去照相馆照1寸照片，官网上给的规格说明很复杂，跟师傅说驾照用的，师傅都知道。非立等可取。15元。&lt;br&gt;第0天：早上去照相馆取相片。中午饭后在办公室打印《申请表》《身体条件证明》空白表，把自己能填的都填了，各贴一张照片，复印身份证正反面。&lt;br&gt;1点从朝阳门出发，打的到东直门医院，堵车（亏大了），11元，30分钟。&lt;br&gt;进门左手边有个门诊办公室，看一眼色盲的本本，然后大夫就边聊天便给你把表填好了，盖章，11元，2分钟。&lt;br&gt; 出医院一路向南走，穿过海运仓小区，过东四十条的马路，再穿过军区总医院（好像这里也能体检），就到达了豆瓣胡同，15分钟。&lt;br&gt;在一条东西向的巨窄无比的小胡同里的路南，看到一个巨小无比的小门脸，上面写着"顺天府超市"，东城交通支队的门就在那旁边了，巨不起眼。&lt;br&gt;拿号，没什么人，30秒后就到我了。给他《申请表》《身体条件证明》，身份证及复印件，再一张一寸照片，旧驾照。&lt;br&gt;他在电脑前敲一阵，然后换个窗口给他10元，就看到一张滚烫的新驾照出炉了。5分钟。&lt;br&gt; 走回朝阳门，也就2点多。 &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5157843533859834167?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5157843533859834167/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5157843533859834167' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5157843533859834167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5157843533859834167'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2012/01/blog-post.html' title='驾照换证攻略'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5406274978539459264</id><published>2011-12-31T20:44:00.001+08:00</published><updated>2011-12-31T20:44:25.755+08:00</updated><title type='text'>2012 resolution</title><content type='html'>每年元旦前后都会制定来年计划，可是一年到头来，回头看看履行的情况总让人心灰意冷。&lt;br&gt;晚上老婆去天坛许愿，出门前问我来年有什么愿望。&lt;br&gt;我想了想"三条腿的理论"，说：长胖。&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5406274978539459264?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5406274978539459264/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5406274978539459264' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5406274978539459264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5406274978539459264'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/12/2012-resolution.html' title='2012 resolution'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5280097850398740341</id><published>2011-12-11T16:56:00.001+08:00</published><updated>2011-12-11T16:56:07.017+08:00</updated><title type='text'>我家的挂表</title><content type='html'>&lt;p class="mobile-photo"&gt;&lt;a href="http://4.bp.blogspot.com/-iv6iSxcThFo/TuRwJ35mVPI/AAAAAAAACzA/4f0HiwBWYbs/s1600/ENIMAGE1323593278880-767018.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/-iv6iSxcThFo/TuRwJ35mVPI/AAAAAAAACzA/4f0HiwBWYbs/s320/ENIMAGE1323593278880-767018.jpg"  border="0" alt="" id="BLOGGER_PHOTO_ID_5684791944575079666" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;昨天在朝阳大悦城买的&lt;br&gt; 超静音&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5280097850398740341?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5280097850398740341/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5280097850398740341' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5280097850398740341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5280097850398740341'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/12/blog-post.html' title='我家的挂表'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-iv6iSxcThFo/TuRwJ35mVPI/AAAAAAAACzA/4f0HiwBWYbs/s72-c/ENIMAGE1323593278880-767018.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-4856029701167094911</id><published>2011-11-30T15:08:00.001+08:00</published><updated>2011-11-30T15:08:19.001+08:00</updated><title type='text'>新手提车小记</title><content type='html'>用chli的话说，就这样一下回到了解放前。用工作以来的全部积蓄，买了辆小汽车。号快到期了，再加上反正也不懂，就随便买了一个。&lt;div&gt;虽然交款第二天这款车型就上了央视的每周质量报告一通批判，可我还是很开心。心想有了车以后，去看父母再也不用在公交车上浪费宝贵的时间了。&lt;/div&gt;&lt;div&gt;销售小李帮我把车从4S店的洗车房里开出来，放在了青年路的路边换我上去，嘱咐我说，别忘了松手刹。&lt;/div&gt;&lt;div&gt;离开驾校5年零9个月以来，第一次自己开车。之前1个月摸过两次朋友的车，不过都没开出去多远，一次在院子里转了转，一次在试驾路线上兜了半圈，而且都有司机在边上指挥着。&lt;/div&gt; &lt;div&gt;这次，说实话，很紧张。&lt;/div&gt;&lt;div&gt;我坐上驾驶座，等老婆坐上副驾驶座，都扣好安全带，就松手刹、给油、窜了出去。&lt;/div&gt;&lt;div&gt;这时销售敲车门，大声问，松手刹了吗？我踩住刹车回答，松了，然后又给油窜了出去。&lt;/div&gt;&lt;div&gt;刚窜出去又一脚刹车，让左边一辆残疾三轮过去。&lt;/div&gt;&lt;div&gt;等他过去之后，缓缓给油，慢慢开起来了。在青年路的试驾路线上开了一圈，试驾路线上几乎一辆车都没有，觉得太假了，于是回到了姚家园路，准备回家。&lt;/div&gt; &lt;div&gt;本来在手机上安装调试好了付费版的凯立德导航软件，下载了离线版北京地图，可是完全无心打开，只觉得周围都是车，特紧张。根本不敢分心去掏手机。&lt;/div&gt;&lt;div&gt;心想，嗨，我车没牌我怕谁。就顶着一张临时牌照一路。。。蜗行回家了。&lt;/div&gt;&lt;div&gt;按照常识最外侧车道用于右转弯或者出主路，那我就在最里侧走吧。没想到这条车道是左转弯掉头的。&lt;/div&gt;&lt;div&gt;汗死。&lt;/div&gt;&lt;div&gt;由东向西到了东三环，要右转，狠心往右并线要出主路，右侧车队死活不给空档，还挤进来一辆9XX公交挡住了我的半个屏幕。左右摇摆之际，后面喇叭声此起彼伏。&lt;/div&gt; &lt;div&gt;到了出口的位置，妈的老子还在直行道上打着蹦灯没拐出去呢，急了，一把转盘一脚油门挤了出去，然后一脚刹车踩死定在了9XX屁股后面。&lt;/div&gt;&lt;div&gt;原以为老婆在旁边吓得惊惶失措了，没想她还挺高兴的，说道："老公，你真棒！"&lt;/div&gt;&lt;div&gt;汗死。&lt;/div&gt;&lt;div&gt;到了桥下，发现其实刚才沿着主路直行到桥下也能右转，没必要拼了命地提早挤到辅路上来。&lt;/div&gt;&lt;div&gt;三环上走不起来。40%时间点着刹车往前蹭，30%时间滑行，5%的时间给点油，其他时间拉上手刹开风景。&lt;/div&gt; &lt;div&gt;当然，看风景的心思是没有的，只有在车里瑟瑟发抖的份：紧张+不知道空调热风怎么开。&lt;/div&gt;&lt;div&gt;安华桥掉头，两次右转270度=负180度那种，出主路又出不来了。打着蹦灯看着漫长的辅路车队，颇有沉舟侧畔千帆过的感觉。然而不是卧在船上看，而是要扭着脖子看。因为车身已经转过了30度，这次右侧后视镜视野完全不对，看不到辅路车辆，只能回头通过后排右侧车窗观察。差不多等了一个红灯的功夫，终于没车了，转上了安华桥。&lt;/div&gt;&lt;div&gt; 终于到家了。可是。。。噩梦才刚刚开始！&lt;/div&gt;&lt;div&gt;最恐怖的路段，是进小区门之后。这是一个老小区，路只有三道宽，一道是规划停车位，停满了大大小小的车，另一侧地上画着禁止停车的标志，也停满了大大小小的车。&lt;/div&gt;&lt;div&gt;进门保安撕条递给我，我给油冲隔离墩，没控制好，留给他一个屁股。放了3个车窗才把自己的车窗放下来，伸出头去说，我停这儿去办车证，行吗。他说，这不能停，往前去，停前头那儿。&lt;/div&gt;&lt;div&gt;我再想往前开，发现已经不能开了，已经快顶到前面停那儿那车上了。想那就往后倒一点吧，后面进来一辆金杯，滴滴冲我按喇叭。&lt;/div&gt; &lt;div&gt;我勒个去。&lt;/div&gt;&lt;div&gt;我就在那里踩着刹车原地打轮，不敢碰油门。&lt;/div&gt;&lt;div&gt;金杯按耐不住，自己往后倒了一点，噌地窜了进去。&lt;/div&gt;&lt;div&gt;我一着急，刹车踩成了油门，往后跳出去老远。好在后面没人，赶快一脚刹车站住了。&lt;/div&gt;&lt;div&gt;看来倒车的时候不仅容易分不清左右，而且也容易分不清前后啊。&lt;/div&gt;&lt;div&gt;稳定一下情绪，踩着脚刹靠怠速驶入小区，边爬边寻觅车位。&lt;/div&gt;&lt;div&gt;这时对面从饭馆开出来一辆运货的小面包，迎面驶来。怎么办，只有一条可用车道啊。千军万马过独木桥么。狭路相逢勇者胜么。桥到船头自然直么。车到山前可路在哪儿呢。&lt;/div&gt; &lt;div&gt;缓缓地，他往左蹭蹭，我往右蹭蹭，好在相遇点两侧都是小车。我看到我的左侧后视镜距离面包车的左侧后视镜只有12厘米到15厘米，右侧后视镜距离停那儿那辆桑塔纳的右侧后视镜只有4厘米到9厘米。&lt;/div&gt;&lt;div&gt;过去之后我才纳过闷来，那叫后怕。天哪，我这是怎么过来的。。&lt;/div&gt;&lt;div&gt;继续在小区里逡巡。&lt;/div&gt;&lt;div&gt;逡巡许久，终于找到了一个理想的车位。停进去。右侧有矮墙，副驾门开不开。&lt;/div&gt;&lt;div&gt;老婆说，那我从你那边爬出去吧。&lt;/div&gt; &lt;div&gt;我说，别，我往回倒点。&lt;/div&gt;&lt;div&gt;老婆下车后，我又把车往边上靠了靠，停稳，轮回正，拉手刹，放P档，拔了钥匙，走人。&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-4856029701167094911?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/4856029701167094911/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=4856029701167094911' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4856029701167094911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4856029701167094911'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/11/blog-post_30.html' title='新手提车小记'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8889784140747614593</id><published>2011-11-20T15:18:00.001+08:00</published><updated>2011-11-20T15:18:17.707+08:00</updated><title type='text'>马尔代夫满月岛攻略</title><content type='html'>11月15日&lt;br&gt;早上9点从T2航站楼出发，这个周二早高峰时间路面上的机场巴士不靠谱，于是7点半在北三环上打了个车，去三元桥换机场快轨。8点5分到机场柜台，被告知再有五分钟通道就关闭了，真悬！下午2点多到马累机场，出飞机差点被热死。老子还穿着秋裤，在赤道上忍了2个多小时才到房间。坐船到满月岛，前台交400$押金。喝了一种非常好喝的饮料，填了张表格。&lt;br&gt;先住沙滩屋，洗澡的地方是上半露天的，洗的慢了会晒伤。还有个阳台，阳台外有个水龙头可冲脚，因为从沙滩回来通常脚上都是沙子。傍晚到海滩走了走，订了第二天的海豚巡游。&lt;br&gt; 16日&lt;br&gt;5点多起来看了个日出的尾巴，趁太阳不太猛，到处走走拍拍。金色的朝阳暖暖地打在沙滩上。&lt;br&gt;吃完早餐就回房睡觉。下午下海游了会儿泳，又睡了。&lt;br&gt;傍晚出海去看海豚巡游。没有见到海豚。日落很美，浪很大。&lt;br&gt;17日&lt;br&gt;搬家到水屋，有车接。水屋特别好，洗澡的地方有270°的视野看海景。从阳台可以直接下水。中饭后，我们就下海试了装备。&lt;br&gt;累了就回房睡觉，或者在阳台的躺椅上吹海风，吃苹果。&lt;br&gt;18日&lt;br&gt;又看了个日出的尾巴。上午在浅滩看到了小鲨鱼，还有上千条小鱼。&lt;br&gt; 中午继续在阳台晒太阳，忽然想到一句词"海空凭栏阔"，不知出处。后来才知道是杜撰出来的，没有这样的说法。如果把"凭"和"栏"断开，把前者解释为"是因为"，那么这句词就有了含义：觉得海面空旷，是因为阳台宽敞。&lt;br&gt;下午在近海浮潜，拍水下小鱼。拍到了一些。&lt;br&gt;晚饭去吃了烛光晚餐。&lt;br&gt;19日&lt;br&gt;什么也没做，上午睡了个懒觉，中午交了房就坐船回机场了。&lt;br&gt;&lt;br&gt;心得：&lt;br&gt;自始至终没觉得是出国，到处是中国人。还以为是到了三亚。&lt;br&gt; 满月岛貌似由喜来登托管，国际化做的不错，几乎所有服务都有中文。那些不懂英语的富二代到了岛上也不会饿死。&lt;br&gt;自助餐貌似不用给小费。烛光晚餐和出海看海豚巡游直接记账就好，不用给现金。账单上已经包括了消费。&lt;br&gt;早餐相当丰盛，一坐下就有人来给你倒咖啡、橙汁。豆奶很好喝。各种面包点心粥。各种鸡蛋的做法：煎蛋、水煮蛋、蛋卷。各种果酱和水果。&lt;br&gt;浮潜装备因人而异，本人因为视力不好，带上面罩水下什么也看不见，只好换带度数的泳镜。气管的塑料味和海水的咸味让我恶心，在嘴里咬了一会儿就扔一边了。穿着救生衣，很难潜到水下太深的地方。大陆架很长，水也不深。脚蹼很好用，没有它基本上游的速度是0。光脚下水很危险，水下珊瑚轧脚。&lt;br&gt; 水屋柱子上有一种奇怪的螺，不小心靠近柱子的时候碰到，手被剌出一个口子，直流血。&lt;br&gt;岛上只有一个地方可以免费上wifi，在Lobby旁边的网吧。&lt;br&gt;我们搭乘的是海航的飞机，往返各含两餐，一顿正餐有热米饭，一顿落地餐是三明治。回到北京是凌晨2点半，公共交通工具不要想了，直接打的回家。&lt;br&gt;自己带了一箱子吃的，因为酒店管4顿早餐，2顿晚餐，所以另外还有6顿饭要自己解决。&lt;br&gt;不用带水，房间里有瓶装水，还可以烧开水。&lt;br&gt;防晒霜不能省，我们每次下海前都抹，仍然会晒黑，不过不会晒伤。&lt;br&gt; 不要为整天介睡觉而懊丧，心情好精神好是最重要的。这就是马尔代夫度假的意义。&lt;br&gt;如果平时苦日子过惯了，开始一两天会无法进入状态，适应不了这么慵懒并且奢靡的生活。带着一点批判去享受它，慢慢就好了。回到北京之后，你会忽然发现，哇塞自己的执行力好强。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8889784140747614593?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8889784140747614593/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8889784140747614593' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8889784140747614593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8889784140747614593'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/11/blog-post.html' title='马尔代夫满月岛攻略'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-834822958381863560</id><published>2011-11-12T21:57:00.001+08:00</published><updated>2011-11-12T22:52:50.573+08:00</updated><title type='text'>测试MathJax</title><content type='html'>下面的欧拉公式可以在网页上自动渲染。&lt;br /&gt;$$e^{2\pi i}=1$$&lt;br /&gt;这是因为我在Blog模板的&amp;lt;head&amp;gt;中加入了公式渲染引擎&lt;br /&gt;&lt;br /&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt;  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;还可以使用inline的公式渲染。例如$\frac{\partial^2 \phi}{\partial x \partial y} = \frac{\partial^2 \phi}{\partial y \partial x}$呵呵。&lt;br /&gt;只需要加一行&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/x-mathjax-config"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;  &lt;span class="nx"&gt;MathJax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Hub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;tex2jax&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inlineMath&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s1"&gt;'$'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'$'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;]}});&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-834822958381863560?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/834822958381863560/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=834822958381863560' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/834822958381863560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/834822958381863560'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/11/mathjax.html' title='测试MathJax'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-3248018884108690354</id><published>2011-11-11T23:18:00.001+08:00</published><updated>2011-11-11T23:18:14.491+08:00</updated><title type='text'>2-SAT</title><content type='html'>&lt;div&gt;总算release了，释放一下，找个简单的问题自娱自乐一把。&lt;/div&gt;&lt;div&gt;n个变量组成m个子句的句子，其中每个子句中恰有两个变量用或连接，每个变量可以替换成他自身的取反，子句之间用且连接。&lt;/div&gt;&lt;div&gt;给一个这样的句子s，求一组真值分配。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;算法：&lt;/div&gt;&lt;div&gt;如果存在一个不成立的子句，就反转其中一个变量。&lt;/div&gt;&lt;div&gt;反复为之，直至超过循环的最大次数。&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;（听到一个声音说：这叫什么狗屁算法，这不就是在瞎蒙么！）&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;实现：&lt;/div&gt;&lt;div&gt;&lt;div&gt;import random, re&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;sentence = lambda n, m: &amp;quot; and &amp;quot;.join([&amp;quot;(%sx%d or %sx%d)&amp;quot; % (&lt;/div&gt; &lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; random.choice([&amp;quot;not &amp;quot;, &amp;quot;&amp;quot;]), random.randint(1, n),&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; random.choice([&amp;quot;not &amp;quot;, &amp;quot;&amp;quot;]), random.randint(1, n)) for i in xrange(m)])&lt;/div&gt;&lt;div&gt;&lt;br&gt; &lt;/div&gt;&lt;div&gt;def detect_self_contradict(sub):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (i, j) = re.match(&amp;quot;.*?(\d+).*?(\d+)&amp;quot;, sub).groups()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ret = i == j and sub.count(&amp;quot;not&amp;quot;) == 1&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ret: print i&lt;/div&gt; &lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return ret&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;def solve(s, a):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for _i in xrange(10000):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print _i, a&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exec(&amp;quot;;&amp;quot;.join([&amp;quot;x%d=%s&amp;quot; % (i+1, a[i]) for i in xrange(len(a))]))&lt;/div&gt; &lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if eval(s): return a&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for sub in s.split(&amp;quot;and&amp;quot;):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if not eval(sub):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i = int(random.choice(re.match(&amp;quot;.*?(\d+).*?(\d+)&amp;quot;, sub).groups())) - 1&lt;/div&gt; &lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; a[i] = not a[i]&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;failed to solve %s&amp;quot; % s&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;a=[True]*20&lt;/div&gt;&lt;div&gt;s=sentence(len(a), 24)&lt;/div&gt; &lt;div&gt;if any([detect_self_contradict(sub) for sub in s.split(&amp;quot;and&amp;quot;)]):&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &amp;quot;no way! %s&amp;quot; % s&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exit()&lt;/div&gt;&lt;div&gt;print s&lt;/div&gt;&lt;div&gt;print solve(s,a)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt; &lt;/div&gt;&lt;div&gt;一次试验：&lt;/div&gt;&lt;div&gt;python 2sat.py&amp;nbsp;&lt;/div&gt;&lt;div&gt;(x19 or x6) and (not x1 or x20) and (x5 or not x20) and (x14 or not x20) and (x4 or x2) and (not x19 or x2) and (not x15 or not x6) and (x8 or not x15) and (x9 or not x17) and (not x11 or x4) and (not x16 or not x4) and (not x17 or not x11) and (x20 or x20) and (not x12 or not x16) and (x13 or not x10) and (x3 or not x17) and (x17 or x14) and (not x10 or not x6) and (not x13 or x19) and (x3 or x1) and (not x5 or x8) and (x15 or not x3) and (x1 or x1) and (x3 or x4)&lt;/div&gt; &lt;div&gt;0 [True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]&lt;/div&gt;&lt;div&gt;1 [True, True, True, True, True, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True]&lt;/div&gt; &lt;div&gt;2 [True, True, True, False, True, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True]&lt;/div&gt;&lt;div&gt;3 [True, True, True, False, True, False, True, True, True, True, False, True, True, True, True, True, True, True, True, True]&lt;/div&gt; &lt;div&gt;4 [True, True, True, False, True, False, True, True, True, True, False, True, True, True, True, False, True, True, True, True]&lt;/div&gt;&lt;div&gt;[True, True, True, False, True, False, True, True, True, True, False, True, True, True, True, False, True, True, True, True]&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;我试验了很多次，发现凡是有解的时候，都不需要迭代很多次。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;再分析：&lt;/div&gt;&lt;div&gt;如果存在一个满足句子s的真值分配A，那么令当前分配X[k]与A相同的变量个数为f(A, X[k])。&lt;/div&gt;&lt;div&gt;每次循环，至少有一半的概率f(A,X[k+1])=f(A, X[k]) + 1&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;为了证明这一点，假设一个当前未满足的子句X或Y，A以概率p取T,T，以1-p的概率取T,F或F,T。当前取值X[k]显然为F,F，那么f(A,X[k+1])=f(A, X[k]) + 1的概率依全概率公式得&lt;/div&gt; &lt;div&gt;p*1+(1-p)*0.5=0.5+0.5p&amp;gt;=0.5&lt;/div&gt;&lt;div&gt;证毕&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;f(A,X[k+1])=n时，我们就求得了一个真值分配。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;这个试验告诉我们一个道理：如果你相信存在一个真理，并且在实践中发现每次尝试的试错概率不超过一半，并且每次尝试成功都可以向真理靠近一个常数距离，那么，你就大胆地去不断尝试吧！（听到一个声音说：这叫什么狗屁道理。。。）&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-3248018884108690354?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/3248018884108690354/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=3248018884108690354' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3248018884108690354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3248018884108690354'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/11/2-sat.html' title='2-SAT'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-1515237500947792104</id><published>2011-10-24T21:48:00.001+08:00</published><updated>2011-10-24T21:48:23.996+08:00</updated><title type='text'>1977</title><content type='html'>1977年什么也没有发生。今天，2011-10-24，也不是什么特殊的日子。&lt;div&gt;但是当混用python和awk时，神奇的事情就这样发生了。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;os.system(&amp;quot;awk &amp;#39;{print %s}&amp;#39; a.txt&amp;quot; % str(datetime.date.today()))&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;输出&lt;/div&gt;&lt;div&gt; 1977&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;坑爹啊。。。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-1515237500947792104?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/1515237500947792104/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=1515237500947792104' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1515237500947792104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1515237500947792104'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/10/1977.html' title='1977'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-1416903350932579067</id><published>2011-10-16T00:57:00.001+08:00</published><updated>2011-10-16T00:57:11.081+08:00</updated><title type='text'>Fwd: 分析笑话：数学系有三个班</title><content type='html'>&lt;div class="gmail_quote"&gt;&lt;div style="font-size:12px;color:#262626;line-height:1.3;font-family:Arial, Helvetica, sans-serif;background-color:#fff"&gt;&lt;div&gt;&amp;ldquo;数学系有三个班&amp;rdquo;是真的，可我从来没听过这样有趣的对话： &lt;div&gt;&lt;a href="http://www.guokr.com/post/67116/" target="_blank"&gt;http://www.guokr.com/post/67116/&lt;/a&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;先分析一下原版的吧，说来惭愧，还是老婆给我讲明白的呢。&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;span style="border-collapse:separate;color:rgb(0, 0, 0);font-family:Arial, Helvetica, sans-serif;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium"&gt;&lt;span style="color:rgb(51, 51, 51);font-size:12px;line-height:26px"&gt;数学系一共3个班。&lt;/span&gt;&lt;/span&gt; &lt;div&gt;&lt;span style="border-collapse:separate;color:rgb(0, 0, 0);font-family:Arial, Helvetica, sans-serif;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium"&gt;&lt;span style="color:rgb(51, 51, 51);font-size:12px;line-height:26px"&gt;男生：你是3班的么？&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;  &lt;div&gt;&lt;span style="border-collapse:separate;color:rgb(0, 0, 0);font-family:Arial, Helvetica, sans-serif;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium"&gt;&lt;span style="color:rgb(51, 51, 51);font-size:12px;line-height:26px"&gt;女生：原来你是2班的啊！&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;  &lt;div&gt;&lt;span style="color:rgb(51, 51, 51);font-family:Arial, Helvetica, sans-serif;font-size:12px;line-height:26px"&gt;男生：你是1班的啊！&lt;/span&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;&lt;span style="line-height:26px"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;初始：&lt;/div&gt; &lt;div&gt;男生知道自己是2班的，男生知道女生不是自己班的，所以男生知道女生是1班或3班的&lt;/div&gt; &lt;div&gt;女生知道自己是1班的，女生知道男生不是自己班的，所以女生知道男生是2班或3班的&lt;/div&gt; &lt;div&gt;第一句话：&lt;/div&gt; &lt;div&gt;男生问女生是不是3班的，相当于宣布自己不是3班的，因为如果男生是3班的，他就不用问这个问题了。这里假设这两个人认识自己班的所有人，并且彼此知道这一点。&lt;/div&gt; &lt;div&gt;所以女生知道男生是2班的了。&lt;/div&gt; &lt;div&gt;第二句话：&lt;/div&gt; &lt;div&gt;女生说&amp;ldquo;原来你是2班的啊&amp;rdquo;，相当于宣布自己之前不知道男生是2班的，现在得到足够的信息知道了。&lt;/div&gt; &lt;div&gt;第三句话：&lt;/div&gt; &lt;div&gt;男生是如何推断出女生是1班的呢？&lt;/div&gt; &lt;div&gt;假设女生是3班的，那么女生只能知道男生是1班或2班的。那么男生告诉女生自己不是3班的并没有给女生提供任何新的信息。那样的话，女生就不足以推断出男生是2班的。这和第二句话不符。&lt;/div&gt; &lt;div&gt;所以女生只能是1班的。&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;趁老婆还在玩iCloud没去睡，再分析一个鬼谷子版的吧&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; 一天，鬼谷子随意从2-99中选取了两个数。他把这两个数的和告诉了庞涓， 把这两个数 &lt;div&gt;的乘积告诉了孙膑。但孙膑和庞涓彼此不知到对方得到的数。第二天， 庞涓很有自信的&lt;/div&gt; &lt;div&gt;对孙膑说：虽然我不知到这两个数是什麽，但我知道你一定也不知 道。随后，孙膑说：&lt;/div&gt; &lt;div&gt;那我知道了。庞涓说：那我也知道了。&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;这其实就是YaoQiZhi老师课上讲的Mr. S &amp;amp; Mr. M的故事，当时觉得好难啊，现在学了点python，觉得暴力破解法很直接，code也不过一屏。&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;from itertools import product&lt;/div&gt; &lt;div&gt;from collections import defaultdict&lt;/div&gt; &lt;div&gt;n=552&lt;/div&gt; &lt;div&gt;a0 = set([p for p in product(range(2,n), range(2,n)) if p[0]&amp;lt;p[1]])&lt;/div&gt; &lt;div&gt;print len(a0)&lt;/div&gt; &lt;div&gt;s=defaultdict(set)&lt;/div&gt; &lt;div&gt;m=defaultdict(set)&lt;/div&gt; &lt;div&gt;for (x,y) in a0:&lt;/div&gt; &lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s[x+y].add((x,y))&lt;/div&gt; &lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m[x*y].add((x,y))&lt;/div&gt; &lt;div&gt;print len(s)&lt;/div&gt; &lt;div&gt;print len(m)&lt;/div&gt; &lt;div&gt;#I don&amp;#39;t know, you don&amp;#39;t know&lt;/div&gt; &lt;div&gt;a2=set([(x,y) for (x,y) in a0 if len(s[x+y])&amp;gt;=2 and len(m[x*y])&amp;gt;=2])&lt;/div&gt; &lt;div&gt;print len(a2)&lt;/div&gt; &lt;div&gt;#I know you don&amp;#39;t know&lt;/div&gt; &lt;div&gt;a3=set([(x,y) for (x,y) in a2 if all([len(m[p*q])&amp;gt;=2 for (p,q) in s[x+y]])])&lt;/div&gt; &lt;div&gt;print len(a3)&lt;/div&gt; &lt;div&gt;#you know&lt;/div&gt; &lt;div&gt;a4=set([(x,y) for (x,y) in a3 if len(a3 &amp;amp; m[x*y])==1])&lt;/div&gt; &lt;div&gt;print len(a4)&lt;/div&gt; &lt;div&gt;#I know&lt;/div&gt; &lt;div&gt;a5=set([(x,y) for (x,y) in a4 if len(a4 &amp;amp; s[x+y])==1])&lt;/div&gt; &lt;div&gt;print a5&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt; &lt;div&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;&lt;span style="line-height:26px"&gt;ytwang$ time python&lt;/span&gt; &lt;span style="line-height:26px"&gt;&lt;a href="http://v.py" target="_blank"&gt;v.py&lt;/a&gt;&lt;/span&gt;&lt;/font&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;150975&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;1097&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;77432&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;105205&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;4753&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;2058&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;set([(4, 13)])&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;real&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m18.002s&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;user&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m17.919s&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0m0.079s&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;计算复杂度的瓶颈在求a3，也就是&amp;ldquo;我知道你不知道&amp;rdquo;这句话蕴含了绝大多数信息量。&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt; &lt;div style="line-height:26px"&gt;&lt;font color="#333333" face="Arial, Helvetica, sans-serif" size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-1416903350932579067?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/1416903350932579067/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=1416903350932579067' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1416903350932579067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1416903350932579067'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/10/fwd.html' title='Fwd: 分析笑话：数学系有三个班'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5592821390670673132</id><published>2011-10-10T23:59:00.001+08:00</published><updated>2011-10-10T23:59:58.190+08:00</updated><title type='text'>Fwd: 内省+变长参数的lambda表达式</title><content type='html'>最近看某同事写的python代码写的很漂亮，不禁羡慕。&lt;div&gt;恰好另一个同事买了本python教程，便拿来学学。&lt;/div&gt;&lt;div&gt;写了个练习。&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;div class="gmail_quote"&gt;&lt;div style="font-size:12px;color:#262626;line-height:1.3;font-family:Arial, Helvetica, sans-serif;background-color:#fff"&gt; &lt;table cellspacing="0" cellpadding="0" width="100%" style="padding-bottom:20px;padding-top:10px"&gt; &lt;tbody&gt;   &lt;tr&gt;    &lt;td style="line-height:1;text-align:left;padding-bottom:0px"&gt;     &lt;h3 style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;color:#262626;font-weight:bold;font-size:11px"&gt;&lt;a href="http://www.evernote.com/" style="color:#3697b3;font-weight:bold;text-decoration:none" target="_blank"&gt;From Evernote:&lt;/a&gt;&lt;/h3&gt;      &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td style="line-height:1.3;text-align:left;padding-top:0px;padding-bottom:7px;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#b5b5b5;font-size:11px"&gt;     &lt;h1 style="margin-top:0;margin-bottom:0;margin-right:0;margin-left:0;padding-bottom:0;padding-right:0;padding-left:0;color:#262626;font-weight:bold;padding-top:5px;font-size:18px"&gt;内省+变长参数的lambda表达式&lt;/h1&gt;         &lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt;&lt;/table&gt; &lt;div&gt;&lt;div align="left"&gt;&lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;class&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;b&gt;Client&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;:&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;def&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;b&gt;__init__&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;(&lt;/span&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;self&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;, endpoint):&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;span style="font-size:10pt"&gt;&lt;i&gt;self&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;.endpoint = endpoint&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align="left"&gt;  &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;def&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;b&gt;wget&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;(&lt;/span&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;self&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;, query):&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url =&lt;/span&gt;&lt;/font&gt; &lt;font color="#00AA00" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;&amp;quot;http://%s/%s&amp;quot;&lt;/i&gt;&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;% (&lt;/span&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;self&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;.endpoint, query)&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;import&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;u&gt;urllib&lt;/u&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; &lt;font color="#C0C0C0" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;#todo wget and return response&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;return&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;url&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;def&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;b&gt;__getattr__&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;(&lt;/span&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;self&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;, attr):&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;return&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;lambda&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;**kargs :&lt;/span&gt; &lt;span style="font-size:10pt"&gt;&lt;i&gt;self&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size:10pt"&gt;.wget(attr +&lt;/span&gt;&lt;/font&gt; &lt;font color="#00AA00" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;&amp;quot;?&amp;quot;&lt;/i&gt;&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;+&lt;/span&gt;&lt;/font&gt; &lt;font color="#00AA00" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;&amp;quot;&amp;amp;&amp;quot;&lt;/i&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;.join([&lt;/span&gt;&lt;/font&gt;&lt;font color="#00AA00" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;&amp;quot;%s=%s&amp;quot;&lt;/i&gt;&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;% (k, kargs[k])&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;for&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;k&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;in&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;kargs]))&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align="left"&gt;  &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;if&lt;/span&gt;&lt;/font&gt; &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;__name__ ==&lt;/span&gt;&lt;/font&gt; &lt;font color="#00AA00" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;&amp;#39;__main__&amp;#39;&lt;/i&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;:&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = Client(&lt;/span&gt;&lt;/font&gt;&lt;font color="#00AA00" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;&amp;quot;&lt;a href="http://baidu.com" target="_blank"&gt;baidu.com&lt;/a&gt;&amp;quot;&lt;/i&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;print&lt;/span&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;(a.q(keyword =&lt;/span&gt;&lt;/font&gt; &lt;font color="#00AA00" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;&amp;quot;s&amp;quot;&lt;/i&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;))&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/font&gt; &lt;font color="#0000FF" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;print&lt;/span&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;(a.q(keyword =&lt;/span&gt;&lt;/font&gt; &lt;font color="#00AA00" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;&amp;quot;s&amp;quot;&lt;/i&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;, charset =&lt;/span&gt;&lt;/font&gt; &lt;font color="#00AA00" face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;i&gt;&amp;quot;UTF-8&amp;quot;&lt;/i&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;))&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align="left"&gt;  &lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;结果&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;br&gt;  &lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;a href="http://baidu.com/q?keyword=s" target="_blank"&gt;http://baidu.com/q?keyword=s&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div align="left"&gt;&lt;font face="Courier New" size="2"&gt;&lt;font face="Courier New" size="2"&gt;&lt;span style="font-size:10pt"&gt;&lt;a href="http://baidu.com/q?charset=UTF-8&amp;amp;keyword=s" target="_blank"&gt;http://baidu.com/q?charset=UTF-8&amp;amp;keyword=s&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;br&gt; &lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5592821390670673132?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5592821390670673132/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5592821390670673132' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5592821390670673132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5592821390670673132'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/10/fwd-lambda.html' title='Fwd: 内省+变长参数的lambda表达式'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-1512396780298455687</id><published>2011-10-06T17:25:00.001+08:00</published><updated>2011-10-06T17:25:09.882+08:00</updated><title type='text'>滑雪板理论</title><content type='html'>&lt;div&gt;我假设你滑的是双板。&lt;br&gt;&lt;div&gt;当你倒在雪地里，发现两个雪板都不见了，那是最开心的。你可以立刻起身，东张西望，去捡你的雪板。你可以先捡左脚的雪板，再捡右脚的雪板，也可以先捡右脚的雪板，再捡左脚的雪板。你可以在雪地上自由行走，比穿着雪板的时候自由得多。只要不被后面失速的其他人再次撞到就好。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;当你倒在雪地里，发现左脚的雪板不见了，右脚的雪板还在脚上，是很郁闷的。你的右脚别在那里，不仅不能发力，而且不能提供合适摩擦力。单靠左腿的力量又不足以起身。你有两种选择，要么等人来拉你一把，当然这意味这你将命运交给了运气和泊松过程，要么你用撑杆把右脚的雪板脱掉，如果你的撑杆没扔出去的话。如果选择后者，相当于你把问题规约成了两个雪板都不见了的情形。你可能知道这个问题解起来更容易，也可能是歪打正着。&lt;/div&gt; &lt;div&gt;当你倒在雪地里，发现左脚得雪板还在脚上，右脚得雪板却不见了，也是很郁闷的。你右腿的力量可能强些，因为你踢足球，但是单凭右腿起身仍有些费力。你无非多一种选择：拼了命地站起来。虽然教练不是这样教你的。&lt;/div&gt;&lt;div&gt;当你倒在雪地里，发现两只雪板都TM还在脚上，你可以像个婴儿一样哭了。你觉得很亏，因为不仅要费力把两只雪板一只只脱掉，从这白茫茫的斜坡上站起来，还要把这双雪板摆成平行于等高线的角度，小心穿进去。你觉得委屈，因为这比掉了一只雪板还要费事，却在外人眼里看来还挺幸运的。&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;然而，倒在雪地里，还是很舒服的，至少它是一个稳态。&lt;/div&gt;&lt;div&gt;滑雪最不舒服的时候，是你发现自己已经超速，失去了对身体平衡和速度的控制的时候。&lt;/div&gt;&lt;div&gt;你喜欢一切尽在掌控，你后悔干嘛要跑到中级道上来吃饱了撑的没事找罪受。&lt;/div&gt;&lt;div&gt;你感到身体正在向左倾斜，同时向右旋转，你努力回忆教学视频上的内容，大脑却一片空白。&lt;/div&gt;&lt;div&gt;你感受到梯度下降，同时感受到无法忽略的水平位移。&lt;/div&gt; &lt;div&gt;你盼望着奇迹发生，身体赶快恢复平衡，严格按梯度下降，然后安全地在紧支集外面着陆。&lt;/div&gt;&lt;div&gt;但是力不从心，你知道你坚持不到平地了，你重心在下沉，心里盼望着赶快进入另一种稳态，哪怕摔得很难看。&lt;/div&gt;&lt;div&gt;你盼望着摔得两只雪板都不见了才好，如果不能，摔得两只雪板都在脚上也行，无非费点事，脱掉爬起来再穿上。&lt;/div&gt;&lt;div&gt;你想赶快结束这个痛苦的"要摔还没摔，没摔就要摔"的该死状态。&lt;/div&gt;&lt;div&gt;你开始破罐破摔，给自己捣乱，右脚外脚掌向里扣，想引入一个扰动，把自己弄倒。&lt;/div&gt; &lt;div&gt;然而速度太快了，这点扰动简直蚍蜉撼树，无济于事。&lt;/div&gt;&lt;div&gt;你重心继续下沉，两腿僵硬，死盯着雪板的前尖，越来越害怕，心里除了念着"wo cao wo cao"就已经没有了任何建设性意见。&lt;/div&gt;&lt;div&gt;就在这时，你发现你已经开始减速了。抬头看看。是的，恭喜你，你已经到平地了。&lt;/div&gt;&lt;div&gt;这时你腿一软，pia，摔那儿了。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;这不是看辛普森。&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-1512396780298455687?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/1512396780298455687/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=1512396780298455687' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1512396780298455687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1512396780298455687'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/10/blog-post_06.html' title='滑雪板理论'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8417840282670950222</id><published>2011-10-04T10:35:00.001+08:00</published><updated>2011-10-04T10:35:54.854+08:00</updated><title type='text'>上帝存在，帕斯卡说的</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 23px; "&gt;&lt;span class="Apple-style-span" style="font-family: 宋体, Arial; line-height: 25px; "&gt;&amp;ldquo;我们既不知道上帝的存在，也不知道上帝的本质。然而我们将倾向于哪一边呢？&amp;hellip;&amp;hellip;，这里进行的是一场赌博，&amp;hellip;&amp;hellip; 让我们来权衡一下在上帝存在的赌注中的得失。让我们估计这两种可能性，如果你赢了，你赢得所有；如果你输了，你却一无所失。因此，你就不必迟疑去赌上帝的存在吧。&amp;rdquo;&lt;/span&gt;&lt;div&gt; &lt;span class="Apple-style-span" style="font-family: 宋体, Arial; line-height: 25px; "&gt;这是帕斯卡在他的《思想录》中说的。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="line-height: 25px; "&gt;这其实是说一个条件期望。在相信上帝存在的条件下，期望收益是正的。在不相信上帝存在的条件下，期望收益是0。中国民间关于鬼神等无法实证的事物是否存在，流传着一句神似的说法：宁可信其有。&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="line-height: 25px; "&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="line-height: 25px; "&gt;&lt;a href="http://mathforum.org/isaac/problems/prob1.html" target="_blank"&gt;http://mathforum.org/isaac/problems/prob1.html&lt;/a&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;在那个年代，不奇怪，帕斯卡身边有个和他一样对古典概率论痴迷的神经质，比如费马。&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;一个周日的下午，帕斯卡和费马在巴黎的一个咖啡馆觉得无聊，于是玩抛硬币。正面费马得一分，背面帕斯卡得一分，谁先得到10分谁赢，输的买单。&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;15次后，费马得8分，帕斯卡得7分。这时他们玩烦了，决定提前结束这个无聊的游戏。他们不是中国人，不会争着去买单。也不是美国人，不会evenly share the bill。&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;他们太无聊了，决定用一种他们认为公平的方式来结束这个周末。&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;于是帕斯卡管邻桌的教授借来了笔和纸。帕斯卡和费马在几轮争论后，最终接受了费马的解法：&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;游戏将在至多4轮后结束，只需要将2^4种可能的序列枚举出来即可。h表示正面，t表示背面，*表示费马赢。&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;&lt;table cellpadding="1"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;h h h h *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;h h h t *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;h h t h *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;h h t t *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;h t h h *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;h t h t *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;h t t h *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;h t t t&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;t h h h *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;t h h t *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;t h t h *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;t h t t&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;t t h h *&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;t t h t&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;t t t h&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;font size="4"&gt;&lt;tt&gt;t t t t&lt;/tt&gt;&lt;/font&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;显然这16种序列出现的可能性相同，所以11/16的概率是帕斯卡买单了。因此，公平起见，帕斯卡付账单的11/16，费马付剩下的。&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;&lt;br&gt; &lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;帕斯卡当时不会想到，这其实是金融工程中经典的风险资产定价问题。&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;假设账单价格为1法郎，对于帕斯卡来说，他收益是一杯咖啡，成本有两种可能，一种是自己请客，也就是赌输了，支付1法郎，另一种是费马请客，自己一分钱不掏。前者的概率为11/16。帕斯卡可以选择一路赌下去，碰碰运气，不过他选择了无风险投资，避免自己全盘皆输，因为局势已经不利于自己了。费马也同意这个无风险的方案，因为他可以立即套现，什么也没有做就立即赚到1/2-5/16=3/16法郎，落袋为安。&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;为什么帕斯卡此时必须支付11/16法郎？&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;如果帕斯卡支付的少于11/16法郎，那么费马将选择继续赌下去，因为他可以算出来，在当前情形下，赌下去期望的花费更少。&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;如果帕斯卡支付的多于11/16法郎，那么帕斯卡还不如赌下去。&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class="Apple-style-span" face="宋体, Arial"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;所以帕斯卡没有其他选择，&lt;/span&gt;&lt;/font&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;只能支付他的条件期望。&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Times; line-height: normal; font-size: medium; "&gt;当然，这里假设帕斯卡和费马都是风险中性的投资者。要是其中一个或者两个是风险厌恶型或风险偏好型，就另当别论了。&lt;/span&gt;&lt;/div&gt; &lt;/span&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8417840282670950222?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8417840282670950222/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8417840282670950222' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8417840282670950222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8417840282670950222'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/10/blog-post.html' title='上帝存在，帕斯卡说的'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6331550371300042557</id><published>2011-09-02T22:08:00.001+08:00</published><updated>2011-09-02T22:08:19.650+08:00</updated><title type='text'>“我正在说的这句话是谎话”的三种等价说法</title><content type='html'>一&lt;div&gt;什么是真理？&lt;/div&gt;&lt;div&gt;真理就是永远正确的。&lt;/div&gt;&lt;div&gt;什么是永远正确的？&lt;br&gt;&lt;div&gt;没有什么是永远正确的。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;二&lt;/div&gt;&lt;div&gt;我可以满足你三个愿望。&lt;/div&gt;&lt;div&gt;太好了，我的第一个愿望是：你可以满足我1000个愿望。&lt;/div&gt;&lt;div&gt;对不起，这是一个元愿望，我不能满足元愿望。现在你还有两个愿望。&lt;/div&gt;&lt;div&gt;好吧，我的第二个愿望是：你能够满足元愿望。&lt;/div&gt; &lt;div&gt;对不起，这是一个元元愿望，即使我能够满足元愿望，我也不能满足元元愿望。顺便提一句，我不能满足任意阶的元愿望，你懂我的意思，请珍惜你的最后一个愿望。&lt;/div&gt;&lt;div&gt;谢谢。让我来告诉你我的最后一个愿望：我希望我的愿望不被满足。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;（&lt;a href="http://www.eaglefantasy.com/archives/1209"&gt;http://www.eaglefantasy.com/archives/1209&lt;/a&gt;）&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;三&lt;/div&gt;&lt;div&gt;我：你为什么不高兴？&lt;/div&gt;&lt;div&gt;老婆：（摇头）&lt;/div&gt;&lt;div&gt;我：是因为男主角死掉了么？&lt;/div&gt;&lt;div&gt;老婆：（摇头）&lt;/div&gt;&lt;div&gt;我：是因为我不关心你么？&lt;/div&gt;&lt;div&gt;老婆：（点头）&lt;/div&gt;&lt;div&gt;我：我哪儿不关心你了？&lt;/div&gt;&lt;div&gt;老婆：（摇头）&lt;/div&gt;&lt;div&gt;我：是因为我老加班么？&lt;/div&gt;&lt;div&gt;老婆：（点头）&lt;/div&gt; &lt;div&gt;我：可是我现在不是正在关心你么？&lt;/div&gt;&lt;div&gt;老婆：（摇头）&lt;/div&gt;&lt;div&gt;我：你现在是在摇头么？&lt;/div&gt;&lt;div&gt;老婆：（顿了两秒钟，忽然转过来朝我就打）&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6331550371300042557?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6331550371300042557/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6331550371300042557' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6331550371300042557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6331550371300042557'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/09/blog-post.html' title='“我正在说的这句话是谎话”的三种等价说法'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8330064205777506306</id><published>2011-08-28T19:28:00.001+08:00</published><updated>2011-08-28T19:28:45.371+08:00</updated><title type='text'>修改注册表防止sftpdrive试用版过期</title><content type='html'>&lt;div&gt;sftpdirve只能试用45天，到期后卸载重装仍然提示过期不能使用。断言有残留注册表项记录了软件过期状态。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;解决方案：&lt;/div&gt;&lt;div&gt;1、卸载sftpdrive&lt;/div&gt;&lt;div&gt;2、创建一个t.vbs的文本文件，粘贴如下内容并双击该文件运行&lt;/div&gt;&lt;blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; "&gt; WScript.CreateObject(&amp;quot;WScript.Shell&amp;quot;).RegDelete(&amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\SftpDrive\&amp;quot;)&lt;br&gt;WScript.Echo(&amp;quot;Done!&amp;quot;)&lt;/blockquote&gt;&lt;div&gt;3、重新安装sftpdrive&lt;/div&gt;&lt;div&gt;Enjoy~&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8330064205777506306?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8330064205777506306/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8330064205777506306' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8330064205777506306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8330064205777506306'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/08/sftpdrive.html' title='修改注册表防止sftpdrive试用版过期'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-4343994470814036962</id><published>2011-08-14T15:45:00.001+08:00</published><updated>2011-08-14T15:45:26.641+08:00</updated><title type='text'>期权定价</title><content type='html'>读研的时候，很多同学都在研究期权定价，后来去了金融、保险、证券之类的地方，挣得不少，当然喝酒是免不了的。&lt;div&gt;最近迫于某些方面的压力，想换份工作，自然想到这些同学当年学的东西，便也弄了本书来看。还挺有趣的。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;第一章中一个漂亮的结论：&lt;/div&gt;&lt;div&gt;在一个简单的模型中，期权的价格与股票上涨或下跌的概率无关。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;假设：&lt;/div&gt;&lt;div&gt; 银行存款利率确定并且已知为a&amp;gt;0，即今天存入1元，明天可以取出1＋a元&lt;/div&gt;&lt;div&gt;世界上仅有一只股票，收益率随机：今天买1元的股票，明天卖得1＋u元的概率为p，卖得1+d元的概率为1－p，d&amp;lt;u，0&amp;lt;p&amp;lt;1，别无它价&lt;/div&gt;&lt;div&gt;存款和股票的交易量可以为任意实数：连续、无界、可负（卖空）。&lt;/div&gt;&lt;div&gt;市场不允许没有初始投资的五风险利润－－无套利原则－－不存在空手套白狼的投资方案。&lt;/div&gt; &lt;div&gt;今天花c元买1份执行价为1＋s的看涨期权，d&amp;lt;s&amp;lt;u，明天得到u-s元的概率为p，什么也得不到的概率为1-p。&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;定理：&lt;/div&gt;&lt;div&gt;c＝x+y&lt;/div&gt;&lt;div&gt;其中(x, y)是如下方程组的解&lt;/div&gt;&lt;div&gt;x(1+a)+y(1+u)=u-s&lt;/div&gt;&lt;div&gt;x(1+a)+y(1+d)=0&lt;/div&gt;&lt;div&gt;证明：&lt;/div&gt;&lt;div&gt;首先方程组的解存在唯一，因为矩阵&lt;/div&gt; &lt;div&gt;1+a, 1+u&lt;/div&gt;&lt;div&gt;1+a, 1+d&lt;/div&gt;&lt;div&gt;的行列式＝(1+a)(d-u)&amp;lt;0&lt;/div&gt;&lt;div&gt;其次，&lt;/div&gt;&lt;div&gt;若c&amp;gt;x+y，则今日卖空1份期权，套现c元以(x, y)投资银行和股市，剩下c-x-y&amp;gt;0落入腰包。明日若股市上涨，则兑现期权付出u-s元，在银行和股市的资产x(1+a)+y(1+u)恰好可以填平这个窟窿，若明日股市下跌，则在银行和股市的资产x(1+a)+y(1+d)＝0亦无需兑现期权。总之无本净赚c-x-y。&lt;/div&gt; &lt;div&gt;&lt;span class="Apple-style-span"&gt;若c&amp;lt;x+y，则今日以(-x, -y)卖空银行和股市套现以买入1份期权，剩下x+y-c&amp;gt;0落入腰包。若明日股市上涨，则期权收入u-s元，恰好用来还清在银行和股市的负债x(1+a)+y(1+u)，若明日股市下跌，则在银行和股市的资产x(1+a)+y(1+d)＝0亦无需兑现期权。总之无本净赚&lt;/span&gt;x+y-c&lt;span class="Apple-style-span"&gt;。&lt;/span&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-4343994470814036962?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/4343994470814036962/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=4343994470814036962' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4343994470814036962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4343994470814036962'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/08/blog-post.html' title='期权定价'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-7637688599136534295</id><published>2011-05-21T01:43:00.001+08:00</published><updated>2011-05-21T01:43:44.408+08:00</updated><title type='text'>自反+反向传递=&gt;完全</title><content type='html'>今天终于证明了这样一个定理：偏序是全序，当且仅当可反向传递。藉此可以理偏序和全序的本质差异。&lt;br&gt;&lt;br&gt; 回忆&lt;br&gt; 偏序=传递+反对称+自反&lt;br&gt; 全序=传递+反对称+完全&lt;br&gt;&lt;br&gt;E是一个集合，≤是E上的一个二元关系，称&lt;br&gt;自反：a≤a，对于任意a∈E&lt;br&gt;完全：a≤b或b≤a，对于任意a, b∈E（显然完全蕴含自反）&lt;br&gt;反对称：若a≤b且b≤a，则a=b&lt;br&gt;反向传递：a≤b不成立且b≤c不成立，则a≤c也不成立，对于任意a, b, c∈E&lt;br&gt;&lt;br&gt;求证，若≤自反和反向传递，则≤完全&lt;br&gt;证明：假设不然，即存在a, b∈E，使得a≤b不成立且b≤a不成立，则由反向传递，得a≤a不成立，与≤自反矛盾&lt;br&gt; &lt;br&gt;求证：若≤完全、反对称、传递，则≤反向传递&lt;br&gt;证明：对于任意a, b∈E，若a≤b不成立且b≤c不成立，&lt;br&gt;由≤完全，有b≤a且c≤b，&lt;br&gt;由≤传递，有c≤a&lt;br&gt;假设a≤c成立，则&lt;br&gt;由≤反对称，有a=c，&lt;br&gt;代入b≤a且c≤b，得到b≤a≤b，&lt;br&gt;由≤b反对称，有a=b&lt;br&gt;代入a≤b不成立，得到a≤a不成立&lt;br&gt;与自反矛盾，故而假设不成立&lt;br&gt;■&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-7637688599136534295?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/7637688599136534295/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=7637688599136534295' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7637688599136534295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7637688599136534295'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/05/blog-post.html' title='自反+反向传递=&gt;完全'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-647740103503550012</id><published>2011-04-15T22:05:00.001+08:00</published><updated>2011-04-15T22:05:29.203+08:00</updated><title type='text'>也发美国商务签证面经</title><content type='html'>公司给约了中午11点15的面签，三个同事一起去的，临出门前听说还要一张51mm×51mm的B1签证专用相片，惊慌失措，没有！&lt;br&gt;后来又听说如果网上提交的电子版照片足够清晰的话，没有纸板相片也可以，就直接去了。&lt;br&gt;上午十点从公司打车过去，不到半个小时。美国大使馆门前有很多人，所以下车后看哪里人多就好了。司机、咨询机构的服务员和路边的清洁工都知道。我们傻呵呵的还差点进了马来西亚驻京办。在没风的天气里，马来西亚国旗和美国国旗很难分辨。&lt;br&gt; 排队5分钟后，院子大门口警卫会检查护照和确认页。&lt;br&gt;再排队10分钟进建筑物的门，建筑物门前的工作人员会每次放进去约10个人，门前有垃圾桶，可以扔路边被塞的小广告。&lt;br&gt;进去之后第一道关卡，出示护照和确认页。&lt;br&gt;往里走第二道关卡，安检，存手机，他会给你个牌。&lt;br&gt;再往里走第三关，检查材料：护照、确认页、邀请函。确认页个人信息旁边要用中文写名字、电码、公司地址、公司名称。&lt;br&gt;这关比较有趣，每个时刻会随机出现若干可以服务的窗口，其他窗口不服务，但是可以把你重定向到某个可服务的窗口。每个窗口服务6个人之后，会停止服务，然后把这6个人编成一队。注意如果你所在的窗口服务3、4个人（包括你）之后，这个窗口没人来了，而其他某个窗口排了队，你可以去叫几个人过来，（人肉优化），这样可以加速你所在的窗口编队，尽早进入下一关。队长会领到一个有颜色的牌子。完成编队的窗口会恢复服务，如果他不是去忙别的的话。这关的窗口都是中国人在服务。大约耗时15分钟。&lt;br&gt; 第四关：按手印。跟队去按手印，左手三个手指、右手三个手指、两个大拇指，如果没按清楚他会提示你重新按。这个窗口是美国人服务，但是会讲中文。你不用说什么话，照他说的做就好了。排队等候大约15分钟。&lt;br&gt;第五关：面谈。排队等候大约70分钟。典型的单队列多窗口服务，效率已经很高了。因为到了中午吃饭时间，窗口可能会随时突然关闭，这时你将被重定向到其他窗口而不用像火车站一样重新排70分钟的队。问题内容因人而异，他可能会对你的公司业务感兴趣，问得很具体，我准备了一些面签常见问题，不过没想到他问：你们公司是如何帮助客户挣钱的？哇塞，就Business Model那个Page没好好看，太失败了。只好凭着印象胡扯了一通，不过他只在我打奔儿的时候盯着我看了一会儿，真正等我扯上了，他就一边点头一边忙别的去了。然后还问了家里的很多事情，你爸干什么的，在哪里，你妈干什么的，在哪里，你有没有移民倾向。问得很直接：你是否打算移民。直接回答否就好了。面试官是美国人，但是会讲中文，我前面的几个人一直说中文，也可以，但是如果是去留学就必须说英文。我因为之前背了一些面签常见问题都是用英文准备的，所以就赶上背过的问题就用英文，赶上没背过的问题就用中文，中英文夹杂着糊弄过去了。面试官似乎对此毫不介意。如果读过工程物理或空间科学的，可能会被Check，好像怎么解释也不行，被Check就是一审不过，回去等消息，可能过，也可能要重申。简历有可能会被看，不过我的没被看。51mm×51mm的相片这一路也没人找我要过。&lt;br&gt; 出来拿牌子取手机。&lt;br&gt;第六关：去邮局办快递或自取。自取可以多个人一起取，比较便宜。可能是因为已经到了中午一点，几乎没用排队。&lt;br&gt;出来就是亮马桥地铁口，我们饿得眼冒金星没看见，又打了个的，回公司了。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-647740103503550012?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/647740103503550012/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=647740103503550012' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/647740103503550012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/647740103503550012'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/04/blog-post.html' title='也发美国商务签证面经'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-4665598656224978044</id><published>2011-03-06T23:34:00.001+08:00</published><updated>2011-03-06T23:34:10.242+08:00</updated><title type='text'>2011推荐系统高峰论坛――参后感</title><content type='html'>最近家事繁多，好久没更新Blog了。&lt;br&gt;今天参加&lt;br&gt;&lt;a href="http://www.resysforum.org/"&gt;http://www.resysforum.org/&lt;/a&gt;&lt;br&gt;2011推荐系统高峰论坛，说来小有周折。消息刚放出来不久，同事zhangyifei就组织我们几个FreeWheeler报名了，结果被拒了。然后前几天我忽然收到resys内部人士邀请，让我去了。猜着可能是看在我是resys第一次线下活动的speaker之一的面子上吧。总之作为已经成为resys领域outer的我很是喜出望外，今天一大早，就背着小板凳去了。想必像我这样"走后门"进去的，顶多是张站票罢。不料竟然还有地方坐，让我很是Happy。在我之后进来的一些人，站在会场后面，让我很如坐针毡，很想把小板凳掏出来给他们，可是给谁不给谁呢，都不认识，再招他们互相谦让得打起架来就不好了，而且做小板凳上恐怕就看不见大屏幕了。算了，还是悄悄坐在我自己的位子上吧。&lt;br&gt; &lt;br&gt;&lt;br&gt;据谷文栋说，今天地大这场是resys第五次线下活动了，有1000多人报名，而第一次活动只有30来个人。第一次绝大多数是热心搞算法的草根或学生。这次，世界顶级学者、搞工程的、搞产品设计的、搞系统运维的，"啥都有"。&lt;br&gt;&lt;br&gt;Koren介绍了Y!的一些最新研究，是今天最好的一个lecture。&lt;br&gt;分析了一下Netflix样本方差来源，超过一半无法用模型解释，可解释的成分中，"公认怎么样+个体打分松紧程度"占了一大部分。&lt;br&gt; 推荐系统现在的发展，越来越多的和用户研究掺和在一起了。User Research原本是一个独立的功能机构，一提它，大多数人的第一反应是眼动仪和心理学专家。现在推荐系统揉进去，不仅多了一些统计学习的东西，而且日益工程化了。&lt;br&gt;用户研究，很直接的一个手段就是问卷调查。如果受某些限制只能问K个形如"你喜欢item i吗"这样问题，那么这K个item如何选取？Koren给出了一个cost function，使得给定的推荐算法在这组item上均方根误差最小，也就是说，当前模型能够较为准确刻画这组item，这样问用户，才能较为准确的理解用户的喜好。&lt;br&gt; 另一个方法是决策树，它每次只问用户一个选择题，等用户选择完以后，根据用户的回答再问第二个问题，这样更为有效。&lt;br&gt;这两个办法都无法回避的问题是：用户可以回答"没听说过"，这样你就没办法知道用户的喜不喜欢，就白问了。所以不能轻易问太小众的item。&lt;br&gt;推荐系统应用到"问答社区"，就是把好问题推送给能高质量回答它的人。&lt;br&gt;另外，它提出置信度作为评价推荐系统的一个指标，可以改善推荐质量，例如可以对置信度低的预测点给予一定的"高斯模糊"。而置信度的计算，其实每一种模型都有给出，可惜人们往往无视他存在的意义。&lt;br&gt; &lt;br&gt;&lt;br&gt;淘宝作为spnsor有两场lecture，第一场比较概括，有三点引起了我的思考。&lt;br&gt;1、淘宝在推自动化数据运行，逐步替代人肉管理商品目录。随着广告市场的发展，我认为以后ad trafficker也有自动化的趋势，一些智能工具的价值将得到凸显。&lt;br&gt;2、数据可视化和交互是数据挖掘的重要手段。我认为，他不仅是数据探索的工具，更是结果表示的方法。&lt;br&gt;3、淘宝今年成立了研究院。没搜到，不知为何物，关注中。&lt;br&gt;&lt;br&gt; 淘宝第二场&lt;br&gt;1、推荐与广告的关系：掐。推荐系统是营销部做的，旨在提高更多long tail卖家的关注度，改善消费者的购物流程，优化整站生态。广告是广告部做的，是拿卖家钱，就要像狗一样给卖家效力，处处为给钱的人着想。&lt;br&gt;2、用户在不同阶段有不同的推荐需求，按时间顺序是发散、收敛、再发散的过程&lt;br&gt;四处闲逛阶段：各种大跨度的试探性推荐，揣测闲逛者的消费意图&lt;br&gt;精益求精阶段：发现用户开始货比三家，猎物相似了，那就要把推荐的范围逐渐缩小了，加速消费者下订单、支付的进程，说，嗨哥们儿别犹豫了，就它了！这时候再给他推荐一些天马行空的东西，没准人家一走神点走了，就不买这个了，去东逛逛西逛逛，一拍大腿啊呀三个小时过去了，人家说我得干点正事了，得，把浏览器关了。&lt;br&gt; 意犹未尽阶段：这时候再开展你&amp;quot;啤酒=&amp;gt;尿布&amp;quot;的数据挖掘伎俩，推荐些哪怕看似不想关，却在统计数字上有关联的商品，即使推荐的莫名其妙，也无伤大雅，反正最坏情况就是就此打住，没准弄好了还能神奇的再下一城。&lt;br&gt;3、实时训练与预测。在燕莎、在双安、在大悦城，好的导购能通过消费者嘴角一个0.13秒的翕动，在0.013秒内判断其消费意图并推荐合适的商品，电子商务的推荐算法必须要向这样的导购一样。慢了，消费者就把tab关了，或者已经买完走了玩别的去了。&lt;br&gt; &lt;br&gt;百度，大纲级&lt;br&gt;很适合我的口味，讲了很多我很有兴趣的学术界研究的课题，比如Learning to Rank。&lt;br&gt;演讲者高屋建瓴地将机器学习的问题归为三个：回归、分类和密度估计。听着很像统计学习的口吻，不知道工业界搞商业智能的兄弟们知不知道密度估计有什么应用，反正孤陋寡闻的我是闻所未闻。&lt;br&gt;五个成分：数据、机器表示、目标函数、cost function和evaluator&lt;br&gt;现实世界中的学习，几乎都是PU learning（partial learning），大量数据缺失，大量未标定数据。&lt;br&gt; 一个我不太熟悉的模型：Prob Latent Topic。好像是十年前特别火的一个模型，读研时看文献综述的时候一坨一坨这玩意儿，但是在netflix price中表现很差，也可能是我当时实现的不好，又没机器去没日没夜的调参。总之，玩不转。三个方法：EM/Gibbs Sampling/梯度下降。&lt;br&gt;Learning to Rank三个方法：SVM、Boost和NN。可惜因为空间复杂度太高，没什么工业应用。&lt;br&gt;一个观点：ReSys以后将成为互联网应用的基础设施。哇塞，太牛了，听的让我热血沸腾，我以前只听说有人争论推荐系统究竟是个feature还是个product。基础设施是什么？在我脑海中就是磁盘阵列、路由器之类能被会计算作固定资产的东西。以后推荐系统也是，太牛了。&lt;br&gt; 好的推荐系统的四要素：UI/UX占40%（难怪PM有饭吃），Data占30%，领域知识占20%，算法占10%。听的在坐的学生们心灰意冷，纷纷微博上墙感慨人生。&lt;br&gt;推荐系统研究的未来发展方向：领域专家系统、迁移学习和Temporal-bias。&lt;br&gt;还提到了Behavior Targeting：把恰当的广告推荐给对他最有用的用户。在我刚踏出校门的时候，我觉得这简直太美妙了。现在的我觉得，这想法太前卫了。&lt;br&gt;&lt;br&gt;前Google研究员&lt;br&gt; 将MapReduce在机器学习中的应用，比较工程。对于一个C++程序员来说，听的非常实在，没有一句话是飘在空中的，都是code。&lt;br&gt;学到一点：用BDB的B+树做外排，太毁硬盘了，因为要频繁读写一个Block。应该用内排加外部merge sort。&lt;br&gt;&lt;br&gt;Hulu&lt;br&gt;这个之前聊过，很多都听过了。只记了一些新鲜的。&lt;br&gt;Hulu没有Live Sport。&lt;br&gt;内容分两种，On air show和lib show，On air show在Hulu上只能放最近5集，因为之后DVD上市，要是还在Hulu上能看到，谁还去买？&lt;br&gt; Seasonality是时间序列分析的重要话题，Hulu的Seasonality特征鲜明：暑期、圣诞是On air show的两个波谷。连续剧每周出一集。&lt;br&gt;Catch-up效应：show的日访问量关于days after release基本上是负指数曲线。&lt;br&gt;广告效果评估：Brand recall。奇怪FreeWheel研发这边怎么没人提过这个，估计美国那边在弄吧。&lt;br&gt;预测匿名流量的Demograph info，用于Demographic targeting。&lt;br&gt; Demographic targeting是广告主最容易接受的targeting方式，其次是Geo, daypart, category。。。&lt;br&gt;Behavior targeting的逻辑：请第三方来证明Hulu存在用户群A，具有购买商品P的习惯。然后Hulu通过某种方式，将用户群A具象化到一个形式化的targeting范围T里。向商品P的卖家或品牌广告商推荐：将广告targeting在T上吧！&lt;br&gt;在场有人质疑：品牌广告商需要支付更高的CPM来通过Behavior targeting保持现有用户群吗？以我对广告商的理解，是需要的，因为以他们的非理性程度和对人性深刻的把握，足以做出任何在常人看来是蠢事的事。&lt;br&gt; &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-4665598656224978044?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/4665598656224978044/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=4665598656224978044' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4665598656224978044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4665598656224978044'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/03/2011.html' title='2011推荐系统高峰论坛――参后感'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-4132677416167061432</id><published>2011-02-20T19:40:00.001+08:00</published><updated>2011-02-20T19:40:16.588+08:00</updated><title type='text'>A spike</title><content type='html'>&lt;p class="mobile-photo"&gt;&lt;a href="http://3.bp.blogspot.com/-lQQf9t0azAY/TWD9oLNskPI/AAAAAAAACyE/mPfJV-kWRd0/s1600/timeseries-716589.png"&gt;&lt;img src="http://3.bp.blogspot.com/-lQQf9t0azAY/TWD9oLNskPI/AAAAAAAACyE/mPfJV-kWRd0/s320/timeseries-716589.png"  border="0" alt="" id="BLOGGER_PHOTO_ID_5575735205331505394" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-4132677416167061432?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/4132677416167061432/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=4132677416167061432' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4132677416167061432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4132677416167061432'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/02/spike.html' title='A spike'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-lQQf9t0azAY/TWD9oLNskPI/AAAAAAAACyE/mPfJV-kWRd0/s72-c/timeseries-716589.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-1826138668402077154</id><published>2011-01-11T22:56:00.001+08:00</published><updated>2011-01-11T22:56:48.668+08:00</updated><title type='text'>马尔科夫链蒙特卡洛（二）</title><content type='html'>&lt;HTML&gt;&lt;HEAD&gt;&lt;STYLE id="styletagforeditor"&gt;body { border: 0px; font-family:verdana; font-size :10pt; direction :ltr; background-color :#ffffff; line-height :1.2; padding:0.5in 1in 0.5in 1in;margin:0in}&lt;/STYLE&gt;&lt;STYLE id="styletagtwoforeditor"&gt;table { font-size: 10pt;}&lt;/STYLE&gt;&lt;LINK href="https://css.zohostatic.com/writer/Jan_06_2011_4/https/styles/editor.css" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;META content="{&amp;quot;defaults&amp;quot;:[&amp;quot;101ln&amp;quot;],&amp;quot;counter&amp;quot;:0}" id="zohotab"&gt;&lt;/HEAD&gt;&lt;BODY class style&gt;&lt;H1 id="zw-12d7565c4fdvtPp2l13cce8" style="margin-bottom: 12pt; margin-top: 0pt; text-align: center;"&gt;&lt;SPAN id="zw-12d756ede60qwjB_J13cce8"&gt;马尔科夫链蒙特卡洛（二）&lt;/SPAN&gt;&lt;/H1&gt;&lt;P id="zw-12d756efd4b2zkB3f13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d756efd4b0wXAZ213cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12d756f4be9sPQw2c13cce8"&gt;来，做一道书后习题：用MCMC生成服从Poisson分布的随机数。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d7571485bMhLdgs13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d7571c0faYw4Lxg13cce8"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-12d7571c158zIouVI13cce8"&gt;习题嘛，瞎折腾，本来R就有现成的函数：rpois&lt;/SPAN&gt;&lt;BR id="zw-12d7571c159UQUqrh13cce8"&gt;&lt;SPAN id="zw-12d75729b28ZgdSFS13cce8"&gt;​既然MCMC，首先要构造一个转移规则。考虑射线上的随机游动。从0出发，必然走到1，从k出发(k&amp;gt;0)，一半的概率向左右一半的概率向右走。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d7574fbb1QysYBH13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d7574fbb1waJrA13cce8"&gt;计算接受概率：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d7575e56bYrYmJ113cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;IMG align="middle" id="latexexpressionimage1" imagesize="120" latexexpression="r(k,k+1)=min\{1, \frac{\pi(k+1)T(k+1,k)}{\pi(k)T(k,k+1)}\}=min\{1, \frac{1}{\Delta(k)}\}" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f216ae078e59725e51c6fba91d3b3f13270" style="width: 427px; height: 40px;"&gt;&lt;/P&gt;&lt;P id="zw-12d757c0680kxaOh213cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;IMG align="middle" id="latexexpressionimage" imagesize="120" latexexpression="r(k,k-1)=min\{1, \frac{\pi(k-1)T(k-1,k)}{\pi(k)T(k,k-1)}\}=min\{1, \Delta(k-1)\}" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f218c7e685c70d9375d8d4b109cceb27fa4" style="width: 451px; height: 40px;"&gt;&lt;/P&gt;&lt;P id="zw-12d757c068apyq_tK13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d757c25e5IWJdGN13cce8"&gt;其中&lt;IMG align="middle" id="latexexpressionimage3" imagesize="120" latexexpression="\Delta(k)=\frac{P_{k}}{P_{k+1}}=\frac{e^{-\lambda}\frac{\lambda^{k}}{k!}}{e^{-\lambda}\frac{\lambda^{k+1}}{(k+1)!}}=\frac{k+1}{\lambda}" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f215c666616a8624176fc12d8bb124e8969" style="width: 255px; height: 52px;"&gt;​&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d75801aa7N_4RXX13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d7580d580XLhm7813cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12d75820a46zSoUmx13cce8"&gt;其中k&amp;gt;1。边界0和1处需要稍微特殊处理一下。注意到，概率密度函数&lt;/SPAN&gt;&lt;SPAN id="zw-12d75837cfbiIV_QE13cce8"&gt;求比值之后，我们再也不用算指数和阶乘了。剩下的事情，就是不停地走，走每一步时只需要回答：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d758534c7XaWNZ613cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d7586d6223gnBR13cce8"&gt;1）往哪边走？---用随机游动的trial distribution&lt;/SPAN&gt;&lt;SPAN id="zw-12d7586d6551F732q13cce8"&gt;：一半的概率向左右一半的概率向右走&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d75854d9b7smAzk13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d75854d9bPwGxYR13cce8"&gt;2）真的要走到那里去吗？---使用上面算的接受概率（MCMC的核心）&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d75872dcaNgeOP13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d75872dcai-VxXQ13cce8"&gt;下面是R源代码&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d75878ad6wIuIq613cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;BR id="zw-12d7587d263vWAMik13cce8"&gt;&lt;SPAN id="zw-12d75878ad6wyHFLm13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d7587d261jvTHEJ13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d758a190dXXbrq13cce8" style="font-family: lucida console;"&gt;p=function(s){&lt;/SPAN&gt;&lt;BR id="zw-12d758874a72rcZOh13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874a8zE_TUJ13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; runif(1) &amp;lt;= s&lt;/SPAN&gt;&lt;BR id="zw-12d758874a8oTCW1C13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874a9JNnv-z13cce8" style="font-family: lucida console;"&gt;}&lt;/SPAN&gt;&lt;BR id="zw-12d758874a9bDyJSm13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874a9sJSGz813cce8" style="font-family: lucida console;"&gt;#pi_rate(k,lambda)=pi(k,lambda)/pi(k+1,lambda)&lt;/SPAN&gt;&lt;BR id="zw-12d758874aaUU2jDE13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874aaU74qv13cce8" style="font-family: lucida console;"&gt;pi_rate=function(k,lambda){&lt;/SPAN&gt;&lt;BR id="zw-12d758874aatSy4xm13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874abs3PsOT13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (k+1)/lambda&lt;/SPAN&gt;&lt;BR id="zw-12d758874acDPeuGS13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874acLy6dtn13cce8" style="font-family: lucida console;"&gt;}&lt;/SPAN&gt;&lt;BR id="zw-12d758874ac1JxTRA13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874aduz8VAA13cce8" style="font-family: lucida console;"&gt;accept_walk_left_from=function(k,lambda){&lt;/SPAN&gt;&lt;BR id="zw-12d758874aejgPMJ13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874aeW5tH7213cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (k==1)&lt;/SPAN&gt;&lt;BR id="zw-12d758874afl_9ePH13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874afZPzK7J13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; min(1, 2 / lambda)&lt;/SPAN&gt;&lt;BR id="zw-12d758874b0Ti6K313cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874b1OfD_Z13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/SPAN&gt;&lt;BR id="zw-12d758874b1E6-Ifq13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874b2gseMQ113cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; min(1, pi_rate(k - 1, lambda))&lt;/SPAN&gt;&lt;BR id="zw-12d758874b20wFmDm13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874b3FXSr1n13cce8" style="font-family: lucida console;"&gt;}&lt;/SPAN&gt;&lt;BR id="zw-12d758874b4CnJYR913cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874b5vU-TG13cce8" style="font-family: lucida console;"&gt;accept_walk_right_from=function(k, lambda){&lt;/SPAN&gt;&lt;BR id="zw-12d758874b5dZFGuZ13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874b6re0or713cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (k==0)&lt;/SPAN&gt;&lt;BR id="zw-12d758874b7g5RrGp13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874b8aHAIWA13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; min(1, lambda / 2)&lt;/SPAN&gt;&lt;BR id="zw-12d758874b9ZG_Qha13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874baojCQYT13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/SPAN&gt;&lt;BR id="zw-12d758874baFSwRa13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874bb_jLeTz13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; min(1, 1 / pi_rate(k, lambda))&lt;/SPAN&gt;&lt;BR id="zw-12d758874bc2fNZly13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874bdtXJT4G13cce8" style="font-family: lucida console;"&gt;}&lt;/SPAN&gt;&lt;BR id="zw-12d758874beKgdSkG13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874bfKWtVqf13cce8" style="font-family: lucida console;"&gt;transition_from=function(k, lambda){&lt;/SPAN&gt;&lt;BR id="zw-12d758874c00YRdjc13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874c12FvcDe13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (k==0){&lt;/SPAN&gt;&lt;BR id="zw-12d758874c20VT8fs13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874c4egd-Ei13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (p(accept_walk_right_from(k, lambda)))&lt;/SPAN&gt;&lt;BR id="zw-12d758874c5bX0_O13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874c6y2_a8C13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/SPAN&gt;&lt;BR id="zw-12d758874c7xaXdku13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874c8FdEc2c13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/SPAN&gt;&lt;BR id="zw-12d758874c99EHL9R13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874caHP2tQ13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/SPAN&gt;&lt;BR id="zw-12d758874ccPIgu1r13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874cde6uNqm13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR id="zw-12d758874ceepPdzZ13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874cfRLSIOP13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else{&lt;/SPAN&gt;&lt;BR id="zw-12d758874d1O2CZb213cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874d2esNI713cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (p(0.5)){&lt;/SPAN&gt;&lt;BR id="zw-12d758874d3jYDdz613cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874d4w6XJYC13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (p(accept_walk_right_from(k, lambda)))&lt;/SPAN&gt;&lt;BR id="zw-12d758874d6f1l7dU13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874d7jAPvv13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; k + 1&lt;/SPAN&gt;&lt;BR id="zw-12d758874d9GGd7Hy13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874daXjnKi413cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/SPAN&gt;&lt;BR id="zw-12d758874ddadUsX613cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874e0gl8P113cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; k&lt;/SPAN&gt;&lt;BR id="zw-12d758874e3PxDUmz13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874e6amKD-R13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;/SPAN&gt;&lt;BR id="zw-12d758874e9pFIOrT13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874edcX4u0d13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (p(accept_walk_left_from(k, lambda)))&lt;/SPAN&gt;&lt;BR id="zw-12d758874f0UbTXU113cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874f4FITypv13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; k - 1&lt;/SPAN&gt;&lt;BR id="zw-12d758874f7lNmJpP13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758874fbhfbl_g13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/SPAN&gt;&lt;BR id="zw-12d758874feHXABq13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d75887502tzWptk13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; k&lt;/SPAN&gt;&lt;BR id="zw-12d75887509vYQT2t13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d7588750d3l43hh13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR id="zw-12d75887510a3UT-a13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d75887512kQkmer13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR id="zw-12d75887514ywg8sB13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d75887515oQ0iRh13cce8" style="font-family: lucida console;"&gt;}&lt;/SPAN&gt;&lt;BR id="zw-12d75887517959Jn13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d75887519Gip8dX13cce8" style="font-family: lucida console;"&gt;mcmc_poisson=function(n,lambda){&lt;/SPAN&gt;&lt;BR id="zw-12d7588751bpj0-4a13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d7588751ddPBVsC13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f=0&lt;/SPAN&gt;&lt;BR id="zw-12d7588751f2FPnNq13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d75887521D3t2A13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i in 1:n){&lt;/SPAN&gt;&lt;BR id="zw-12d75887523doagkK13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d75887525sZ-bMi13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; f[i+1]=transition_from(f[i], lambda)&lt;/SPAN&gt;&lt;BR id="zw-12d75887527AcnFGd13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d75887529EJghKu13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR id="zw-12d7588752bKjVoKV13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d7588752dKj7sSr13cce8" style="font-family: lucida console;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f&lt;/SPAN&gt;&lt;BR id="zw-12d75887530rZbWxi13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d75887532c-iITU13cce8" style="font-family: lucida console;"&gt;}&lt;/SPAN&gt;&lt;BR id="zw-12d75887534eM78y_13cce8" style="font-family: lucida console;"&gt;&lt;BR id="zw-12d75887536sa3QhA13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d758875391O4Lpe13cce8" style="font-family: lucida console;"&gt;samples=tail(mcmc_poisson(20000, 5), 10000)&lt;/SPAN&gt;&lt;BR id="zw-12d7588753csTtXzG13cce8" style="font-family: lucida console;"&gt;&lt;SPAN id="zw-12d7588753e20ocZn13cce8" style="font-family: lucida console;"&gt;hist(samples)&lt;/SPAN&gt;&lt;BR id="zw-12d75887540amgtT113cce8"&gt;&lt;BR id="zw-12d7588741fEljJ113cce8"&gt;&lt;SPAN id="zw-12d7588741fg0sVr13cce8"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d7587d2ef29gIMz13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;BR id="zw-12d7587d383PPsKkP13cce8"&gt;&lt;SPAN id="zw-12d7587d2ef6HKOO113cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d7587d37eOducdj13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d7587d37e9qKQh213cce8"&gt;下面是一次实验结果的直方图，看起来和Poisson分布很像吧&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d75884a7afpSKA13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d75884a7aa8w9xi13cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d75884d51lOR2p713cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d75884d52n5sHN13cce8"&gt;&lt;IMG align="bottom" alt id="zw-12d758c0766mpXsxR13cce8" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f21dc6658fb2cc4e58438b005f21d57242e" style="opacity: 1; width: 586px; height: 585px;" title="Lambda=5"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d75935498__Rvm13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;BR id="zw-12d759356a61zvkuU13cce8"&gt;&lt;SPAN id="zw-12d759354988o0IoM13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d759356a4V_Wrop13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d759356a4f5mKEv13cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-1826138668402077154?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/1826138668402077154/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=1826138668402077154' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1826138668402077154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1826138668402077154'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/01/blog-post_11.html' title='马尔科夫链蒙特卡洛（二）'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-4474226872082708513</id><published>2011-01-08T21:27:00.001+08:00</published><updated>2011-01-08T21:27:29.890+08:00</updated><title type='text'>马尔科夫链蒙特卡洛（一）</title><content type='html'>&lt;HTML&gt;&lt;HEAD&gt;&lt;STYLE id="styletagforeditor"&gt;body { border: 0px; font-family:verdana; font-size :10pt; direction :ltr; background-color :#ffffff; line-height :1.2; padding:0.5in 1in 0.5in 1in;margin:0in}&lt;/STYLE&gt;&lt;STYLE id="styletagtwoforeditor"&gt;table { font-size: 10pt;}&lt;/STYLE&gt;&lt;LINK href="https://css.zohostatic.com/writer/Dec_15_2010_3/https/styles/editor.css" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;META content="{&amp;quot;defaults&amp;quot;:[&amp;quot;101ln&amp;quot;],&amp;quot;counter&amp;quot;:0}" id="zohotab"&gt;&lt;/HEAD&gt;&lt;BODY class style&gt;&lt;H1 id="zw-12d6520b4dapkpU5113cce8" style="margin-bottom: 12pt; margin-top: 0pt; text-align: center;"&gt;&lt;SPAN id="zw-12d65219d548Lubb513cce8"&gt;马尔科夫链蒙特卡洛（一）&lt;/SPAN&gt;&lt;/H1&gt;&lt;P id="zw-12d6521b09b4n6jvn13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d6521b09bAjiscj13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12d65223e99cm-NPc13cce8"&gt;传统的马尔科夫链研究，是给定转移规则，关注平稳分布，而马尔科夫链蒙特卡洛研究中，我们知道想要的平稳分布，任务是构造有效的转移规则，使得它的平稳分布就是想要的那个。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d6523ba49Uv3mrj13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d6523ba49wEW9FF13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12d65264355zBXgu213cce8"&gt;记&lt;IMG align="middle" id="latexexpressionimage1" imagesize="120" latexexpression=" \pi(x)" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f21f612cd4f2ba9c933b411e6a1bc8d814e" style="width: 30px; height: 17px;"&gt;为目标平稳分布。Matropolis-Hastings算法的一般框架是：寻找一个函数T(x, y)满足T(x,y)&amp;gt;0当且仅当T(y,x)&amp;gt;0，&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65ccc7efe6XU713cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65ccc7f0zZxcCF13cce8"&gt;1）​&lt;/SPAN&gt;&lt;SPAN id="zw-12d65ccc7f0VWAT813cce8"&gt;给定当前第t步的状态x[t]，依照分布T(x[t], y)随机采y&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d652c7618LZAfB-13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d652c7618sTE1G13cce8"&gt;2）​&lt;/SPAN&gt;&lt;SPAN id="zw-12d652d3222mQsFbL13cce8"&gt;下一步状态x[t+1]以概率r(x[t],y)等于y（接受，转移），以剩余的概率等于x[t]（拒绝，留下）&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d652f2367mb7m3B13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d6531b564wsMFfP13cce8"&gt;其中&lt;/SPAN&gt;&lt;IMG align="middle" id="latexexpressionimage2" imagesize="120" latexexpression=" r(x,y)= \frac{\delta(x,y)}{\pi(x)T(x,y)}" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f215fdcb2393fb346c6ff618cba0cdb1d18" style="width: 154px; height: 40px;"&gt;&lt;SPAN id="zw-12d6531b565PmO5g13cce8"&gt;,里面的分子是某个对称函数。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65cc8ef9c80HG13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d65cc8efapY8A2I13cce8"&gt;则第t步从状态x转移到y的概率&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d6532f6f5VknaiK13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d6532f6f5pXujn13cce8"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-12d6532f6f58Y4Fs913cce8"&gt;&lt;/SPAN&gt;&lt;IMG align="middle" id="latexexpressionimage3" imagesize="120" latexexpression="P(x[t+1]=y|x[t]=x)=A(x,y)=T(x,y)r(x,y)=\frac{\delta(x,y)}{\pi(x)}" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f2126bbeeeadfb670b8978a7bbf09c9732d" style="width: 434px; height: 40px;"&gt;&lt;/P&gt;&lt;P id="zw-12d65368247TVOWj13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d65368980YC11Sc13cce8"&gt;由分子的对称性得到&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d653f9e7bCNvx9s13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;IMG align="middle" class id="latexexpressionimage4" imagesize="120" latexexpression="A(x,y)\pi(x)=A(y,x)\pi(y)" src="https://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f2193ea7e63771f4ccea0e2f7fe91ab1c69" style="width: 187px; height: 17px;"&gt;&lt;SPAN id="zw-12d653fe3ebn9DMXm13cce8"&gt;​&lt;/SPAN&gt;&lt;BR id="zw-12d653f9e7bPzEhJ13cce8"&gt;&lt;SPAN id="zw-12d653f9e7bJOee6K13cce8"&gt;这说明上述算法的得到的转移轨迹是可逆的，或者说具备微观平衡的性质，下面证明，这个马尔科夫链以&lt;/SPAN&gt;&lt;IMG align="middle" id="latexexpressionimage5" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f21f612cd4f2ba9c933b411e6a1bc8d814e" style="width: 30px; height: 17px;"&gt;&lt;SPAN id="zw-12d653f9e7brwatKU13cce8"&gt;为​&lt;/SPAN&gt;&lt;SPAN id="zw-12d653f9e7cEDRCZY13cce8"&gt;不变分布。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d653c00e13BXCc313cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d653c00e1zpD47I13cce8"&gt;​&lt;/SPAN&gt;&lt;IMG align="middle" id="latexexpressionimage6" imagesize="120" latexexpression="\int \pi(x) A(x,y) dx = \int \pi(y) A(y,x) dx = \pi(y)" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f2118fdec2e4eb1ac83841e870369b2e7f3" style="width: 315px; height: 37px;"&gt;&lt;/P&gt;&lt;P id="zw-12d654572c62YKV7O13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65457283wvL8UT13cce8"&gt;也就是说，如果这一时刻的状态分布是&lt;/SPAN&gt;&lt;IMG align="middle" id="latexexpressionimage7" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f21f612cd4f2ba9c933b411e6a1bc8d814e" style="width: 30px; height: 17px;"&gt;&lt;SPAN id="zw-12d65457284485KT013cce8"&gt;，那么下一时刻的状态分布还是&lt;/SPAN&gt;&lt;IMG align="middle" id="latexexpressionimage8" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f21f612cd4f2ba9c933b411e6a1bc8d814e" style="width: 30px; height: 17px;"&gt;&lt;SPAN id="zw-12d6545956aJz3dIN13cce8"&gt;。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d654b42e5DtYcAx13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d654b42a5eXMcAS13cce8"&gt;由经典马尔科夫链理论，既然它是非周期正常返的，而且以&lt;/SPAN&gt;&lt;IMG align="middle" id="latexexpressionimage9" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f21f612cd4f2ba9c933b411e6a1bc8d814e" style="width: 30px; height: 17px;"&gt;&lt;SPAN id="zw-12d654b42a7Bp73Vz13cce8"&gt;为不变分布，那么它必然收敛与&lt;/SPAN&gt;&lt;IMG align="middle" id="latexexpressionimage10" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f21f612cd4f2ba9c933b411e6a1bc8d814e" style="width: 30px; height: 17px;"&gt;&lt;SPAN id="zw-12d654b4f0fXqsJ3w13cce8"&gt;，即成为平稳分布。​&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d654b42f8grBnuG13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12d654b42f8o4JI9613cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;/P&gt;&lt;P id="zw-12d654a9dd22rckJe13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12d654a9dd22vYhx013cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65ce09acdphBZv13cce8"&gt;于是我们得到了采样方法：从某一步开始&lt;/SPAN&gt;&lt;SPAN id="zw-12d65ce09e5u3g2Cl13cce8"&gt;（即预热后）&lt;/SPAN&gt;&lt;SPAN id="zw-12d65ce09aeXfBMQR13cce8"&gt;，状态序列x[n].x[n+1],...就是我们需要的样本序列。​&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65c295753eZDCc13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65c3615fbHWp13cce8"&gt;通常取&lt;IMG align="middle" id="latexexpressionimage11" imagesize="120" latexexpression="r(x,y)=min\{1, \frac{\pi(y)T(y,x)}{\pi(x)T(x,y)}\}" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f2164294627192eb3ecd02f6684e3608e22" style="width: 217px; height: 40px;"&gt;​&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65c532d0juqm-_13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65c538b1O4AjN713cce8"&gt;特别地，当T(x,y)也是对称函数时，它进一步退化成&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65c59796_JoQN13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65c59796UiVx-b13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12d65c3615fbHWp13cce8"&gt;&lt;IMG align="middle" id="latexexpressionimage" imagesize="120" latexexpression="r(x,y)=min\{1, \frac{\pi(y)}{\pi(x)}\}" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f21f48892930a68b78cf548f954da8d35b6" style="width: 166px; height: 40px;"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65c6af1bjNC-pz13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65c6ba8ccS1Xw413cce8"&gt;如果你还记得重要性采样，是不是觉得这个接受概率的式子很​&lt;/SPAN&gt;&lt;SPAN id="zw-12d65c9c5023WfSwv13cce8"&gt;眼熟？&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65c1c4d9ub6Jd13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65c1c49dc6m17T13cce8"&gt;目标分布&lt;/SPAN&gt;&lt;IMG align="middle" id="latexexpressionimage13" src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f21f612cd4f2ba9c933b411e6a1bc8d814e" style="width: 30px; height: 17px;"&gt;&lt;SPAN id="zw-12d65c1d37bbyM1sI13cce8"&gt;不好算，但是两个状态的概率之比好算，就交给接受概率好了。这是蒙特卡洛的基本初衷：好算就算，不好算就狂试。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65c9d645HIiOM13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65c9d645AN2Ei613cce8"&gt;​&lt;/SPAN&gt;&lt;BR id="zw-12d65c9d645GJpdp_13cce8"&gt;&lt;SPAN id="zw-12d65c9d645B38fvj13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d654540c7E8VjBv13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d654dba2d3YRhm13cce8"&gt;注意&lt;/SPAN&gt;&lt;SPAN id="zw-12d654dba68v02paF13cce8"&gt;MCMC得到的&lt;/SPAN&gt;&lt;SPAN id="zw-12d654dc25cGOwLd113cce8"&gt;样本的​&lt;/SPAN&gt;&lt;SPAN id="zw-12d654dba2fIkUvux13cce8"&gt;两个弱点：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d654d54f6CwnFKB13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d654d54f6AXCDZ-13cce8"&gt;1、​&lt;/SPAN&gt;&lt;SPAN id="zw-12d654dd993YRVKVw13cce8"&gt;方差大&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d654de15d0MOU5w13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d654de15dsMUPof13cce8"&gt;2、不独立&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d654e0126sa262T13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d654e01267nZXM13cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65c1c4d9ub6Jd13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12d65c1c49dc6m17T13cce8"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-12d65c1d37bbyM1sI13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d65c1c4ebUge_413cce8"&gt;&lt;/P&gt;&lt;P id="zw-12d65c1c4ebSTivc713cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;BR id="zw-12d65c1c49exaHM1J13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12d654e0255KQavMn13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d654e0256baFsoa13cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12d654e0555h8gJOr13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12d654e0555Xw5lCm13cce8"&gt;​&lt;/SPAN&gt;&lt;BR id="zw-12d654e0556fK4R0C13cce8"&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-4474226872082708513?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/4474226872082708513/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=4474226872082708513' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4474226872082708513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4474226872082708513'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/01/blog-post_08.html' title='马尔科夫链蒙特卡洛（一）'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-3619160711099729917</id><published>2011-01-07T22:40:00.001+08:00</published><updated>2011-01-07T22:40:16.939+08:00</updated><title type='text'>遍历trie</title><content type='html'>当时在网络所实习的时候，还没有学过数据结构，觉得trie是一种很神奇的东西。现在想来，tree作为用来查找的结构，要求元素构成全序即可，而trie还要求元素构成字典序。&lt;br&gt;&lt;a href="http://en.wikipedia.org/wiki/Trie"&gt;http://en.wikipedia.org/wiki/Trie&lt;/a&gt;&lt;br&gt;&lt;br&gt;通常trie是用来查找的，怎么遍历它呢？&lt;br&gt;假设假设某个国家实行实名制上网，你要负责设计一个IP(v4)到身份证号的字典，而且被要求只能用trie，而且是定义成这样的：&lt;br&gt; &lt;br&gt;struct Trie{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Trie * left;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Trie * right;&lt;br&gt;}&lt;br&gt;&lt;br&gt;根节点指向一个Trie数组的首地址。查询时指向左孩子，如果待查询IP的二进制表示最高位是0，否则指向右孩子。如果孩子结点地址不幸指向数组件外面，则表明那不是文件地址，而是身份证号+数组的字节数，这个人拥有的IP段是他从根节点走到这里沿途收集的0-1串作为IP二进制表示的前缀的所有IP。好吧，我应该事先声明，这个国家人口稀少，以至于一个人可以拥有多个全球互联网上的IP段，而且为了方便市民记忆，身份证号也被设计的也很短。&lt;br&gt; 遍历：&lt;br&gt;调用p(&amp;amp;data[0], &amp;quot;&amp;quot;)&lt;br&gt;其中&lt;br&gt;p(Trie* node, string m)&lt;br&gt;{&lt;br&gt;&amp;nbsp; if node 指向超出数组边界：打印身份证号为((int)arr)-文件长度, 他的IP段(二进制表示)有m+(32-m.length)个&amp;#39;0&amp;#39; ~ m+(32-m.length)个&amp;#39;1&amp;#39;，return&lt;br&gt;&amp;nbsp; p(node-&amp;gt;left, m+&amp;lsquo;0&amp;rsquo;)&lt;br&gt; &amp;nbsp; p(node-&amp;gt;right, m+&amp;#39;1&amp;#39;)&lt;br&gt;}&lt;br&gt;&lt;br&gt;谨以此文献给即将用尽的IPv4地址和囤积了大量地址空间的IP黄牛们。&lt;br&gt;强烈推荐一篇用时间序列方法研究IPv4何时耗尽的论文，十分有趣：&lt;a href="http://www.potaroo.net/tools/ipv4/#r5"&gt;http://www.potaroo.net/tools/ipv4/#r5&lt;/a&gt;&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-3619160711099729917?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/3619160711099729917/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=3619160711099729917' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3619160711099729917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3619160711099729917'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/01/trie.html' title='遍历trie'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-1517137472321613311</id><published>2011-01-02T17:14:00.001+08:00</published><updated>2011-01-02T17:14:48.615+08:00</updated><title type='text'>两个不幸等价的随机数生成器</title><content type='html'>中午接到电话，研究生同寝的哥们儿回北京了。于是一起去平安里吃烤鱼，一边吃鱼，一边研究一个随机数生成器的问题，一个学生问他的。&lt;br&gt;随机数生成器A：1/2的概率返回1，1/2的概率返回0。&lt;br&gt;随机数生成器B：先以[a, 1-a]均匀分布生成一个p，然后以p的概率返回1，1-p的概率返回0。其中0&amp;lt;a&amp;lt;0.5。&lt;br&gt;问题是，若只能观测这两个随机数生成器的返回结果，如何区分二者？&lt;br&gt;他说，好像无法区分，因为计算发现二者返回值的分布函数相同，却不知如何证明。&lt;br&gt; 我想：样本方差相同么？后验概率相同么？回家一算，发现很不幸，也都相同。&lt;br&gt;可能这个题当初是考察离散、连续混合情形下的全概率公式的使用吧，确实在推导过程中容易陷入符号上的混乱。&lt;br&gt;用分部积分公式可以将这个结论推广：如果p是连续型随机变量，分布函数为F(t)，那么上面两个随机数生成器等价当且仅当F(t)在[a, 1-a]上的积分=1/2-a&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-1517137472321613311?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/1517137472321613311/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=1517137472321613311' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1517137472321613311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/1517137472321613311'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/01/blog-post_02.html' title='两个不幸等价的随机数生成器'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6377962686810894307</id><published>2011-01-02T00:47:00.001+08:00</published><updated>2011-01-02T00:47:45.297+08:00</updated><title type='text'>给我碗儿水喝</title><content type='html'>今天元旦，晚上去工体听了崔健摇滚交响音乐会。听众已经不再年轻，但是能听出来听众的水平。能把摇滚和交响揉在一起的，恐怕只有崔健，一来崔健以后的中国摇滚缺少集体意识和时代底蕴，更没有作曲、指挥这种正统的音乐教育，二来是人脉。听众的注意力在崔健身上。我的注意力则在摇滚交响，所以我认为大可不必站起来，像听崔健个人演唱会一样――我最佩服的是，崔健和指挥背对背，怎么配合的那么好。&lt;br&gt;在《蓝色骨头》中，崔健重申了它那三条腿儿的理论，不是按优先级排序，而是"三角架有三条腿才稳定，少了任何一条都要不停的运动"。我便藉此为纲，总结并展望一下吧&lt;br&gt; "第一就是事业象我上面说的，能高高兴兴工作挣钱养活自己，有话就说有话就写而且要彻底，因为每次彻底之后才会出现美妙的空虚"&lt;br&gt;去年，计划在技术上深入学习几样东西（Linux Shell/C++/Design Pattern）并没有落实，倒是因为工作需要，启动了Monte Carlo方法的学习。不过后来也没用到，倒成了兴趣。饭否回归，是一件着实令我兴奋的事情，年底开始接触Android，拿饭否API练手，没有目标，只为了在过程中多学点东西。相反，发现工作中并不需要很Fancy的技术，公司总是结果导向。所以明年的技术重点在积累和巩固。拓展的项目仅保留2个：Monte Carlo, Android.&lt;br&gt; "第二就是身体一定要健康，因为身体要是不舒服，什么都是白给，所以我一周三次跑步加上一次游泳，在运动中想事儿是越想越起劲儿"&lt;br&gt;难怪崔叔叔都半张儿了，还能在台上那么使劲叫唤那么使劲蹦�，就仗着身子骨好。我要是他那岁数还能一口气唱下来《时代的晚上》间奏的那16个小节，就谢天谢地了。&lt;br&gt;今年本来说要增重，结果又TM瘦了。该死。明年必须把体重弄上去，不择手段！！！！年底开始了每周招呼同事一起去游泳，还不错，明年继续。&lt;br&gt;"第三当然就是一个爱情了。。。是不是我的工作太多了感情也变坏了，还是身体一独立个欲望就变野了"&lt;br&gt; 想起有一次去科技园见朋友，聊天，本来答应一起吃晚饭，结果我临下楼接了家里一个电话，就赶紧走了。朋友表示理解：后院不能起火，要走就走吧。我问，你们老这么加班，家里人不急么？他说，时间长了就习惯了。我想，可能我这年头还短吧。有人说，不能总是一方迁就另一方，时间长了不行。也有人说，婚姻就是个错，长久的婚姻就是将错就错。不管怎么说，就算为了自己身体着想，我也要到点儿下班回家，到点儿上床睡觉。谁TM叫我加班熬夜我跟谁急！&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6377962686810894307?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6377962686810894307/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6377962686810894307' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6377962686810894307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6377962686810894307'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2011/01/blog-post.html' title='给我碗儿水喝'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-7523034455565682580</id><published>2010-12-29T10:54:00.001+08:00</published><updated>2010-12-29T10:54:34.337+08:00</updated><title type='text'>评估在线广告的效果</title><content type='html'>很久以前看到这样一篇论文&lt;span&gt;&lt;br&gt;Evaluating Online Ad Campaigns in a Pipeline: Causal Models At Scale&lt;br&gt;一直想看进去却没有整块时间。&lt;br&gt;终于在今年年底开年会的时候，在密云的一个安静的角落里看进去了。趁着还有点印象，写篇Blog。&lt;br&gt;&lt;br&gt;假设广告商在网上投放广告的目的是提升品牌影响力，就像医院给病人用药的目的是让病人缓解病症。&lt;br&gt; 证明广告有效，就像证明药品有效一样，需要"临床"数据。&lt;br&gt;&lt;br&gt;考虑这样一个实验：&lt;br&gt;你有100个胃炎病人，程度不一，生死掌握在你手上。你有一种新药，随机给其中50个人吃，结果这些大多数都活了，剩下的50个人差不多都死了。于是你说，斯达舒，管用。&lt;br&gt;&lt;br&gt;一个怀疑的声音说：人活并非因为药有效，而是因为心理作用：医院给我吃药，我有救了。&lt;br&gt;为此改进的实验：给不吃新药的人吃安慰剂：一种外观和新药相同的胶囊。&lt;br&gt;&lt;br&gt;  类比到此结束，你不能给targeting中的用户看一个没有任何品牌符号的广告（吃安慰剂），因为没有广告商愿意为了你的对照组而浪费Inventory。&lt;br&gt;更糟糕的是，你不能随便找一个没看过此广告的用户当作对照，因为有可能他压根儿就屏蔽了所有广告（好吧，我承认屏蔽视频广告不那么容易）。&lt;br&gt;所以，对照组的用户必须要看过其他广告才行，以表明他没有屏蔽广告。&lt;br&gt;&lt;br&gt;即便如此，也还不够。另外一个不能类比的地方在于，吃什么药，是医院说了算，被实验的病人没有选择，吃完药病症如何自己也左右不了，生理现象。而看广告不一样，决定要不要看广告的是用户，决定看完广告去干什么的还是用户。你除了观测、分析，能控制的很少。文章中，选了15k个看了给定广告的用户，只统计他们在看这个广告之前的行为，同时选了70k个没看这个广告的用户，发现：前一组用户访问该品牌网站的次数的中位数，是后一组&lt;/span&gt;&lt;span&gt;用户访问该品牌网站的次数的中位数的4倍多。&lt;br&gt;  如果因果联系必须是先行后继的，那么这样两组用户不能互相对照，因为他们活跃程度不同，至少在看广告之前就对此品牌的兴趣度不同。&lt;br&gt;&lt;/span&gt;&lt;span&gt;&lt;br&gt;有两个方案：&lt;br&gt;接受拒绝：扔掉对照组中的一部分不活跃用户，使得剩下的用户的活跃度和考察组在看广告之前的活跃度相同。实验发现，这样很可能失败因为对照组的用户太不活跃了，以致于几乎都被拒绝了。&lt;br&gt;调权重：通过简单乘上概率的倒数来降低对照组中不活跃用户的权重。虽然是无偏的，但是方差很大，以致于通常也不可用。&lt;br&gt; 文章给出了一个鲁棒的估计，在调权重上花了很大功夫，也是最有趣的部分。实验结果发现，其实广告效果不是那么明显，想观测出来都难，更甭提评估了。也许这才体现了这篇文章的价值。&lt;br&gt;&lt;br&gt;这种Research只有Google这样的公司能做，因为它有很多Tool Bar安装的用户，可以采集用户的很多行为数据。&lt;br&gt;我的怀疑：安装Google Tool Bar，是否能假设等同于全体用户的集体偏好？这恐怕是一个难以检验的假设。&lt;br&gt;&lt;/span&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-7523034455565682580?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/7523034455565682580/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=7523034455565682580' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7523034455565682580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7523034455565682580'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/12/blog-post_29.html' title='评估在线广告的效果'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-882947414146694175</id><published>2010-12-23T23:03:00.001+08:00</published><updated>2010-12-23T23:03:14.216+08:00</updated><title type='text'>wirte C++ for MongoDB: smoking on Ubuntu</title><content type='html'>这周利用晚上的时间在笔记本的ubuntu上装了mongodb，把官网上的一小段C++ code点亮了。&lt;br&gt;参考&lt;br&gt;&lt;a href="http://www.mongodb.org/pages/viewpage.action?pageId=133415"&gt;http://www.mongodb.org/pages/viewpage.action?pageId=133415&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.mongodb.org/display/DOCS/Building+for+Linux"&gt;http://www.mongodb.org/display/DOCS/Building+for+Linux&lt;/a&gt;&lt;br&gt; 怨念：&lt;br&gt;1）它依赖boost等，得先安装一大堆乱七八糟的库&lt;br&gt;2）源代码庞大，从github上全clone出来需要很久，然后scons又要build很久，都build完整个目录将近800MB，晕死&lt;br&gt;3）编译C++ code时候好像绕不开-L参数，不然link的时候报错，分明安装的时候所有东西都已经存到系统路径了，奇怪&lt;br&gt;g++ tut.cpp -o tut -lmongoclient -lboost_thread-mt -lboost_filesystem-mt -lboost_program_options-mt -L/home/ytwang/lib/mongo&lt;br&gt; 我猜是因为libmongoclient.a在/home/ytwang/lib/mongo&lt;br&gt;而且引用应该写成这样&lt;br&gt;#include &amp;lt;mongo/client/dbclient.h&amp;gt;&lt;br&gt;4）运行时需要后台有守护进程mongod，像mysqld，而不是像sqlite那样纯粹基于文件&lt;br&gt;5）生成的binary也比较臃肿，刚点亮就快10MB了，感觉远不像想象中那样轻量级&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-882947414146694175?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/882947414146694175/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=882947414146694175' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/882947414146694175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/882947414146694175'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/12/wirte-c-for-mongodb-smoking-on-ubuntu.html' title='wirte C++ for MongoDB: smoking on Ubuntu'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6611435209446112167</id><published>2010-12-17T20:35:00.001+08:00</published><updated>2010-12-17T20:35:46.500+08:00</updated><title type='text'>Proof of my CNF converter</title><content type='html'>定义：&lt;br&gt;一个句子是一个变量或一个满足下列条件的list，至少有3个元素，第一个元素是连词AND或OR，其余元素是句子（递归定义），这些句子称作子句。没有NOT这种连词。&lt;br&gt;称一个句子是CNF的，若它是一个变量或满足下列条件的list。第一个元素是AND，其余元素是变量或满足下列条件的list。第一个元素是OR，其余元素是变量。（非递归定义）&lt;br&gt;对偶地可以定义DNF。&lt;br&gt;称一个句子是melt的，若任何一个子句的连词都不同于这个句子的连词。显然CNF和DNF是melt的&lt;br&gt; 称两个句子等价，若他们用到的变量相同，且对于任何一种变量分配，他们表达式求值后同真同假。&lt;br&gt;任何句子可以转化成等价的melt形式，只需要将多余的连词合并即可。&lt;br&gt;&lt;br&gt;命题：&lt;br&gt;如果句子x1,...,xn都是melt的，则melt(Op,x1,...,xn)=[Op]+trim(x1,Op)+...+trim(xn,Op)也是melt的，其中Op是AND或OR&lt;br&gt;其中，trim(x,Op)=x[1:]若Op是x的连词，否则trim(x,Op)=[x]&lt;br&gt; 证明：显然&lt;br&gt;&lt;br&gt;命题：&lt;br&gt;如果句子x1,...,xn都是CNF的，&lt;br&gt;那么melt(AND,x1,...,xn)也是CNF的&lt;br&gt;证明：显然&lt;br&gt;&lt;br&gt;命题：&lt;br&gt;如果句子x1,...,xn都是CNF的，将他们的子句（n个列向量）的卡氏积写成一串n阶向量y1,...,ym，|yk|=n，&lt;br&gt;那么AND,OR(y1),...,OR(ym)也是CNF的&lt;br&gt;证明：反复应用交换律即可。&lt;br&gt;&lt;br&gt;基于上述命题，可知昨天的递归算法正确。&lt;br&gt; &lt;br&gt;按照定义验证也很直接，只需代入全部可能的变量分配即可。python可以帮你方便地对表达式求值。&lt;br&gt;import itertools&lt;br&gt;&lt;br&gt;def is_leaf(x):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return type(x)==type(&amp;quot;&amp;quot;)&lt;br&gt;&lt;br&gt;def to_str(x):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return is_leaf(x) and x or &amp;quot;(&amp;quot; + (&amp;quot; &amp;quot;+x[0]+&amp;quot; &amp;quot;).join(map(lambda e : to_str(e), x[1:])) + &amp;quot;)&amp;quot;&lt;br&gt; &lt;br&gt;def _nfy(x, O1, O2):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if is_leaf(x):&amp;nbsp;&amp;nbsp; return x&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if x[0]==O1:&amp;nbsp; return melt([O1] + map(lambda e : _nfy(e, O1, O2), x[1:]))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return [O1] + [[O2]+list(c) for c in itertools.product(*map(lambda e : is_leaf(e) and [e] or _nfy(e, O1, O2)[1:], x[1:]))]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt; &lt;br&gt;def cnfy(x): return _nfy(x, &amp;quot;and&amp;quot;, &amp;quot;or&amp;quot;)&lt;br&gt;&lt;br&gt;def dnfy(x): return _nfy(x, &amp;quot;or&amp;quot;, &amp;quot;and&amp;quot;)&lt;br&gt;&lt;br&gt;def melt(x):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if is_leaf(x): return x&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = x[:1]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for e in x[1:]:&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not is_leaf(e) and e[0]==ret[0]:&amp;nbsp;&amp;nbsp; ret+=melt(e)[1:]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret.append(melt(e))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret&lt;br&gt;&lt;br&gt;def terms(x):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = set()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; q=[x]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while len(q)&amp;gt;0:&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; head = q.pop(0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if is_leaf(head):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret.add(head)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q+=head[1:]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret&lt;br&gt;&lt;br&gt;def eq(x, y):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xterms = terms(x)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; yterms = terms(y)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if xterms != yterms:&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return False&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xstr=to_str(x)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ystr=to_str(y)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; termlist = list(xterms)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for assignment in itertools.product(*([(&amp;quot;True&amp;quot;, &amp;quot;False&amp;quot;)]*len(termlist))):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=xstr&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y1=ystr&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i, a in enumerate(assignment):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x1=x1.replace(termlist[i], a)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y1=y1.replace(termlist[i], a)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if eval(x1) != eval(y1):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return False&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return True&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt; def main():&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = [&amp;quot;or&amp;quot;, &amp;quot;x1&amp;quot;, [&amp;quot;and&amp;quot;, [&amp;quot;or&amp;quot;, &amp;quot;x2&amp;quot;, [&amp;quot;and&amp;quot;, &amp;quot;x3&amp;quot;, &amp;quot;x4&amp;quot;, [&amp;quot;or&amp;quot;, [&amp;quot;and&amp;quot;, &amp;quot;x5&amp;quot;, &amp;quot;x6&amp;quot;], &amp;quot;x7&amp;quot;, [&amp;quot;or&amp;quot;, [&amp;quot;and&amp;quot;, &amp;quot;x8&amp;quot;, &amp;quot;x9&amp;quot;], &amp;quot;x10&amp;quot;]]]], &amp;quot;x11&amp;quot;]]&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; print terms(x)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print eq(x, x),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print eq(x, cnfy(x)),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print eq(x, dnfy(x))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;main()&lt;br&gt;&lt;br&gt;P.S.&lt;br&gt;修正了_nfy函数最后一行：用不着melt &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6611435209446112167?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6611435209446112167/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6611435209446112167' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6611435209446112167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6611435209446112167'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/12/proof-of-my-cnf-converter.html' title='Proof of my CNF converter'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8055316695473582594</id><published>2010-12-16T21:22:00.001+08:00</published><updated>2010-12-16T21:22:52.876+08:00</updated><title type='text'>convert to CNF/DNF from any simple sentence</title><content type='html'>等着看《让子弹飞》，激动得写了个小程序，把任何不含&amp;ldquo;非&amp;rdquo;的简单句子转换成CNF或DNF范式&lt;br&gt;其实只做了一件事：把AND和OR按照交换律不断展开&lt;br&gt;import itertools&lt;br&gt;&lt;br&gt;def is_leaf(x):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return type(x)==type(&amp;quot;&amp;quot;)&lt;br&gt;&lt;br&gt;def to_str(x):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return is_leaf(x) and x or &amp;quot;(&amp;quot; + (&amp;quot; &amp;quot;+x[0]+&amp;quot; &amp;quot;).join(map(lambda e : to_str(e), x[1:])) + &amp;quot;)&amp;quot;&lt;br&gt; &lt;br&gt;def _nfy(x, O1, O2):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if is_leaf(x):&amp;nbsp;&amp;nbsp; return x&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if x[0]==O1:&amp;nbsp; return melt([O1] + map(lambda e : _nfy(e, O1, O2), x[1:]))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return melt([O1] + [[O2]+list(c) for c in itertools.product(*map(lambda e : is_leaf(e) and [e] or _nfy(e, O1, O2)[1:], x[1:]))])&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;def cnfy(x): return _nfy(x, &amp;quot;AND&amp;quot;, &amp;quot;OR&amp;quot;)&lt;br&gt;&lt;br&gt;def dnfy(x): return _nfy(x, &amp;quot;OR&amp;quot;, &amp;quot;AND&amp;quot;)&lt;br&gt;&lt;br&gt;def melt(x):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if is_leaf(x): return x&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = x[:1]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for e in x[1:]:&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not is_leaf(e) and e[0]==ret[0]:&amp;nbsp;&amp;nbsp; ret+=melt(e)[1:]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret.append(melt(e))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret&lt;br&gt;&lt;br&gt;def main():&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = [&amp;quot;OR&amp;quot;, &amp;quot;a&amp;quot;, [&amp;quot;AND&amp;quot;, [&amp;quot;OR&amp;quot;, &amp;quot;b&amp;quot;, [&amp;quot;AND&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, [&amp;quot;OR&amp;quot;, [&amp;quot;AND&amp;quot;, &amp;quot;e&amp;quot;, &amp;quot;f&amp;quot;], &amp;quot;g&amp;quot;, [&amp;quot;OR&amp;quot;, [&amp;quot;AND&amp;quot;, &amp;quot;h&amp;quot;, &amp;quot;i&amp;quot;], &amp;quot;j&amp;quot;]]]], &amp;quot;k&amp;quot;]]&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; print to_str(x)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print to_str(cnfy(x))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print to_str(dnfy(x))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;main()&lt;br&gt;&lt;br&gt;运行结果&lt;br&gt;(a OR ((b OR (c AND d AND ((e AND f) OR g OR ((h AND i) OR j)))) AND k))&lt;br&gt;((a OR b OR c) AND (a OR b OR d) AND (a OR b OR e OR g OR h OR j) AND (a OR b OR e OR g OR i OR j) AND (a OR b OR f OR g OR h OR j) AND (a OR b OR f OR g OR i OR j) AND (a OR k))&lt;br&gt; (a OR (b AND k) OR (c AND d AND e AND f AND k) OR (c AND d AND g AND k) OR (c AND d AND h AND i AND k) OR (c AND d AND j AND k))&lt;br&gt;&lt;br&gt;参考&lt;br&gt;First-Order Logic Resolution Theorem Prover In Haskell&lt;br&gt;&lt;br&gt;更有趣的问题是形式化验证算法的正确性，下回分解&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8055316695473582594?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8055316695473582594/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8055316695473582594' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8055316695473582594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8055316695473582594'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/12/convert-to-cnfdnf-from-any-simple.html' title='convert to CNF/DNF from any simple sentence'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6690325660411125282</id><published>2010-12-14T21:28:00.001+08:00</published><updated>2010-12-14T21:28:24.053+08:00</updated><title type='text'>序贯蒙特卡洛（三）</title><content type='html'>命题：M2和M3都是无偏估计,E(w[1]...w[n])=Zn，其中w[k]是第k步产生的调整系数，Zn是满足约束的路径数&lt;br&gt;证明：Zn=sum{1(x) , x是所有哈密尔顿路径}其中1(x)=1当且仅当x满足约束。&lt;br&gt;1(x)=w(x)p(x)&lt;br&gt;p(x)为按算法规则产生这个路径x的概率，链式分解：p(x)=p(x[0],x[1],...,x[n])=p(x[0])p(x[1]|x[0])...p(x[n]|x[n-1])&lt;br&gt;  w(x)=0当x不满足约束，否则w(x)=w[1]...w[n]，w[k]=1/p(x[k]|x[k-1])&lt;br&gt;从而得到右端就是期望E(w[1]...w[n])&lt;br&gt;点评：神奇之处在于概率的链式分解给出了权重的连乘表达，同时给出了迭代构造试探路径的方法。好的构造，即方差小的构造，会以较大概率得到满足约束的路径（接受的样本），这也是Important sampling的初衷。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6690325660411125282?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6690325660411125282/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6690325660411125282' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6690325660411125282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6690325660411125282'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/12/%E5%BA%8F%E8%B4%AF%E8%92%99%E7%89%B9%E5%8D%A1%E6%B4%9B%E4%B8%89.html' title='序贯蒙特卡洛（三）'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8490330306326628125</id><published>2010-12-12T20:35:00.001+08:00</published><updated>2010-12-12T20:35:11.683+08:00</updated><title type='text'>序贯蒙特卡洛（二）代码</title><content type='html'>在实验过程中发现，M2并没有比M3、M4差太多。&lt;br&gt;M3和M4等价是因为转置不改变矩阵的积和式。物理上可以理解：每一步（一个时间）找一个地方走，和每个地方找一步（一个时间）走，其实都是一种置换。&lt;br&gt;M1虽然计算复杂度低，但是方差实在太大了，没法要。&lt;br&gt;&lt;br&gt;import math&lt;br&gt;import random&lt;br&gt;import itertools&lt;br&gt;import pylab&lt;br&gt;import numpy&lt;br&gt;&lt;br&gt; def weighted_choice(weights):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cum = numpy.cumsum(weights)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return numpy.searchsorted(cum, numpy.random.rand() * cum[-1]), cum[-1]&lt;br&gt;&lt;br&gt;def restrict(A,p):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return all([A[i][p[i]] for i in xrange(len(A))])&lt;br&gt; &lt;br&gt;def make_zero_one_matrix_with_given_fillrate(dimension, fillrate):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return numpy.random.random((dimension, dimension)) &amp;lt; fillrate&lt;br&gt;&lt;br&gt;def perm(A):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sum([restrict(A, p) for p in itertools.permutations(range(len(A)))])&lt;br&gt; &lt;br&gt;def eperm1(A, m):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c=0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = range(len(A))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for _ in xrange(m):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; random.shuffle(p)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c += restrict(A, p)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return math.factorial(len(A))*float(c)/m&lt;br&gt;&lt;br&gt;def eperm2(A, m):&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; Backup=A.copy()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; w=numpy.ones(m)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for trip in xrange(m):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A=Backup.copy()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for step in xrange(len(A)):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; candidates = filter(lambda k : A[step][k], xrange(len(A)))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(candidates) == 0:&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w[trip] = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k = random.choice(candidates)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A[:,k]=False&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w[trip] *= len(candidates)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sum(w)/m&lt;br&gt;&lt;br&gt;def eperm3(A, m):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Backup=A.copy()&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; w=numpy.ones(m)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for trip in xrange(m):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A=Backup.copy()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; csum=A.sum(0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for step in xrange(len(A)):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for k, s in enumerate(csum):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if s == 1:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A[:,k]=False&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break #you have no other choice but goto k, w is kept&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; candidates = filter(lambda k : A[step][k], xrange(len(A)))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(candidates) == 0:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w[trip] = 0&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = 1.0 / (csum[candidates] - 1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k, s = weighted_choice(p)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w[trip] *= s/p[k]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A[:,candidates[k]]=False&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sum(w)/m&lt;br&gt; &lt;br&gt;def eperm4(A, m):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Backup=A.copy()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; w=numpy.ones(m)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for trip in xrange(m):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A=Backup.copy()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rsum=A.sum(1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for pos in xrange(len(A)):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for step, s in enumerate(rsum):&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if s == 1:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A[step,:]=False&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; candidates = filter(lambda i : A[i][pos], xrange(len(A)))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(candidates) == 0:&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w[trip] = 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = 1.0 / (rsum[candidates] - 1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k, s = weighted_choice(p)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w[trip] *= s/p[k]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A[candidates[k], :]=False&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; return sum(w)/m&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;br&gt;def main():&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; n=15&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; K=10&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m=100&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; A=make_zero_one_matrix_with_given_fillrate(n,0.7)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(A)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(n,math.factorial(n),m)&lt;br&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; print(perm(A))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=numpy.zeros((K,4))&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; for i in range(K):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x[i][0]=eperm1(A.copy(), m)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x[i][1]=eperm2(A.copy(), m)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x[i][2]=eperm3(A.copy(), m)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x[i][3]=eperm4(A.copy(), m)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(pylab.average(x,0))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(pylab.var(x,0))&lt;br&gt; #&amp;nbsp;&amp;nbsp;&amp;nbsp; pylab.figure()&lt;br&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; pylab.boxplot(x)&lt;br&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; pylab.show()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;main()&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8490330306326628125?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8490330306326628125/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8490330306326628125' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8490330306326628125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8490330306326628125'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/12/blog-post_12.html' title='序贯蒙特卡洛（二）代码'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6656807131417762641</id><published>2010-12-10T23:25:00.001+08:00</published><updated>2010-12-10T23:25:56.698+08:00</updated><title type='text'>序贯蒙特卡洛（二）</title><content type='html'>&lt;p class="mobile-photo"&gt;&lt;a href="http://4.bp.blogspot.com/_iMG9M3S-9Xo/TQJGhcwm9DI/AAAAAAAACxU/Z5RF5os1Bqw/s1600/1-756699.png"&gt;&lt;img src="http://4.bp.blogspot.com/_iMG9M3S-9Xo/TQJGhcwm9DI/AAAAAAAACxU/Z5RF5os1Bqw/s320/1-756699.png"  border="0" alt="" id="BLOGGER_PHOTO_ID_5549075231343572018" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="gmail_quote"&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;font size="6"&gt;积和式近似&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;前面两个例子都没有展开，这次写具体些。&lt;br&gt;白老师曾说，计算数学其实分两块，一块研究&amp;ldquo;计数&amp;rdquo;，就是&amp;ldquo;数数儿&amp;rdquo;，另一块研究算数，就是解方程。积和式属于前者的范畴。&lt;br&gt;&lt;br&gt;&lt;font size="4"&gt;&lt;b&gt;积和式定义&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;a href="http://en.wikipedia.org/wiki/Permanent" target="_blank"&gt;http://en.wikipedia.org/wiki/Permanent&lt;/a&gt;&lt;br&gt;    &lt;br&gt;A是一个n阶0-1方阵，积和式perm(A)=#{A(p)=1, p是(1,...,n)的一个排列}，其中A(p)=A[1][p[1]]*...*A[n][p[n]]&lt;br&gt;   物理意义：p是一条长度为n的哈密尔顿路径，A是约束矩阵，A[i][j]=1表示允许路径的第i步走到j。A(p)=1表示哈密尔顿路径p满足约束A。&lt;br&gt;perm(A)就是满足约束A的哈密尔顿路径的个数。&lt;br&gt;（上个版本说和哈密尔顿路径问题等价是错误的）&lt;br&gt;&lt;br&gt;下面考虑计算perm(A)的蒙特卡洛方法。&lt;br&gt;&lt;br&gt;&lt;b&gt;M1：大海捞针&lt;/b&gt;&lt;br&gt; 生成N个(1,...,n)的排列p_1,...,p_N&lt;br&gt;  perm(A)的估计=n!*(A(p_1)+...+A(p_N))/N&lt;br&gt;&lt;br&gt;&lt;b&gt;M2：走一步说一步&lt;/b&gt;&lt;br&gt; 一步步构造哈密尔顿路径，每次等概率地走到还没走过的且能走的地方，直到无路可走。&lt;br&gt;尝试m次：&lt;br&gt;w[0]=1&lt;br&gt;走第k步时，如果没路了，则w=0，尝试失败&lt;br&gt;否则w[k]=w[k-1]*没走过且可走的地方的个数&lt;br&gt;最后w[n]作为这次尝试的权重w&lt;br&gt;perm(A)的估计：m次权重w的平均值&lt;br&gt;&lt;br&gt;  &lt;b&gt;M3：倾向于先走不容易走到的地方&lt;/b&gt;&lt;br&gt;思路是如果一个地方少有机会能走，则应该先走。&lt;br&gt; 一步步构造哈密尔顿路径，每次走到还没走过的且能走的地方k的概率，反比于k的剩余的可走到的机会数，直到无路可走。如果一个地方必须这次去，则概率1地走向哪里。&lt;br&gt;尝试m次：&lt;br&gt; w[0]=1&lt;br&gt; 走第k步时，如果没路了，则w=0，尝试失败&lt;br&gt; 否则w[k]=w[k-1]*第k步选择所选落脚点的概率的倒数&lt;br&gt; 最后w[n]作为这次尝试的权重w&lt;br&gt; perm(A)的估计：m次权重w的平均值&lt;br&gt;&lt;br&gt;&lt;b&gt;实验&lt;/b&gt;&lt;br&gt;A=&lt;br&gt; &lt;/div&gt;[[ 0.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.]&lt;br&gt;&amp;nbsp;[ 1.&amp;nbsp; 1.&amp;nbsp; 0.&amp;nbsp; 0.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.]&lt;br&gt;&amp;nbsp;[ 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.]&lt;br&gt;&amp;nbsp;[ 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 0.&amp;nbsp; 1.&amp;nbsp; 1.]&lt;br&gt;&amp;nbsp;[ 1.&amp;nbsp; 0.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 0.&amp;nbsp; 0.]&lt;br&gt;&amp;nbsp;[ 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.]&lt;br&gt;&amp;nbsp;[ 1.&amp;nbsp; 1.&amp;nbsp; 0.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.&amp;nbsp; 1.]]&lt;br&gt; 真值perm(A)=1434&lt;br&gt;三种方法估计的均值（样本数20）&lt;br&gt;[ 1415.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1448.91071429&amp;nbsp; 1434.89212938]&lt;br&gt;下图是M1,M2,M3的Boxplot&lt;br&gt;可以明显看出方差的减小&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6656807131417762641?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6656807131417762641/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6656807131417762641' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6656807131417762641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6656807131417762641'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/12/blog-post_10.html' title='序贯蒙特卡洛（二）'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_iMG9M3S-9Xo/TQJGhcwm9DI/AAAAAAAACxU/Z5RF5os1Bqw/s72-c/1-756699.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5869572013449215422</id><published>2010-12-01T22:40:00.001+08:00</published><updated>2010-12-01T22:40:19.642+08:00</updated><title type='text'>n次根号下p[1]..p[s]是无理数</title><content type='html'>命题：&lt;br&gt;n次根号下p[1]..p[s]是无理数，其中p[i]是素数，n&amp;gt;1&lt;br&gt;证明：&lt;br&gt;假设存在自然数a,b使得(p[1]..p[s])^(1/n)=a/b&lt;br&gt;则对a,b做素因子分解&lt;br&gt;a=p[1]^a[1]..p[s]^a[s]&lt;br&gt;b=p[1]^b[1]..p[s]^b[s]&lt;br&gt;其中a[i],b[i]为非负整数&lt;br&gt;则p[i]^(1/n)=p[i]^(a[i]-b[i])&lt;br&gt;即1=n(a[i]-b[i])，这对于n&amp;gt;1是不可能的&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5869572013449215422?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5869572013449215422/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5869572013449215422' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5869572013449215422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5869572013449215422'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/12/np1ps.html' title='n次根号下p[1]..p[s]是无理数'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-2203372209933888846</id><published>2010-11-10T22:00:00.001+08:00</published><updated>2010-11-10T22:00:11.478+08:00</updated><title type='text'>如果饭否回来了</title><content type='html'>如果饭否回来了，我将表示情绪稳定。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-2203372209933888846?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/2203372209933888846/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=2203372209933888846' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2203372209933888846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2203372209933888846'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/11/blog-post_10.html' title='如果饭否回来了'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-285445033230447709</id><published>2010-11-06T21:53:00.001+08:00</published><updated>2010-11-06T21:53:14.144+08:00</updated><title type='text'>序贯蒙特卡洛（一）</title><content type='html'>&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font size="4"&gt;遗传学的例子&lt;/font&gt;&lt;br&gt;&lt;br&gt;大三那年自从上了白老师的一个讨论班之后，就对生物学中的很多问题很感兴趣。这 本教材中也有不少生物方面的例子，让我时不时眼前一亮。&lt;br&gt;&lt;br&gt;考虑一组等位基因的演化历史。我们能观察到的，只有今天这组等位基因在某种群的分 布。我们提出一个单倍体演化模型，只考虑繁殖和突变，一步概率转移矩阵由某个待定系数t唯一决定。用极大似然方法估计这个参数，也就是极大化历史演化成今 天这个样子的概率。&lt;br&gt;&lt;br&gt;按照定义，要计算&lt;br&gt;&lt;br&gt;P(H0)=sum{P(H)|H 的最后一代是H0}&lt;br&gt;&lt;br&gt;其中H0是 今天的分布，H是历史演化过程。这在计算上是不可行的，因为H的空间太大了。自然想到蒙特卡洛。&lt;br&gt;&lt;br&gt;任意给定参数t，根据贝叶斯公式，可以知 道P(H-1|H0)，从而每一步，根据今天的分布，按条件概率采样尝试回到昨天的分布，也就是P(H-1|H0)的估计。反复为之，可以得到 P(H|H0)的估计，也就是在今天这样分布的条件下，某历史演化过程存在的概率。&lt;br&gt;从而得到P(H0)的估计：P(H)/P(H|H0)的多次实 现的均值。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font size="4"&gt;聚合物的例子&lt;/font&gt;&lt;br&gt;&lt;br&gt;考虑一个随机方案来构造一个长度为N的、在平面网格点上的、不能自交的 路径，使得任何两条满足条件的路径出现的概率相同。不失一般性，假设从原点出发第一步向右走。&lt;br&gt;方案A：&lt;br&gt;每一步从{左转、右转、直行}三个 中等概率选择一个，如果自交了，则拒绝当前路径从头再来。否则走到长度为N接受它。&lt;br&gt;方案B：&lt;br&gt;每一步如果没有能走的地方，则拒绝当前路径从 头再来，否则从能走的1或2或3个地方中等概率选择一个，所谓能走的地方，指的是{左转、右转、直行}的三个点中之前没有到达过的那些。&lt;br&gt;&lt;br&gt;B 看起来更有效率，然而不幸的是它不是无偏的：它更倾向于走出一条压紧、褶皱的路径。例如，对于N=4，走出[右，右，右，右]的概率就要小于[右，上， 左，左]&lt;br&gt;为了使得B均匀分布，需要为它生成的每条路经赋一个修正权重，而这个修正权重的计算，正是蒙特卡洛方法的精髓。 &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-285445033230447709?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/285445033230447709/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=285445033230447709' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/285445033230447709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/285445033230447709'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/11/blog-post_06.html' title='序贯蒙特卡洛（一）'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-3152229262095861894</id><published>2010-11-02T20:09:00.001+08:00</published><updated>2010-11-02T20:09:26.613+08:00</updated><title type='text'>“给我照张相吧，挤死了”</title><content type='html'>&lt;p class="mobile-photo"&gt;&lt;a href="http://1.bp.blogspot.com/_iMG9M3S-9Xo/TM__dzZUcNI/AAAAAAAACws/t0eLdZIJUww/s1600/IMAG0045-766614.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_iMG9M3S-9Xo/TM__dzZUcNI/AAAAAAAACws/t0eLdZIJUww/s320/IMAG0045-766614.jpg"  border="0" alt="" id="BLOGGER_PHOTO_ID_5534923354539323602" /&gt;&lt;/a&gt;&lt;/p&gt;其实我没想照他。在按下快门的刹那，他喊了这么一句。令我印象深刻。&lt;br&gt;可惜我不是记者，我只能发到自己的技术博客上。&lt;br&gt;嗯。&lt;br&gt;"这哪儿算挤"，人们说。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-3152229262095861894?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/3152229262095861894/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=3152229262095861894' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3152229262095861894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3152229262095861894'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/11/blog-post.html' title='“给我照张相吧，挤死了”'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_iMG9M3S-9Xo/TM__dzZUcNI/AAAAAAAACws/t0eLdZIJUww/s72-c/IMAG0045-766614.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-308631825274096599</id><published>2010-10-25T20:37:00.001+08:00</published><updated>2010-10-25T20:37:50.686+08:00</updated><title type='text'>FreeWheel isn't sitting in the middle, it is making money</title><content type='html'>上周跟着FreeWheel的男女老少去清华做校园招聘，CEO想方设法让同学们理解FreeWheel是怎么赚钱的，可是同学们依旧一脸茫然，如同他们走进教室时一样，如同两年前的坐在这里的那些人一样。&lt;br&gt;PPT上有些图，如同所有公司宣传一样，FW被画在中间，上下左右是各种类型的客户，仿佛天地因FW的存在而运转，仿佛钱从四面八方向FW而来。这种八卦图看多了，同学不禁会想，谁都说自己是中心，到底谁是中心呢？&lt;br&gt;在我看来，其实大家是在一个N维单位球面上。一共有N个公司。每个公司都是这个球面上的一个点，因此任何两个点之间的距离都相同。但是，由于每个公司都觉得世界是平的，而且看到所有其他公司到自己的距离都相同，所以觉得自己必然巍然中央，所有其他公司落在以自己为中心，半径为1的圆环上。&lt;br&gt;  &lt;br&gt;同学们也觉得世界是平的，而且点特别多，所以觉得应该至多存在一个点，使得所有其他点到这个点的距离相同。这个点就是中心。&lt;br&gt;&lt;br&gt;争谁最大最牛没意义，争谁是宇宙中心也没意义，挣钱才是真的。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-308631825274096599?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/308631825274096599/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=308631825274096599' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/308631825274096599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/308631825274096599'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/10/freewheel-isnt-sitting-in-middle-it-is.html' title='FreeWheel isn&apos;t sitting in the middle, it is making money'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5760063176294507340</id><published>2010-10-23T22:49:00.001+08:00</published><updated>2010-10-23T22:49:21.855+08:00</updated><title type='text'>没有光驱？死不了的</title><content type='html'>过去我一直觉得重装系统就必须有光驱，而且得有张光盘带光启，非常神奇。这周买了个小上网本，没有光驱，没有预装操作系统。表示惊讶之后，只好在另外一台能上网的电脑上反复百度，终于用U盘搞定了。参考：&lt;a href="http://apps.hi.baidu.com/share/detail/866549"&gt;http://apps.hi.baidu.com/share/detail/866549&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5760063176294507340?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5760063176294507340/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5760063176294507340' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5760063176294507340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5760063176294507340'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/10/blog-post_23.html' title='没有光驱？死不了的'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-996955315515981586</id><published>2010-10-14T23:31:00.001+08:00</published><updated>2010-10-14T23:31:36.875+08:00</updated><title type='text'>基本的蒙特卡洛方法（三）​</title><content type='html'>&lt;HTML&gt;&lt;HEAD&gt;&lt;META content="{&amp;quot;defaults&amp;quot;:[&amp;quot;101ln&amp;quot;],&amp;quot;counter&amp;quot;:0}" id="zohotab"&gt;&lt;STYLE id="styletagforeditor"&gt;body { border: 0px; font-family:verdana; font-size :10pt; direction :ltr; background-color :#ffffff; line-height :1.2; margin:0.5in 1in 0.5in 1in}&lt;/STYLE&gt;&lt;STYLE id="styletagtwoforeditor"&gt;table { font-size: 10pt;}&lt;/STYLE&gt;&lt;LINK href="https://css.zohostatic.com/writer/Oct_13_2010_3/https/styles/editor.css" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;/HEAD&gt;&lt;BODY class style&gt;&lt;H1 id="zw-12b9622c733okApd913cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; text-align: center;"&gt;&lt;SPAN id="zw-12b9624c553sQqur_13cce8"&gt;基本的蒙特卡洛方法（三）​&lt;/SPAN&gt;&lt;BR id="zw-12b9622c733k6ubXM13cce8"&gt;&lt;/H1&gt;&lt;P id="zw-12b9624f1f5bfRF5U13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12b9624f1f5_8dqN513cce8"&gt;根据蒙特卡洛方法得到的样本总是无偏的，即样本期望等于总体期望。实践中，期望相同还不够，还要求方差尽量小。因此方差减小技术是蒙特卡洛方法极重要的一部分。&lt;/SPAN&gt;&lt;/P&gt;&lt;H2 id="zw-12b966a4133vrX-s13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaed8e3dA9T-K-13cce8" style&gt;分层采样（Stratified sampling）&lt;/SPAN&gt;&lt;/H2&gt;&lt;P id="zw-12baaebe788m-jCxz13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe789sSscV213cce8"&gt;充分利用积分的可加性。&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78dpzN1Ah13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78d5pLzid13cce8"&gt;仍然考虑计算广告学中的例子，考察样本空间E=&amp;lt;V, C&amp;gt;，其中V是视频集合，C是城市集合。一个点e=(v, c)表示一个来自视频v且来自城市c的广告请求。&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78avIqYh13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78aHZXxru13cce8"&gt;给定E的子集E1，求E1中的广告请求个数。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78aPFigvX13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78a67Czxi13cce8"&gt;如何广告请求顺序写在了一个文件里，那我们只好随机采。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78boY0svR13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78bx8OWaH13cce8"&gt;如果来自不同城市的请求分别写在不同的文件里，那我们可以每个城市随机采，从而有望减小方差。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78bDBsQt813cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78bwqDqe_13cce8"&gt;方差减小的充要条件可以模糊地形容为：同一个城市的用户看视频的偏好相近。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78bs0bxNY13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78bj0iljm13cce8"&gt;不证明了，举个小规模的例子：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78byaWK9n13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78ckYH5pZ13cce8"&gt;两个城市，100个视频，每个城市每个视频恰好有一个广告请求，共200个。考虑E1={城市1的视频1到90，城市2的视频1到10}。我们一眼就看出来E1中广告请求有90+10=100个。让我们采两个样本，来估计之。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78cNf-y3913cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;在全空间上随机采：从200中等概率、有重复地采2个，X个属于E1，则100X是无偏估计。经计算，X的方差是0.5。&lt;/P&gt;&lt;P id="zw-12baaebe78cRmBqPI13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;分层采：从每个城市各采1个，城市1中采中属于E1的个数是X1，城市2中采中属于E1的个数是X2，则100X=100(X1+X2)是无偏估计。经计算，X的方差是0.18。&lt;/P&gt;&lt;H2 id="zw-12baaebe78cEe04v13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;控制变量法&lt;/H2&gt;&lt;P id="zw-12baaebe78cpHGgUe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;也叫借鸡下蛋法，呵呵。&lt;/P&gt;&lt;P id="zw-12baaebe78cpHGgUe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;这部分的分析很简洁漂亮，情不自禁地说两句。&lt;/P&gt;&lt;P id="zw-12baaebe78cpHGgUe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;假设我们关心随机变量X的期望EX。已知另一个随机变量C的期望EC，而且X和C比较相关。用待定系数法，令随机变量X(b)=X-b(C-EC)。&lt;SPAN id="zw-12bab59a4a6z-Xu-K13cce8" style="color: rgb(0, 0, 0); text-decoration: underline;"&gt;(原书中写成了+b&lt;/SPAN&gt;&lt;SPAN id="zw-12bab590ba8HqAxKa13cce8" style="color: rgb(0, 0, 0); text-decoration: underline;"&gt;，&lt;/SPAN&gt;&lt;SPAN id="zw-12bab590ba9j4EpjX13cce8" style="color: rgb(0, 0, 0); text-decoration: underline;"&gt;有误！&lt;/SPAN&gt;&lt;SPAN id="zw-12bab590ba5Nh_gZ13cce8" style="color: rgb(0, 0, 0); text-decoration: underline;"&gt;)&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78cpHGgUe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;显然EX(b)=EX，因此，无论系数b如何取，求EX(b)即可。关键在于，适当选取b使得X(b)的方差尽量小。&lt;/P&gt;&lt;P id="zw-12baaebe78cpHGgUe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;varX(b)=varX-2bcov(X,C)+b&lt;SPAN id="zw-12bab372f2crs9Zlc13cce8" style="vertical-align: super; font-size: 0.8em;"&gt;2&lt;/SPAN&gt;varC&lt;/P&gt;&lt;P id="zw-12baaebe78cpHGgUe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;中学生都会，这是关于b的抛物线，当b=cov(X,C)/varC时最小，最小值为&lt;/P&gt;&lt;P id="zw-12baaebe78cpHGgUe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;IMG align="middle" id="latexexpressionimage1" imagesize="120" latexexpression="var{X(b)}=(1- \rho_{XC}^{2}) varX   \leq  varX  " src="http://writer.zoho.com/image.do?imgurl=8794565030457c0cc345ca9de29304952e0fffd89b2f0797dfd72f44385b6f2138a0e63d889d30e22a1aba17e3c33bd8" style="height: 20px; width: 259px;"&gt;&lt;BR&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78cpHGgUe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;神了，这看上去就是白给。其实有很多代价：首先要知道EC，其次还要能算b，这太浪漫了。&lt;/P&gt;&lt;P id="zw-12baaebe78cpHGgUe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;举个浪漫的例子吧。考虑100个视频请求，一个广告C要投放在1～60，另一个广告X要投放在1～50。假设C的情况我们了解了，X是新来的，要通过采样估计它的访问量。&lt;BR&gt;&lt;SPAN id="zw-12baaebe78de4yi313cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78dn2jHxs13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78dYshFPN13cce8"&gt;先按公式算出来b=5/6。从100个请求中随机采1个，属于广告X投放范围的有X个，属于广告C投放范围的有C个，则X(b)=X-5/6*C+0.5。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78dn2jHxs13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78dYshFPN13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE border="1" cellpadding="7" frame="box" id="zw-12bab2b393bxURdI13cce8" rules="all" style="width: 100%;"&gt;&lt;TBODY id="zw-12bab2b393cpV-ekz13cce8"&gt;&lt;TR id="zw-12bab2b393cIQBf813cce8" style="vertical-align: middle;"&gt;&lt;TD id="zw-12bab2b393cMkNKGt13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b393cVHMcX613cce8"&gt;X&lt;SPAN id="zw-12bab2b393c7gfJIs13cce8"&gt;&lt;BR id="zw-12bab2b393clqZxKE13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b393dzHXEzQ13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b393dOPwQvQ13cce8"&gt;&lt;SPAN id="zw-12bab2b393dRQ1BOH13cce8"&gt;C&lt;BR id="zw-12bab2b393dMNh_1613cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b393dTDZY13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b393dxk4Az713cce8"&gt;&lt;SPAN id="zw-12bab2b393dZ_DN3y13cce8"&gt;X(b)&lt;BR id="zw-12bab2b393d6iJbYj13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b393dN0WIsd13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b393dGO7MVb13cce8"&gt;&lt;SPAN id="zw-12bab2b393dZK6_pY13cce8"&gt;概率&lt;BR id="zw-12bab2b393dqvgIgJ13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12bab2b393eNbBjsJ13cce8" style="vertical-align: middle;"&gt;&lt;TD id="zw-12bab2b393ep3VKt913cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b393eHpDAK_13cce8"&gt;&lt;SPAN id="zw-12bab2b393eshtU5313cce8"&gt;0&lt;BR id="zw-12bab2b393ecWrVqN13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b393ej-1xa_13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b393e8coAw713cce8"&gt;&lt;SPAN id="zw-12bab2b393eifa1yM13cce8"&gt;0&lt;BR id="zw-12bab2b393eSxX8UR13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b393eeE4lzx13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b393fHynv_X13cce8"&gt;&lt;SPAN id="zw-12bab2b393f0_t3Qi13cce8"&gt;0.5&lt;BR id="zw-12bab2b393fwwrKx-13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b393fVIjWgp13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b393fxWU-Hs13cce8"&gt;&lt;SPAN id="zw-12bab2b393fGeDHtX13cce8"&gt;0.4&lt;BR id="zw-12bab2b393f9gQuoh13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12bab2b393fF3cqc13cce8" style="vertical-align: middle;"&gt;&lt;TD id="zw-12bab2b393fmMSx5v13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b393fEyh0K_13cce8"&gt;&lt;SPAN id="zw-12bab2b393fZzLinb13cce8"&gt;0&lt;BR id="zw-12bab2b393fubXbKd13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b3940eFmrD313cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b3940dy96wj13cce8"&gt;&lt;SPAN id="zw-12bab2b39409rOA1B13cce8"&gt;1&lt;BR id="zw-12bab2b3940SgOeem13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b39403D43Ck13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b3940EN-rpm13cce8"&gt;&lt;SPAN id="zw-12bab2b3940Ycdyo_13cce8"&gt;-1/3&lt;BR id="zw-12bab2b3940mjpz3013cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b3940JEV1NC13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b3940JNCtJb13cce8"&gt;&lt;SPAN id="zw-12bab2b3940e1C9O413cce8"&gt;0.1&lt;BR id="zw-12bab2b3940cPIVpO13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12bab2b3941SsRy-H13cce8" style="vertical-align: middle;"&gt;&lt;TD id="zw-12bab2b3941tboizO13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b3941iUO8z213cce8"&gt;&lt;SPAN id="zw-12bab2b3941S8reAM13cce8"&gt;1&lt;BR id="zw-12bab2b3941Mldx3M13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b3941-QefmB13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b3941J8RwLs13cce8"&gt;&lt;SPAN id="zw-12bab2b3941muTea513cce8"&gt;0&lt;BR id="zw-12bab2b3941uqD1uC13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b3941hi0rhP13cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b3942Mg6z1i13cce8"&gt;&lt;SPAN id="zw-12bab2b3942vHYxDm13cce8"&gt;1.5&lt;BR id="zw-12bab2b3942FEGYEU13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2b3942eghyD113cce8" style="width: 25%;"&gt;&lt;P id="zw-12bab2b3942LVzhM13cce8"&gt;&lt;SPAN id="zw-12bab2b3942hp5uZ_13cce8"&gt;0&lt;BR id="zw-12bab2b3942Byk_uK13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12bab2bb6e7SrhEIz13cce8" style="vertical-align: middle;"&gt;&lt;TD id="zw-12bab2bb6e7XwZQCR13cce8" rowspan="1" style="width: 25%;"&gt;1&lt;BR&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2bb6e7UVs3a513cce8" rowspan="1" style="width: 25%;"&gt;1&lt;BR&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2bb6e7U53QIR13cce8" rowspan="1" style="width: 25%;"&gt;2/3&lt;BR&gt;&lt;/TD&gt;&lt;TD id="zw-12bab2bb6e7IA_axZ13cce8" rowspan="1" style="width: 25%;"&gt;0.5&lt;BR&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P id="zw-12bab2b394afnuD4U13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;BR&gt;&lt;SPAN id="zw-12bab2b3949DbdQr13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12bab2b394afnuD4U13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12bab2b3949DbdQr13cce8"&gt;varX(b)=1/3*0.4+1/9*0.1+1/2*4/9=1/12&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12bab2b394afnuD4U13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12bab2b3949DbdQr13cce8"&gt;而&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12bab2b394afnuD4U13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12bab2b3949DbdQr13cce8"&gt;varX=1/4&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12bab2b394afnuD4U13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12bab2b3949DbdQr13cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12bab2b394afnuD4U13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12bab2b3949DbdQr13cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78dn2jHxs13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;BR&gt;&lt;SPAN id="zw-12baaebe78dYshFPN13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78dn2jHxs13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;BR&gt;&lt;SPAN id="zw-12baaebe78dYshFPN13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12baaebe78dn2jHxs13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in;"&gt;&lt;SPAN id="zw-12baaebe78dYshFPN13cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-996955315515981586?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/996955315515981586/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=996955315515981586' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/996955315515981586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/996955315515981586'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/10/blog-post_14.html' title='基本的蒙特卡洛方法（三）​'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5592390930777911435</id><published>2010-10-07T16:08:00.001+08:00</published><updated>2010-10-07T16:08:58.834+08:00</updated><title type='text'>协稳的假设有多强？</title><content type='html'>多元时间序列分析一个特别醒目的概念，就是协稳：若干个时间序列，他们可能每个都不平稳，但是他们的某个线性组合是平稳的。&lt;br&gt;在计算广告学实践中，我们考虑一个网站的若干视频，每个视频的日访问量序列看作一个时间序列。很少有哪个视频的访问量是平稳序列，因为人们总是喜新厌旧，一个视频刚上线的一段时间内，看的人越来越多，一段时间后，就渐渐地没什么人看了。但是在成熟、稳定的市场（而非快速增长的市场），一个网站的视频日访问总量在较长一段时间内是平稳的，因为随着老视频陆续淡出，不断有新的视频上线，形成协稳的格局。&lt;br&gt; 当然这只是美好的假设。现在让我们来看看这个假设究竟有多强。&lt;br&gt;假设有N个视频，用N维时间序列X(t)表示。M个网站，用M维时间序列b(t)表示。假设视频和网站的多对多关系用M*N的0-1矩阵A表示：即A[i][j]=1当且仅当视频j出现在网站i上。于是有下列线性方程组：A*X(t)=b(t)&lt;br&gt;模型假设说每个网站的流量都平稳，也就是A*EX(t)=Eb(t)=b。考虑方程组AX=b的非负数解，下面简称解。&lt;br&gt;当方程组无解时，说明"每个网站的流量都平稳"的假设不成立。&lt;br&gt; 当方程组解存在唯一时，X(t)也平稳，这是退化的情形，即所有视频的流量都平稳，这在现实世界很难发生。&lt;br&gt;当方程组解存在且不唯一时，才是模型假设的经典情形，即若干非平稳序列的线性组合平稳，由线性代数知识可知，此时A的行秩小于N是必要的。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5592390930777911435?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5592390930777911435/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5592390930777911435' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5592390930777911435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5592390930777911435'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/10/blog-post.html' title='协稳的假设有多强？'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6384125334412309266</id><published>2010-10-03T21:50:00.001+08:00</published><updated>2010-10-03T21:50:51.016+08:00</updated><title type='text'>修改App Engine上的cronjob</title><content type='html'>以前用Windows的时候用Java+Eclipse写了一个免费收短信的工具，每天两条，一个天气预报，一个每日英语。&lt;br&gt;最近觉得每天发的那个每日英语内容没什么意思，决定取消掉。可是已经换了电脑，Eclipse一键部署的功能没有了。&lt;br&gt;全新的Ubuntu下，下载了一个Python的App Engine SDK，唯一的目的就是停掉发每日英语的cronjob。&lt;br&gt;原本担心：&lt;br&gt;1. 没有代码树如何提交？&lt;br&gt;2. 当时部署的是Java的环境，现在如何用Python工具修改？&lt;br&gt; 实践发现：&lt;br&gt;只需要建一个目录a，下面放两个文件：&lt;br&gt;空白的应用程序配置文件&lt;br&gt;app.yaml&lt;br&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;application: freewheel-sms&lt;br&gt;version: 2&lt;br&gt; runtime: python&lt;br&gt;api_version: 1&lt;br&gt;&lt;br&gt;handlers:&lt;br&gt;- url: /&lt;br&gt;&amp;nbsp; static_dir: /&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;和新的cronjob配置文件&lt;br&gt;cron.yaml&lt;br&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt; cron:&lt;br&gt;- description: daily_weather&lt;br&gt;&amp;nbsp; url: /routine&lt;br&gt;&amp;nbsp; schedule: every day 21:02&lt;br&gt;&amp;nbsp; timezone: Asia/Shanghai&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;然后执行&lt;br&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt; python appcfg.py update_cron a&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;即可&lt;br&gt;这个部署脚本特别单纯，不管代码diff，也不管原来部署的运行时语言，只管更新cronjob&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6384125334412309266?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6384125334412309266/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6384125334412309266' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6384125334412309266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6384125334412309266'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/10/app-enginecronjob.html' title='修改App Engine上的cronjob'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-7516771437017945463</id><published>2010-10-02T21:15:00.001+08:00</published><updated>2010-10-03T19:50:28.890+08:00</updated><title type='text'>How to use VPN in Ubuntu 10.4</title><content type='html'>参考&lt;br /&gt;&lt;a href="http://www.mcmaster.ca/uts/network/vpn/vpnclient_linux.html"&gt;http://www.mcmaster.ca/uts/network/vpn/vpnclient_linux.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.lamnk.com/blog/vpn/how-to-install-cisco-vpn-client-on-ubuntu-jaunty-jackalope-and-karmic-koala-64-bit/"&gt;http://www.lamnk.com/blog/vpn/how-to-install-cisco-vpn-client-on-ubuntu-jaunty-jackalope-and-karmic-koala-64-bit/&lt;/a&gt;&lt;br /&gt;步骤&lt;br /&gt;第一步：下载并解压&lt;br /&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.mcmaster.ca//uts/network/software/vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz"&gt;http://www.mcmaster.ca//uts/network/software/vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;第二步：打补丁de关键三句话&lt;br /&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;wget  &lt;a href="http://lamnk.com/download/vpnclient-linux-2.6.31-final.diff"&gt;http://lamnk.com/download/vpnclient-linux-2.6.31-final.diff&lt;/a&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;patch &amp;lt; ./vpnclient-linux-2.6.31-final.diff&lt;/code&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;sudo sed -i 's/const\ struct\ net_device_ops\  \*netdev_ops;/struct\ net_device_ops\ \*netdev_ops;/' `find /usr/src  -name netdevice.h`&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div&gt;第三步：安装&lt;br /&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;&lt;code&gt;sudo ./vpn_install&lt;br /&gt;sudo /etc/init.d/vpnclient_init start&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;code&gt;&lt;br /&gt;第四步：配置并运行&lt;br /&gt;把你公司的ABCD.pcf复制到&lt;br /&gt;&lt;/code&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;&lt;code&gt;/etc/opt/cisco-vpnclient/Profiles&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;code&gt;然后就可以运行了&lt;br /&gt;&lt;/code&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;&lt;code&gt;vpnclient connect ABCD&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;/blockquote&gt; &lt;code&gt;&lt;br /&gt;我的测试环境：&lt;br /&gt;Linux version 2.6.32-21-generic (buildd@rothera) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-7516771437017945463?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/7516771437017945463/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=7516771437017945463' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7516771437017945463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7516771437017945463'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/10/how-to-use-vpn-in-ubuntu-104.html' title='How to use VPN in Ubuntu 10.4'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-3354001917480527987</id><published>2010-09-28T23:16:00.001+08:00</published><updated>2010-09-28T23:16:32.519+08:00</updated><title type='text'>基本的蒙特卡洛技术（二）</title><content type='html'>&lt;HTML&gt;&lt;HEAD&gt;&lt;STYLE id="styletagforeditor"&gt;body { border: 0px; font-family:verdana; font-size :10pt; direction :ltr; background-color :#FFFFFF; line-height :1.2; margin:0.5in 1in 0.5in 1in}&lt;/STYLE&gt;&lt;STYLE id="styletagtwoforeditor"&gt;table { font-size: 10pt;}&lt;/STYLE&gt;&lt;LINK href="https://css.zohostatic.com/writer/Sep_24_2010_8/https/styles/editor.css" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;META content="{&amp;quot;defaults&amp;quot;:[&amp;quot;101ln&amp;quot;],&amp;quot;counter&amp;quot;:0}" id="zohotab"&gt;&lt;/HEAD&gt;&lt;BODY class style&gt;&lt;P id="zw-12b584ba51dsEziI713cce8" style="margin-left: 0in; "&gt;将计算广告学中的一个问题形式化：&lt;/P&gt;&lt;P id="zw-12b58553033q4jNuL13cce8" style="margin-left: 0in; margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b5862c1b1L-rb113cce8"&gt;假设你开办了一个类似Hulu的网站，有n个视频，上周视频k的访问量是x[k],x[k]&amp;gt;0，通过某种时间序列模型，你预测下周视频k的访问量是y[k],y[k]&amp;gt;=0。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b585bb9fatvrVSI13cce8" style="margin-left: 0in; margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b585bb9fa6McJ0u13cce8"&gt;记x=sum{x[k],k=&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bb9fasf0Jlg13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bb9fajcUDm_13cce8"&gt;1..&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09hM0kTO13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09dTeF213cce8"&gt;n&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09mJGBqu13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09uWrBMJ13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09RFmIOJ13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09NRs0Ra13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09t_zt513cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09njRv-P13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba097LEk_G13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09GXXOhv13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09Gp8woC13cce8"&gt;}&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09NdFzkw13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09U1ESjn13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09iYIi313cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09iiJvYR13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09RNVIvM13cce8"&gt;​, y&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09qiYVt613cce8"&gt;=sum{y[k],k=&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09qJDRwz13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09A2ihiR13cce8"&gt;1..&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09vAvIqO13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09pUgxY313cce8"&gt;n&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09UjFXR13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09bdTxTV13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09RZdNA013cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09P2kf4k13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09OaMPAC13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09cbu-DA13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09gbplQr13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba09afW-x13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b585bba096Xf7Xg13cce8"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58583e2dzyHuv-13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58583e2djQ-5s13cce8"&gt;假设你现在有上周的全部x个视频请求，从中采样m个，第i个代表w[i]个，使得它们代表了下周的视频请求，即E(sum{w[i]h(i,k), i=1..m})=y[k]对任意k=1..n成立，其中&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b5860b84dXhyf7a13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b5860b84d0FR6t613cce8"&gt;示性函数h(i,k)=1当且仅当样本i请求视频k。​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84dY58VGa13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84dYEb_pU13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84deE_K5S13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84dJt-Mb313cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84dnf0L7-13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84e73okBB13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84eHsSCmh13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84ejFxI-Y13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84erx6a6y13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84eFvqGL213cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84ev7MdbQ13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84eB_ND_O13cce8"&gt;​&lt;/SPAN&gt;&lt;SPAN id="zw-12b5860b84eB0A_013cce8"&gt;​&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b5861fc747ADdui13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58e3b0cdlX8b-H13cce8" style="font-size: 1.8em; "&gt;1.&amp;nbsp;加权采样&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58638ac6XJV_5T13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58638ac6wuBluR13cce8"&gt;算法：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b586a5154yKHby13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b586a5154ozgRHz13cce8"&gt;有放回、等概率地从上周x个视频请求中随机选取m个，如果选中的视频请求i来自视频k，则令w[i]=c*y[k]/x[k]，其中c是归一化系数，等于x/m。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b586a6e3ahdKiID13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b586a6e3aa_YEPu13cce8"&gt;无偏性：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b5867ee3cLrDETM13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b5867ee3cbGGcl913cce8"&gt;注意到E(w[i]h(i,k))=w[i]P(h(i,k)=1)=x/m*y[k]/x[k]*x[k]/x=y[k]/m&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58709e14x9z2n-13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58709e14-3URBw13cce8"&gt;停时：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b5870d8b5PMkaYH13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b5870d8b5qX1eft13cce8"&gt;T显然概率一地为m&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b5872ccf9aFd0cm13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58e3c6fbZK1cDs13cce8" style="font-size: 1.8em; "&gt;2. 拒绝方法&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58731640aoVM613cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b587316405yzLd913cce8"&gt;算法：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b587352d3wf2_L13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58746294IpHXtQ13cce8"&gt;重复下列步骤直到接受m个请求为止，有放回、等概率地从上周x个视频请求中随机选取1个，假设它来自视频k，则以概率r[k]接受之，其中r[k]=&lt;/SPAN&gt;&lt;SPAN id="zw-12b587c5818SeDnE13cce8"&gt;c*y[k]/x[k]，其中c=1/max{&lt;/SPAN&gt;&lt;SPAN id="zw-12b587cda71G5kOdr13cce8"&gt;y[k]/x[k]&lt;/SPAN&gt;&lt;SPAN id="zw-12b58a718b9ba29CB13cce8"&gt;, k=1..n&lt;/SPAN&gt;&lt;SPAN id="zw-12b587c5818SeDnE13cce8"&gt;}，接受的请求的权重w都是y/m&lt;/SPAN&gt;&lt;BR id="zw-12b58a7185eezG0o913cce8"&gt;&lt;/P&gt;&lt;P id="zw-12b587d696cL5ny13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b587d696cj3SPM-13cce8"&gt;无偏性：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b587d7e85WIQJ-N13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58807bdcdR_xpu13cce8"&gt;只需证明P(h(i,k)=1)=y[k]/y&lt;/SPAN&gt;&lt;BR id="zw-12b58807b9cKvb-SU13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12b588109e3Gno2d13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b588109e30cb_Xn13cce8"&gt;令事件S(i,k)表示从历史采中的请求i来自视频k，S表示sample，事件A(i)表示接受采中的请求i，A表示Accept。我们已知&lt;/SPAN&gt;&lt;SPAN id="zw-12b588a4bbdNzu-d513cce8"&gt;P(S(i,k))=x[k]/x,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-12b588109e30cb_Xn13cce8"&gt;P(A(i)|S(i,k))=r[k]&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58850143ak0jpf13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58850143_IKaw813cce8"&gt;注意到h(i,k)=1是说，在接受的请求i的条件下，i来自视频k，因此转化成计算条件概率&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58869543Fax_s13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b5886ad5eaQ_AQm13cce8"&gt;P(h(i,k)=1)=P(&lt;/SPAN&gt;&lt;SPAN id="zw-12b5886dc4eZOjCzi13cce8"&gt;S(i,k)|A(i))=&lt;/SPAN&gt;&lt;SPAN id="zw-12b58885cee1wwWbI13cce8"&gt;P(A(i)|S(i,k))*P(S(i,k))/sum{&lt;/SPAN&gt;&lt;SPAN id="zw-12b5888cc9eVbC7n013cce8"&gt;P(A(i)|S(i,k))*P(S(i,k)), k=1..n&lt;/SPAN&gt;&lt;SPAN id="zw-12b58885cee1wwWbI13cce8"&gt;}&lt;/SPAN&gt;&lt;BR id="zw-12b5888cc31R8WVTt13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12b587357764UyuGx13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b588d5fc4uSPStg13cce8"&gt;注：​&lt;/SPAN&gt;&lt;SPAN id="zw-12b588d94911Nu8Tn13cce8"&gt;P(h(i,k)=1)=y[k]/y表明，拒绝方法可以达到按照目标分布采样的目的&lt;/SPAN&gt;&lt;BR id="zw-12b588d944fv5berf13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12b588dfb59vAM5K313cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b588dfb59Ls-cGl13cce8"&gt;停时：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b588e11a3ojXykA13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b588e11a3NzSkoP13cce8"&gt;即接受m个请求，需要尝试T次采样。E(T)=m/P(A(i))。接受概率&lt;/SPAN&gt;&lt;SPAN id="zw-12b58a66a16RCXpwV13cce8"&gt;P(A(i))=y/x/&lt;/SPAN&gt;&lt;SPAN id="zw-12b58a6f0bfGjuDj813cce8"&gt;max{&lt;/SPAN&gt;&lt;SPAN id="zw-12b58a6f0bfcAhk7j13cce8"&gt;y[k]/x[k], k=1..n&lt;/SPAN&gt;&lt;SPAN id="zw-12b58a6f0bfSPjaNs13cce8"&gt;}，也就是说，要想接受概率不太低，那么历史分布和目标分布必须一致接近。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b5892992dDhWXeC13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58e3dd1be_wtKz13cce8" style="font-size: 1.8em; "&gt;3. 拒绝方法的拉斯维加斯版本&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b589acf465-YSMU13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b589acf46Zxa_R113cce8"&gt;算法：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b589b3241fZ8FP_13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b589b3442J98i-13cce8"&gt;重复下列步骤直到视频k上的请求采够y[k]/w个，w=y/m。&lt;/SPAN&gt;&lt;SPAN id="zw-12b589c662fCYCajS13cce8"&gt;有放回、等概率地从上周x个视频请求中随机选取1个，假设它来自视频k，接受它当且仅当&lt;/SPAN&gt;&lt;SPAN id="zw-12b589cf939RU6iLv13cce8"&gt;视频k上的请求还没采够y[k]/w个。接受的请求权重都是w。&lt;/SPAN&gt;&lt;BR id="zw-12b589cf8d4MneRZ13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12b589d525ed9PwAc13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b589d525fQ3mboD13cce8"&gt;注：拉斯维加斯版本的好处是不用计算接受概率，即不需要知道x[k]的情况，这一点在&amp;ldquo;历史分布&amp;rdquo;难以计算的情况下尤其有用。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b589b4a1du_kDF13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b589b4a1dRzNTtz13cce8"&gt;正确性：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58a25d163RpPuF13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58a25d160H2tWn13cce8"&gt;显然算法停止时，P(&lt;/SPAN&gt;&lt;SPAN id="zw-12b58a2b8dfQCfR0b13cce8"&gt;sum{w[i]h(i,k), i=1..m}=y[k]&lt;/SPAN&gt;&lt;SPAN id="zw-12b58a25d160H2tWn13cce8"&gt;)=1。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58aae56505iWIs13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58aae565j0r713cce8"&gt;停时：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58aaf630o38ZN13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58aaf630qscUwc13cce8"&gt;同前&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58a904f07QKqcC13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58e3ee07zJsznu13cce8" style="font-size: 1.8em; "&gt;4. 混合加权拒绝方法&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58a96b220jTykG13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58a96b22QgmC6613cce8"&gt;加权方法完全靠样本权重将历史分布拉到目标分布，以牺牲权重相近为代价，换得最有停时性能。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58aca497wiir613cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58aca497af0G4813cce8"&gt;拒绝方法完全靠接受拒绝控制了分布，以牺牲停时为代价，换得相近的权重。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58acd659ho2iCD13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58acd659c03wOS13cce8"&gt;有些场合，例如利用样本做某种预算控制的模拟，要求权重差异不能太大。这种混合方法目的是在停时和权重差异之间寻求平衡。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58ae16ed5S33yv13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58ae16edLF_1zm13cce8"&gt;算法：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58b020cekMS33u13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58b41615BeEdBJ13cce8"&gt;条件接受概率r[k]=min{1, c*y[k]/x[k]}，c&amp;gt;&lt;/SPAN&gt;&lt;SPAN id="zw-12b58b4cf20oCVbk913cce8"&gt;1/max{&lt;/SPAN&gt;&lt;SPAN id="zw-12b58b4cf21-VPge_13cce8"&gt;y[k]/x[k]&lt;/SPAN&gt;&lt;SPAN id="zw-12b58b4cf21waMulT13cce8"&gt;, k=1..n&lt;/SPAN&gt;&lt;SPAN id="zw-12b58b4cf22F1RF5u13cce8"&gt;}。&lt;/SPAN&gt;&lt;BR id="zw-12b58b4cec9Kh6CdI13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12b58b50727vdBJnk13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58b50729PHA00J13cce8"&gt;权重可以反算出来，当h(i,k)=1时，w[i]=y[k]/m*q/q[k]，其中q=sum{q[k]}，q[k]=r[k]*x[k]/x，这里q其实就是接受概率。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58bb6203yiPyDQ13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58bb6203KYHh0L13cce8"&gt;停时&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58bca221AkPygX13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58bca221A03QD813cce8"&gt;注意到c越大，接受概率越大，停时越小，直到退化为纯加权方法。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58bd5bcbFS5P13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58e3fe8aLKZ7kQ13cce8" style="font-size: 1.8em; "&gt;5. 停时有界的&lt;/SPAN&gt;&lt;SPAN id="zw-12b58e7b791Rbi-313cce8" style="line-height: 28px; font-size: 1.8em; "&gt;混合加权&lt;/SPAN&gt;&lt;SPAN id="zw-12b58e3fe8aLKZ7kQ13cce8" style="font-size: 1.8em; "&gt;拒绝方法&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58bf6c09ZH3MD13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58bf6c09N8ZVRD13cce8"&gt;实际应用，由于SLA等原因，我们要求算法概率1地保证停时有界，即存在M，使得P(T&amp;lt;=M)=1。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58c24e0ablqCcW13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58c24e0aohHsG13cce8"&gt;这时我们松弛掉&amp;ldquo;恰好采纳m个样本&amp;rdquo;的要求。这个方法可以看做方法4的拉斯维加斯版本。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58c6a54dSHlfJ13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58c6a54ds-DEjE13cce8"&gt;算法：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58c77962jkSdV13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58c77963FgCgUx13cce8"&gt;按照历史分布采M个，M&amp;gt;m，权重都是y/m，采够了的视频，拒绝更多样本，最后没采够的视频，通过调整其上每个样本权重，使之满足y[k]。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58d20b3aDJOqyj13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58d20b3aiZXKzb13cce8"&gt;注：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b58d2340aOjMKAT13cce8" style="margin-bottom: 12pt; margin-top: 0pt; margin-left: 0in; "&gt;&lt;SPAN id="zw-12b58d2340aZJSSA13cce8"&gt;这个算法不仅概率1保证停时有界，而且概率1保证满足等式约束&lt;/SPAN&gt;&lt;SPAN id="zw-12b58d3347aq8bC8P13cce8"&gt;sum{w[i]h(i,k), i=1..m}=y[k]，代价是无法预知采纳的样本的个数。&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-3354001917480527987?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/3354001917480527987/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=3354001917480527987' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3354001917480527987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3354001917480527987'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/09/blog-post_28.html' title='基本的蒙特卡洛技术（二）'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5920194741866510928</id><published>2010-09-24T22:37:00.001+08:00</published><updated>2010-09-24T22:37:55.294+08:00</updated><title type='text'>Start to review a textbook with practice</title><content type='html'>&lt;HTML&gt;&lt;HEAD&gt;&lt;STYLE id="styletagforeditor"&gt;body { border: 0px; font-family:verdana; font-size :10pt; direction :ltr; background-color :#FFFFFF; line-height :1.2; margin:4% 10% 4% 10%}&lt;/STYLE&gt;&lt;STYLE id="styletagtwoforeditor"&gt;table { font-size: 10pt;}&lt;/STYLE&gt;&lt;LINK href="http://css.zohostatic.com/writer/Sep_22_2010_3/http/styles/editor.css" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;META content="{&amp;quot;defaults&amp;quot;:[&amp;quot;101ln&amp;quot;],&amp;quot;counter&amp;quot;:0}" id="zohotab"&gt;&lt;/HEAD&gt;&lt;BODY class style&gt;&lt;P id="zw-12b3e3949eccYOtxW13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;/P&gt;&lt;P id="zw-12b43c0aad3-CRwL613cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43c8e8fdy1KvO113cce8"&gt;2 years ago, when I was a graduate student, the lecture of Monte Carlo Method interested me because I needed it for the&amp;nbsp;RBM model in my&amp;nbsp;thesis, although&amp;nbsp;the examples provided by Prof Wang in the class were&amp;nbsp;all about finance which I don't interest in.&lt;/SPAN&gt;&lt;BR id="zw-12b43c0bab9twSXZq13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12b43cbb9ab44m1m-13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43cbb9abcus-WR13cce8"&gt;The book I prepare to review&amp;nbsp;in Chinese&amp;nbsp;(not translate only)&amp;nbsp;is&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b43ca7a2dzeyDT13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;A href="http://www.springer.com/statistics/statistical+theory+and+methods/book/978-0-387-76369-9" id="zw-12b43e2d765qG7na213cce8" target="_blank" title="Monte Carlo Strategies in Scientific Computing"&gt;&lt;SPAN id="zw-12b43e2d763daBQo813cce8"&gt;Monte Carlo Strategies in Scientific Computing&lt;/SPAN&gt;&lt;/A&gt;&lt;BR id="zw-12b43d024dbc6iu813cce8"&gt;&lt;/P&gt;&lt;P id="zw-12b43d02bc3jB9P-13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43d02bc3ZwwhW13cce8"&gt;I want to mix in my practice in Computational Advertising where possible.&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b43f06b9cTdvGsz13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43f06b9cqP8Tic13cce8"&gt;====标志开始的分割线====&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b43e442dcVHDYkT13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43e442dc1mDLH213cce8"&gt;评论+实践计划:&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b43ebddb5E6RU8W13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ebddb5Xo20-013cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE border="1" cellpadding="7" frame="box" id="zw-12b43ec3056og1Iu13cce8" rules="all" style="width: 100%; "&gt;&lt;TBODY id="zw-12b43ec3057CmObMb13cce8"&gt;&lt;TR id="zw-12b43ec305768smoJ13cce8" style="vertical-align: middle; "&gt;&lt;TD id="zw-12b43fc8edejPHJz013cce8" style="width: 33.3333%; "&gt;对应原书章节&lt;/TD&gt;&lt;TD id="zw-12b43ec3057Khh-ux13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec30574che-r13cce8" tbsid="default"&gt;&lt;SPAN id="zw-12b43ec3057M0mY7E13cce8"&gt;主题&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec3058Qjx8fo13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec3058-kVsYA13cce8"&gt;&lt;SPAN id="zw-12b43ec3058Cgm02613cce8"&gt;时间&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12b43ec3059_3jrIa13cce8" style="vertical-align: middle; "&gt;&lt;TD id="zw-12b43fc8eddCgc3nb13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43fcd7b7slFkZ13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43fcd7b8tioQST13cce8"&gt;2​&lt;/SPAN&gt;&lt;BR id="zw-12b43fcd7b7U56gT13cce8"&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec3059xxlQ-P13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec3059f6ZAM13cce8"&gt;&lt;SPAN id="zw-12b43ec3059N_41D613cce8"&gt;基本的蒙特卡洛技术&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec3059OyWCeg13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec305a_tGcND13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ec305apE-Nxp13cce8"&gt;2010年9月、10月&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12b43ec305baEEHq313cce8" style="vertical-align: middle; "&gt;&lt;TD id="zw-12b43fc8eddH406u13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43fcdfe3amk1ge13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43fcdfe4UelR3Y13cce8"&gt;3、4​&lt;/SPAN&gt;&lt;BR id="zw-12b43fcdfe4rX3nzB13cce8"&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec305blx4Ibs13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec305bwx78tS13cce8"&gt;&lt;SPAN id="zw-12b43ec305bQoUyGG13cce8"&gt;序贯蒙特卡洛&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec305c-meaxN13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec305cj1MzSp13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ec305cif3iFW13cce8"&gt;2010年11月、12月&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12b43ec305daKT-gb13cce8" style="vertical-align: middle; "&gt;&lt;TD id="zw-12b43fc8edcziodx413cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43fcea04BT6KDe13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43fcea04pZcMv13cce8"&gt;5​&lt;/SPAN&gt;&lt;BR id="zw-12b43fcea04ONuC_L13cce8"&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec305dzB42mg13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec305dGe5TMR13cce8"&gt;&lt;SPAN id="zw-12b43ec305dWhwQCs13cce8"&gt;马尔科夫链蒙特卡洛&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec305dvFEG-V13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec305dB2qFr213cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ec305dOaqwyz13cce8"&gt;2011年1月、2月&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12b43ec305eMIpcZU13cce8" style="vertical-align: middle; "&gt;&lt;TD id="zw-12b43fc8edc4ydS_F13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43fdbe35MbmXmt13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43fdbe35Qlczqj13cce8"&gt;6、7、8​&lt;/SPAN&gt;&lt;BR id="zw-12b43fdbe35DkjeUY13cce8"&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec305fKYjNHV13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec305fsCYET613cce8"&gt;&lt;SPAN id="zw-12b43ec305fjswSJf13cce8"&gt;条件分布的采样&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec305fifWNEX13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec305fTObnvQ13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ec305f4j19rT13cce8"&gt;2011年3月、4月&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12b43ec3060eo2NQe13cce8" style="vertical-align: middle; "&gt;&lt;TD id="zw-12b43fc8edb3Shz5113cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ffb3afohTf4313cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ffb3af42mcUl13cce8"&gt;9​&lt;/SPAN&gt;&lt;BR id="zw-12b43ffb3afLfzR9z13cce8"&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec3060z5EcL313cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec3060dJqujn13cce8"&gt;&lt;SPAN id="zw-12b43ec30605HJEjS13cce8"&gt;分子动力学与混合蒙特卡洛&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec3061zejMQf13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec3061iJoMFE13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ec3061SoH2DS13cce8"&gt;2011年5月&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12b43ec3067aLgOn913cce8" style="vertical-align: middle; "&gt;&lt;TD id="zw-12b43fc8edbNWjyCQ13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b44002303MPrW7l13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b44002304y9I8v13cce8"&gt;10、11​&lt;/SPAN&gt;&lt;BR id="zw-12b44002304E7c7aX13cce8"&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec3067DKAB413cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec30679FwA4S13cce8"&gt;&lt;SPAN id="zw-12b43ec3067o6E4713cce8"&gt;蒙特卡洛采样的性能优化&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec3067YWWl1613cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec3067Z2sa1t13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ec3067m9r78R13cce8"&gt;2011年6月、7月&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR id="zw-12b43ec3068tHoGoT13cce8" style="vertical-align: middle; "&gt;&lt;TD id="zw-12b43fc8edahfyKiZ13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b4401ba86n9tQXF13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b4401ba86OHVlO13cce8"&gt;12、13​&lt;/SPAN&gt;&lt;BR id="zw-12b4401ba86Iy0vgu13cce8"&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec3068L28Cm613cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec3068cLfrYK13cce8"&gt;&lt;SPAN id="zw-12b43ec3068sxviAs13cce8"&gt;收敛性分析&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD id="zw-12b43ec3069X-8Gf13cce8" style="width: 33.3333%; "&gt;&lt;P id="zw-12b43ec3069564Cs13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ec3069P6GWQT13cce8"&gt;2011年8月、9月&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P id="zw-12b43ec306d9fHMYN13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43ec306dhXrSN013cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b43d1f892Es91513cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43d1f892NOA9u213cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b43d10690HQE_r013cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b43d10690kfFAw13cce8"&gt;基本的蒙特卡洛技术（一）&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b44134a16NKj5jr13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;蒙特卡洛常被理解为随机模拟算法，它的第一个问题就是如何生成满足某种分布的随机数，当没有办法直接从目标分布函数抽样，而只能从另一个分布函数抽样的时候。&lt;/P&gt;&lt;P id="zw-12b44187c63HSYV7X13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b441882b49YIDy-13cce8"&gt;1、​&lt;/SPAN&gt;&amp;ldquo;拒绝方法&amp;rdquo;是基本的方法。它不保证每采一下都能采中一个能要的随机数，但是可以保证采中的要的数满足目标分布函数。&lt;/P&gt;&lt;P id="zw-12b441ef8ab92ites13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;&lt;SPAN id="zw-12b441efe353-sgr13cce8"&gt;2、&amp;ldquo;加权采样&amp;rdquo;其实是退而求其次，它并没有去真的生成满足目标分布的随机数，而是假设该分布函数用来计算某个可积函数的期望，构造一个（随机点、权重）序列，使得该可积函数在这些点上的值的加权平均是原期望的无偏估计。&lt;/SPAN&gt;&lt;BR id="zw-12b441ef8ab9UPnjo13cce8"&gt;&lt;/P&gt;&lt;P id="zw-12b4417b568m5FUrk13cce8" style="margin-bottom: 12pt; margin-top: 0pt; "&gt;（未完待续）&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5920194741866510928?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5920194741866510928/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5920194741866510928' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5920194741866510928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5920194741866510928'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/09/start-to-review-textbook-with-practice.html' title='Start to review a textbook with practice'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8608919391205237918</id><published>2010-09-14T23:12:00.001+08:00</published><updated>2010-09-14T23:12:58.984+08:00</updated><title type='text'>全序集的本质</title><content type='html'>&lt;HTML&gt;&lt;HEAD&gt;&lt;STYLE id="styletagforeditor"&gt;body { border: 0px; font-family:verdana; font-size :10pt; direction :ltr; background-color :#FFFFFF; line-height :1.2; margin:4% 10% 4% 10%}&lt;/STYLE&gt;&lt;STYLE id="styletagtwoforeditor"&gt;table { font-size: 10pt;}&lt;/STYLE&gt;&lt;LINK href="http://css.zohostatic.com/writer/Sep_08_2010_1/http/styles/editor.css" id="stylesheetforeditor" rel="stylesheet"&gt;&lt;/HEAD&gt;&lt;BODY class style&gt;&lt;P id="zw-12b1080f16azsLbCO13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b1084a4850wkXNx13cce8"&gt;上次在和同事讨论问题的时候发现，偏序集不能排序。后来我就很好奇为什么不能，可以排序的集合上应该至少定义一个满足什么条件的二元关系？&lt;/SPAN&gt;&lt;BR id="zw-12b1084a486z1bQuH13cce8"&gt;&lt;SPAN id="zw-12b1084a486vWteM_13cce8"&gt; 先回顾一下偏序集和全序集的定义：&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b10850bda0X-sBc13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b10858f71Csmm8i13cce8"&gt;给定集合S，&amp;ldquo;&amp;le;&amp;rdquo;是S上的二元关系，若&amp;ldquo;&amp;le;&amp;rdquo;满足：&lt;/SPAN&gt;&lt;BR id="zw-12b10858f71TnUhOB13cce8"&gt;&lt;BR id="zw-12b10858f72OKCKZD13cce8"&gt;&lt;SPAN id="zw-12b10858f72DvImag13cce8"&gt;&amp;nbsp;&amp;nbsp; 1. 自反性：&amp;forall;a&amp;isin;S，有a&amp;le;a；&lt;/SPAN&gt;&lt;BR id="zw-12b10858f72j0x9U13cce8"&gt;&lt;SPAN id="zw-12b10858f72vAetfL13cce8"&gt;&amp;nbsp;&amp;nbsp; 2. 反对称性：&amp;forall;a，b&amp;isin;S，a&amp;le;b且b&amp;le;a，则a=b；&lt;/SPAN&gt;&lt;BR id="zw-12b10858f72g7bfeb13cce8"&gt;&lt;SPAN id="zw-12b10858f73IHagDO13cce8"&gt;&amp;nbsp;&amp;nbsp; 3. 传递性：&amp;forall;a，b，c&amp;isin;S，a&amp;le;b且b&amp;le;c，则a&amp;le;c；&lt;/SPAN&gt;&lt;BR id="zw-12b10858f73rU3Mlp13cce8"&gt;&lt;BR id="zw-12b10858f73u4eSeE13cce8"&gt;&lt;SPAN id="zw-12b10858f73yXgo5u13cce8"&gt;则称&amp;ldquo;&amp;le;&amp;rdquo;是S上的非严格偏序或自反偏序。&lt;/SPAN&gt;&lt;SPAN id="zw-12b108622b8NQqU7213cce8"&gt;通常简称&lt;/SPAN&gt;&lt;A href="http://zh.wikipedia.org/zh-sg/%E5%81%8F%E5%BA%8F%E5%85%B3%E7%B3%BB" id="zw-12b1086b32bhYA5k13cce8" target="_blank" title="偏序"&gt;&lt;SPAN id="zw-12b1086b32aG_QdMt13cce8"&gt;偏序&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-12b1086b32aqV3QPK13cce8"&gt;。&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b10878fafkjhtzh13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b10882c8bKWahkh13cce8"&gt;给定集合S，&amp;ldquo;&amp;le;&amp;rdquo;是S上的二元关系，若&amp;ldquo;&amp;le;&amp;rdquo;满足：&lt;/SPAN&gt;&lt;BR id="zw-12b1089ed3cDw4giK13cce8"&gt;&lt;SPAN id="zw-12b10895d71qQ_b13cce8"&gt;&amp;nbsp;&amp;nbsp; 1. &lt;/SPAN&gt;&lt;SPAN id="zw-12b108980f5SeKJ3A13cce8"&gt;完全性&lt;/SPAN&gt;&lt;SPAN id="zw-12b1089cfb1hUYxyA13cce8"&gt;：&lt;/SPAN&gt;&lt;SPAN id="zw-12b10898819k2Ef2t13cce8"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-12b10895d72e3VDMX13cce8"&gt;a &amp;le; b 或 b &amp;le; a &lt;/SPAN&gt;&lt;BR id="zw-12b1089ed3fuEYKBG13cce8"&gt;&lt;SPAN id="zw-12b10892e918iFKhg13cce8"&gt;&amp;nbsp;&amp;nbsp; 2. &lt;/SPAN&gt;&lt;SPAN id="zw-12b1089ca384TTojd13cce8"&gt;反对称性&lt;/SPAN&gt;&lt;SPAN&gt;：&lt;/SPAN&gt;&lt;SPAN id="zw-12b1089cfb1MkJNcO13cce8"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-12b1088047c-667PG13cce8"&gt;如果 a &amp;le; b 且 b &amp;le; a 则 a = b&lt;/SPAN&gt;&lt;BR id="zw-12b1089ed41-kyQw513cce8"&gt;&lt;SPAN id="zw-12b1088047dyndpX413cce8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10895091dmiMSk13cce8"&gt;3. &lt;/SPAN&gt;&lt;SPAN id="zw-12b1089ed97I2BdTK13cce8"&gt;传递性&lt;/SPAN&gt;：&lt;SPAN id="zw-12b1088047dyndpX413cce8"&gt;如果 a &amp;le; b 且 b &amp;le; c 则 a &amp;le; c&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b1089f530ZW_hCU13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b108a0dd4tj3bN13cce8"&gt;则称&amp;ldquo;&amp;le;&amp;rdquo;是S上的&lt;/SPAN&gt;&lt;A href="http://zh.wikipedia.org/zh-sg/%E5%85%A8%E5%BA%8F%E5%85%B3%E7%B3%BB" id="zw-12b108aa144ngjQs13cce8" target="_blank" title="全序"&gt;&lt;SPAN id="zw-12b108aa143bcMZK13cce8"&gt;全序&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN id="zw-12b108aa143XIskvd13cce8"&gt;。&lt;/SPAN&gt;&lt;SPAN id="zw-12b108a0dd5MkhHLB13cce8"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b108eb2a9UiEsD-13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b108a7b73wvWweE13cce8"&gt;&lt;/SPAN&gt;&lt;SPAN id="zw-12b108bcd4eEN-uW13cce8"&gt;显然&lt;/SPAN&gt;，&lt;SPAN id="zw-12b108eb2a9GggcUY13cce8"&gt;完全性蕴含了自反性，因此全序都是偏序。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b109479891nfzZ13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b10947989J915ob13cce8"&gt;命题1：如果&lt;/SPAN&gt;&lt;SPAN id="zw-12b109479898cX9ip13cce8"&gt;&amp;ldquo;&amp;le;&amp;rdquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10947989hdIeMa13cce8"&gt;是&lt;/SPAN&gt;&lt;SPAN id="zw-12b109479896KU7ui13cce8"&gt;集合S&lt;/SPAN&gt;&lt;SPAN id="zw-12b10947989_o6uZ13cce8"&gt;上的偏序，且满足&lt;/SPAN&gt;&lt;SPAN id="zw-12b10947989PDteo113cce8"&gt;&amp;ldquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10947989MLIggp13cce8"&gt;4. 反向传递性：&lt;/SPAN&gt;&lt;SPAN id="zw-12b10947989EuB0WV13cce8"&gt;&amp;forall;a，b，c&amp;isin;S，a&amp;le;b不成立且b&amp;le;c不成立，则a&amp;le;c&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798aQtbjJ13cce8"&gt;不成立&amp;rdquo;，&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798agDOeoG13cce8"&gt;那么&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798ar06b1i13cce8"&gt;&amp;ldquo;&amp;le;&amp;rdquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798aJyly9613cce8"&gt;是&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798ab2kW_M13cce8"&gt;集合S&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798aUjRq0D13cce8"&gt;上的全序&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798ajvDy413cce8"&gt;。&lt;/SPAN&gt;&lt;BR id="zw-12b1094798aUxtrP813cce8"&gt;&lt;BR id="zw-12b1094798aeOSl813cce8"&gt;&lt;SPAN id="zw-12b1094798aKiu4qw13cce8"&gt;证明：只需要证明&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798a9w9XEF13cce8"&gt;&amp;ldquo;&amp;le;&amp;rdquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798bA9rzC13cce8"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798b8Xch6E13cce8"&gt;具有完全性。假设&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798bvIrPCw13cce8"&gt;&amp;ldquo; &lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798bjZsZUF13cce8"&gt;a &amp;le; b 或 b &amp;le; a &lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798by3dpJA13cce8"&gt;&amp;rdquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798bHobJ513cce8"&gt;不成立，即&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798bmHeJXr13cce8"&gt;a&amp;le;b不成立且b&amp;le;a不成立&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798bOgsb3J13cce8"&gt;，由反向传递性，&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798bWckcKf13cce8"&gt;a&amp;le;a&lt;/SPAN&gt;&lt;SPAN id="zw-12b1094798b8GPl6413cce8"&gt;不成立&lt;/SPAN&gt;&lt;SPAN id="zw-12b10948220ZITVI313cce8"&gt;，与自反性矛盾。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b109538a7otHjS13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b109538a7VAKSmu13cce8"&gt;命题2：如果&lt;/SPAN&gt;&lt;SPAN id="zw-12b10956290HVIL7N13cce8"&gt;&amp;ldquo;&amp;le;&amp;rdquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10956291n9xbY13cce8"&gt;是&lt;/SPAN&gt;&lt;SPAN id="zw-12b10956291NTFY-f13cce8"&gt;集合S&lt;/SPAN&gt;&lt;SPAN id="zw-12b10956292pUaYwr13cce8"&gt;上的全序&lt;/SPAN&gt;&lt;SPAN id="zw-12b109571d8F03lUA13cce8"&gt;，那么&lt;/SPAN&gt;&lt;SPAN id="zw-12b1095b231EHsd8p13cce8"&gt;&amp;ldquo;&amp;le;&amp;rdquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b1095b231Bhn_fq13cce8"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-12b1095b600pBOuTd13cce8"&gt;满足&lt;/SPAN&gt;&lt;SPAN id="zw-12b1095a3cb8CilTp13cce8"&gt;反向传递性&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b109e4454QD-m7i13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b109e4454JbYyzd13cce8"&gt;证明：&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4454xWck1a13cce8"&gt;假设a&amp;le;b不成立且b&amp;le;c不成立&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4454zi3EmQ13cce8"&gt;，&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455DKnyqw13cce8"&gt;由完全性，&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455_Ydnk13cce8"&gt;&amp;ldquo;a&amp;le;b不成立&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455YvcJ8613cce8"&gt;&amp;rdquo;蕴含了&amp;ldquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455yQm5TO13cce8"&gt;b &amp;le; a &lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455k-hrQ13cce8"&gt;&amp;rdquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455UIT3Is13cce8"&gt;，&amp;ldquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455vQZT8m13cce8"&gt;b&amp;le;c不成立&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455eZAWv513cce8"&gt;&amp;rdquo;蕴含了&amp;ldquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455AZDIL13cce8"&gt;c&amp;le;b&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455Ij6jQr13cce8"&gt;&amp;rdquo;&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4455kBj_4y13cce8"&gt;。再由传递性，c&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e44551Q3zX13cce8"&gt;&amp;le;&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4456_zJ9ay13cce8"&gt;a。假设&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4456Faf2c513cce8"&gt;a&amp;le;c&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4456sNAIIN13cce8"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4456CuvV13cce8"&gt;，则由反对称性，得a=c。&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4456uXNc9013cce8"&gt;a&amp;le;b不成立&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4456srhegH13cce8"&gt;，即&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e4456nJtZ113cce8"&gt;c&amp;le;b不成立&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e471euv7SdT13cce8"&gt;，而&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e89d8Zf16ZI13cce8"&gt;b&amp;le;c也不成立&lt;/SPAN&gt;&lt;SPAN id="zw-12b109e8ef8qFuFX213cce8"&gt;，与完全性矛盾。&lt;/SPAN&gt;&lt;BR id="zw-12b10a0c2f7rVhPZ613cce8"&gt;&lt;BR id="zw-12b10a0c2f7AvE8qV13cce8"&gt;&lt;SPAN id="zw-12b109ff04dTmkXK13cce8"&gt;结合上述命题，可知：&lt;/SPAN&gt;&lt;SPAN id="zw-12b10a1feb44GQ8gy13cce8" style="background-color: rgb(255, 255, 0);"&gt;一个偏序集合是全序集合，当且仅当具有&lt;/SPAN&gt;&lt;SPAN id="zw-12b10a0a241_RK0e013cce8" style="background-color: rgb(255, 255, 0);"&gt;反向传递性&lt;/SPAN&gt;&lt;SPAN id="zw-12b10a0a7b6MDbpLn13cce8"&gt;。也就是说，&lt;/SPAN&gt;&lt;SPAN id="zw-12b10a0c32bitjNGj13cce8"&gt;反向传递性&lt;/SPAN&gt;&lt;SPAN id="zw-12b10a0c7e7vo22O13cce8"&gt;在某种程度上是全序集合的本质。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b10acd0a8PnPJ-p13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b10acd0a8GojyII13cce8"&gt; &lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a8htAbMo13cce8"&gt;经典排序算法中，如何隐含地使用了&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a8M84cmq13cce8"&gt;指定序的反向传递性&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a8JCCVVi13cce8"&gt;来保证算法正确性呢？&lt;/SPAN&gt;&lt;BR id="zw-12b10b7d74eJNqobQ13cce8"&gt;&lt;BR id="zw-12b10b7d74f4niXp113cce8"&gt;&lt;SPAN id="zw-12b10acd0a9E93KTT13cce8"&gt;注意到，排序算法总是要求传入一个&amp;quot;&amp;lt;&amp;quot;，但是保证的是数组按照&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a9dSq4v13cce8"&gt;&amp;le;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a92Oh_P13cce8"&gt;&amp;quot;排好序。&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b31169Rn4w13cce8"&gt;其中&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b33a12Cw5LmA13cce8"&gt;a&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b3551ctkm-s13cce8"&gt;&amp;le;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b35aa8eKzwz413cce8"&gt;b定义为b&amp;lt;a不成立。&lt;/SPAN&gt;&lt;BR id="zw-12b10b7d752XyvcPS13cce8"&gt;&lt;SPAN id="zw-12b10acd0a9etwEZr13cce8"&gt;以快速排序算法为例，假设pivot为b，所有&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a9htW7N813cce8"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a9o8_HV-13cce8"&gt;b的元素放在b的左边，其他元素放在b的右边，不失一般性（递归地），只需证明&amp;quot;b左边的任一元素a&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a9oEc3kz13cce8"&gt;&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a9CHlXc-13cce8"&gt;&amp;le;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0a9Fgo7HO13cce8"&gt;&amp;quot;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0aaVbIydb13cce8"&gt;b右边的&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b7d792dMhb1O13cce8"&gt;任一&lt;/SPAN&gt;&lt;SPAN id="zw-12b10acd0aaVbIydb13cce8"&gt;元素c&amp;quot;。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b10b6da16AwE5Q-13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b10b6da16sYa6gS13cce8"&gt;假设存在a和c，使得a&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b6da16_YXSTX13cce8"&gt;&amp;le;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b6da16p2yNYA13cce8"&gt;c不成立。由&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b6da16JRfIMq13cce8"&gt;a在b的左边&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b6da16n6aRRB13cce8"&gt;，知a&amp;lt;b成立，即b&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b6da16HO6fD913cce8"&gt;&amp;le;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b6da17Z0Mum213cce8"&gt;a不成立。由反向传递性，b&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b6da17ESXLiN13cce8"&gt;&amp;le;&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b6da17Y1YYy13cce8"&gt;c不成立，&lt;/SPAN&gt;&lt;SPAN id="zw-12b10b6da171MoTEN13cce8"&gt;即c&amp;lt;b，这与c在b的右边矛盾。&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b10bd6994YZBG4z13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b10bd6994QBaWvR13cce8"&gt;&lt;/SPAN&gt;&lt;BR id="zw-12b10bd69947pPjFv13cce8"&gt;&lt;BR id="zw-12b10bd6994DbV3h13cce8"&gt;&lt;BR id="zw-12b10bd6994sj_DL13cce8"&gt;&lt;SPAN id="zw-12b10bd6994P6__Z013cce8"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b10adf42bM-SL8I13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b10adf42bOJIJX013cce8"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P id="zw-12b10ace6f7LmiIhE13cce8" style="margin-bottom: 12pt; margin-top: 0pt;"&gt;&lt;SPAN id="zw-12b10ace6f7uJsqt13cce8"&gt;&lt;/SPAN&gt;&lt;BR id="zw-12b10ace6f7h7_yrF13cce8"&gt;&lt;BR id="zw-12b10ace6f7AEP64A13cce8"&gt;&lt;BR id="zw-12b10ace6f7ENX07813cce8"&gt;&lt;BR id="zw-12b10ace6f7-9OcRD13cce8"&gt;&lt;BR id="zw-12b10ace6f8-WiSg13cce8"&gt;&lt;BR id="zw-12b10ace6f8rvCJWq13cce8"&gt;&lt;BR id="zw-12b10ace6f8_zO9k13cce8"&gt;&lt;BR id="zw-12b10ace6f802dROq13cce8"&gt;&lt;BR id="zw-12b10ace6f8Xza-lf13cce8"&gt;&lt;BR id="zw-12b10ace6f8Rj9um013cce8"&gt;&lt;BR id="zw-12b10ace6f81G35m13cce8"&gt;&lt;BR id="zw-12b10ace6f8MgLEax13cce8"&gt;&lt;BR id="zw-12b10ace6f8fQRsM113cce8"&gt;&lt;BR id="zw-12b10ace6f8UAH2N213cce8"&gt;&lt;BR id="zw-12b10ace6f8hKubHX13cce8"&gt;&lt;BR id="zw-12b10ace6f8AYOq-C13cce8"&gt;&lt;BR id="zw-12b10ace6f9bXGPmP13cce8"&gt;&lt;BR id="zw-12b10ace6f9OMqx1N13cce8"&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8608919391205237918?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8608919391205237918/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8608919391205237918' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8608919391205237918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8608919391205237918'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/09/blog-post.html' title='全序集的本质'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-2711389438545738646</id><published>2010-09-13T22:43:00.001+08:00</published><updated>2010-09-13T22:43:12.505+08:00</updated><title type='text'>URL size limit of Google Chart API</title><content type='html'>&lt;a href="http://code.google.com/apis/chart/faq.html#url_length"&gt;Google 帮助这样说&lt;/a&gt;&lt;br&gt;The longest URL         that Google accepts in a chart GET request is 2048 characters in length,         after URL-encoding (e.g., &lt;code&gt;|&lt;/code&gt; becomes &lt;code&gt;%7C&lt;/code&gt;). For POST,         this limit is 16K.&lt;br&gt;&lt;br&gt;按照帮助中的建议，将坐标数据压缩后，可以画更复杂（线条更稠密）的图了。&lt;br&gt;最简单的文本编码前缀是&lt;br&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;chd=t:&lt;br&gt; &lt;/blockquote&gt;后面接1,2,3.1415,2.17这样的字符串&lt;br&gt;&lt;br&gt;压缩编码可以用下面这个函数实现单向转换：&lt;br&gt;&lt;br&gt;&lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;def encoding_chart_data(l, upper_bound):#l is a list of uint&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; enc_map = &amp;#39;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&amp;#39;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return &amp;quot;&amp;quot;.join(map(lambda x:enc_map[int(round((len(enc_map)-1) * 1.0 * x / upper_bound))],l))&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;编码后的前缀是&lt;br&gt; &lt;blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote"&gt;chd=s:&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;调Google Char API的时候，很多时候感觉都像是在调一个矢量绘图的API，脑子里时刻要充满Shape/Scale的概念，而不是X,Y的欧氏坐标。很亲切。&lt;br&gt; &lt;br&gt;有两种比较另类的Chart很吸引我：&lt;br&gt;&lt;a href="http://code.google.com/apis/chart/docs/gallery/graphviz.html"&gt;http://code.google.com/apis/chart/docs/gallery/graphviz.html&lt;/a&gt;&lt;br&gt;可以将一个&amp;ldquo;图&amp;rdquo;可视化（GraphViz语法）&lt;br&gt;&lt;a href="http://code.google.com/apis/chart/docs/gallery/formulas.html"&gt;http://code.google.com/apis/chart/docs/gallery/formulas.html&lt;/a&gt;&lt;br&gt; 渲染一个公式（TeX语法）&lt;br&gt;&lt;br&gt;还提供了两个工具，相当有用：&lt;br&gt;&lt;a href="http://code.google.com/apis/chart/docs/chart_wizard.html"&gt;http://code.google.com/apis/chart/docs/chart_wizard.html&lt;/a&gt;&lt;br&gt;向导，帮助你快速熟悉API的各项参数&lt;br&gt;&lt;a href="http://code.google.com/apis/chart/docs/chart_playground.html"&gt;http://code.google.com/apis/chart/docs/chart_playground.html&lt;/a&gt;&lt;br&gt; 在线调试工具，帮助你缩进API URL，显示调试信息，例如告诉你为什么某一组参数无法渲染，非常好用&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-2711389438545738646?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/2711389438545738646/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=2711389438545738646' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2711389438545738646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2711389438545738646'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/09/url-size-limit-of-google-chart-api.html' title='URL size limit of Google Chart API'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-269962132354424998</id><published>2010-08-18T13:26:00.001+08:00</published><updated>2010-08-18T13:26:34.431+08:00</updated><title type='text'>不能在偏序集上排序</title><content type='html'>&lt;br&gt;bool myfunction (int i,int j) { return (i==4) &amp;amp;&amp;amp; (j ==2); }&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;int main() {&lt;br&gt;&lt;br&gt;    {&lt;br&gt;&lt;br&gt;        {&lt;br&gt;&lt;br&gt;        std::vector&amp;lt;int&amp;gt; x(4);&lt;br&gt;&lt;br&gt;        for(int i=0;i&amp;lt;4;++i)x[i] = (i + 1);&lt;br&gt;&lt;br&gt;        for(int i=0;i&amp;lt;4;++i)printf(&amp;quot;%d,&amp;quot;, x[i]);&lt;br&gt;&lt;br&gt;        printf(&amp;quot;\n&amp;quot;);&lt;br&gt;&lt;br&gt;        std::stable_sort(x.begin(), x.end(), myfunction);&lt;br&gt;&lt;br&gt;        for(int i=0;i&amp;lt;4;++i)printf(&amp;quot;%d,&amp;quot;, x[i]);&lt;br&gt;&lt;br&gt;        printf(&amp;quot;\n&amp;quot;);&lt;br&gt;&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        {&lt;br&gt;&lt;br&gt;        std::vector&amp;lt;int&amp;gt; x(4);&lt;br&gt;&lt;br&gt;        for(int i=0;i&amp;lt;4;++i)x[i] = (i + 1);&lt;br&gt;&lt;br&gt;        x[0]=2;&lt;br&gt;&lt;br&gt;        x[1]=4;&lt;br&gt;&lt;br&gt;        for(int i=0;i&amp;lt;4;++i)printf(&amp;quot;%d,&amp;quot;, x[i]);&lt;br&gt;&lt;br&gt;        printf(&amp;quot;\n&amp;quot;);&lt;br&gt;&lt;br&gt;        std::stable_sort(x.begin(), x.end(), myfunction);&lt;br&gt;&lt;br&gt;        for(int i=0;i&amp;lt;4;++i)printf(&amp;quot;%d,&amp;quot;, x[i]);&lt;br&gt;&lt;br&gt;        printf(&amp;quot;\n&amp;quot;);&lt;br&gt;&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        return 0;&lt;br&gt;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Result&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;1,2,3,4,&lt;br&gt;&lt;br&gt;1,2,3,4,&lt;br&gt;&lt;br&gt;2,4,3,4,&lt;br&gt;&lt;br&gt;4,2,3,4,&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;a href="http://middleangle.com/rif/derifatives/Home/13/sorts-and-partial-orderings"&gt;http://middleangle.com/rif/derifatives/Home/13/sorts-and-partial-orderings&lt;/a&gt;&lt;br&gt;&lt;br&gt;[12:32:59] wangyuantao: 构造了一个反例，不能排序。序列1,2,3,4，只定义4&amp;lt;2，按照归并排序，结果还是1,2,3,4&lt;br&gt;&lt;br&gt;[12:33:07] 翟倩(Zhai Qian): 这是谁的blog啊&lt;br&gt;&lt;br&gt;[12:33:18] wangyuantao: 不认识google出来的&lt;br&gt;&lt;br&gt;[12:47:14] wangyuantao: 关于偏序集上的排序和TopN算法，这篇文章被引用的比较多&lt;br&gt;&lt;br&gt;&lt;a href="http://www.siam.org/proceedings/soda/2009/SODA09_044_daskalakisc.pdf"&gt;http://www.siam.org/proceedings/soda/2009/SODA09_044_daskalakisc.pdf&lt;/a&gt;&lt;br&gt;&lt;br&gt;光看了摘要，貌似最好的结果也不保证最坏情况下的复杂度比O(n^2)好。所以，就按照目前的实现两两比吧&lt;br&gt;&lt;br&gt;发送自 HTC&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-269962132354424998?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/269962132354424998/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=269962132354424998' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/269962132354424998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/269962132354424998'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/08/blog-post.html' title='不能在偏序集上排序'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-216784119227634808</id><published>2010-07-27T20:45:00.001+08:00</published><updated>2010-07-27T20:45:24.711+08:00</updated><title type='text'>不等式移项</title><content type='html'>&lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);" lang="EN-US"&gt;unsigned&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);" lang="EN-US"&gt;int&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; x=6;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);" lang="EN-US"&gt;int&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt; y=8;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;u&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(100, 40, 128);" lang="EN-US"&gt;printf&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;u&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;(&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);" lang="EN-US"&gt;&amp;quot;(x&amp;gt;y)=%d\n&amp;quot;&lt;/span&gt;&lt;/u&gt;&lt;u&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;, x&amp;gt;y);&lt;/span&gt;&lt;/u&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: left;" align="left"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(100, 40, 128);" lang="EN-US"&gt;printf&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);" lang="EN-US"&gt;&amp;quot;(x-y&amp;gt;0)=%d\n&amp;quot;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;, x-y&amp;gt;0);&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(100, 40, 128);" lang="EN-US"&gt;printf&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);" lang="EN-US"&gt;&amp;quot;(y-x&amp;lt;0)=%d\n&amp;quot;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;" lang="EN-US"&gt;, y-x&amp;lt;0);&lt;br&gt;&lt;br&gt;今天实验后才发现，这三个表达式两两不等价，C语言的类型转换真是博大精深啊。&lt;br&gt;第一个：编译警告，有符号和无符号整数比大小有危险。&lt;br&gt;第二个：错的一塌糊涂。x-y返回一个无符号整数-2，竟然大于0了。&lt;br&gt;第三个：对。&lt;br&gt;&lt;br&gt;比较稳妥的方法是显式类型转换。&lt;br&gt;&lt;/span&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-216784119227634808?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/216784119227634808/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=216784119227634808' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/216784119227634808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/216784119227634808'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/07/blog-post.html' title='不等式移项'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8053306527278757717</id><published>2010-05-08T16:26:00.001+08:00</published><updated>2010-05-08T16:26:21.278+08:00</updated><title type='text'>挑鸡蛋</title><content type='html'>下午去菜市场买鸡蛋，挑大的买，忽然脑袋里蹦出来这样一个问题：&lt;br&gt;假设鸡蛋的大小服从[a,b]均匀分布，那么如果我任意取一个，则期望大小为(a+b)/2。如果我任取两个，要较大的，期望是多少呢？感觉应该比(a+b)/2大。&lt;br&gt;回来用期望的定义算了一下，是a/3+2b/3。直观上这个结论也非常好接受：具有某种对称性。推广到N个也成立。对离散情形也有类似的结论。&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8053306527278757717?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8053306527278757717/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8053306527278757717' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8053306527278757717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8053306527278757717'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/05/blog-post.html' title='挑鸡蛋'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-2650686226570124751</id><published>2010-03-14T22:34:00.000+08:00</published><updated>2010-03-14T22:35:03.633+08:00</updated><title type='text'>GSL + MinGW + Eclipse</title><content type='html'>想当年在学校的时候只用过Matlab，没有用C++做过科学计算，现在觉得很遗憾。周末在家琢磨GSL，懒得切到Linux，又不敢往公司的开发环境上乱装东西，所以很没追求的又用最熟悉的MinGW+Eclipse了。&lt;br&gt;&lt;br&gt;参考&lt;br&gt;&lt;a href="http://www.diybl.com/course/3_program/c++/cppsl/2008326/107387.html"&gt;http://www.diybl.com/course/3_program/c++/cppsl/2008326/107387.html&lt;/a&gt;&lt;br&gt; &lt;br&gt;步骤&lt;br&gt;1.下载并安装&lt;br&gt;&lt;a href="http://gnuwin32.sourceforge.net/downlinks/gsl.php"&gt;http://gnuwin32.sourceforge.net/downlinks/gsl.php&lt;/a&gt;&lt;br&gt;2. 安装库&lt;br&gt;复制C:\Program Files\GnuWin32\bin下的libgsl.dll和libgslcblas.dll到C:\MinGW\bin&lt;br&gt; 复制C:\Program Files\GnuWin32\lib下的libgsl.a 和 libgslcblas.a到C:\MinGW\lib&lt;br&gt;3. 在C++ Project中添加include path&lt;br&gt;&amp;quot;C:\Program Files\GnuWin32\include&amp;quot;&lt;br&gt;4. 运行实例&lt;br&gt;#include &amp;lt;gsl/gsl_sf_bessel.h&amp;gt;&lt;br&gt;int main() &lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double x = 5.0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double y = gsl_sf_bessel_J0 (x);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf (&amp;quot;J0(%g) = %.18e\n&amp;quot;, x, y);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-2650686226570124751?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/2650686226570124751/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=2650686226570124751' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2650686226570124751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2650686226570124751'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/03/gsl-mingw-eclipse.html' title='GSL + MinGW + Eclipse'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-2782113769375076762</id><published>2010-03-06T10:14:00.001+08:00</published><updated>2010-03-06T10:14:29.899+08:00</updated><title type='text'>[Reading] Optimal Online Assignment with Forecasts</title><content type='html'>正在读Yahoo! Research的一篇旧文。文章中，将在线广告投放的问题，理解成一种assignment problem。一个顶点集是advertiser，另一个顶点集是user。&lt;br&gt;模型中有两点关键：&lt;br&gt;1、online，user集中的点依次到达，要求依次assign给advertiser集中的点。&lt;br&gt;2、forecast，允许对offline数据进行采样，生成"compact allocation plan"，用于指导online assignment。&lt;br&gt; 约束条件：&lt;br&gt;每个user不能提供太多的流量（User Experience?）&lt;br&gt;每个advertiser的需求有不等式约束，可能是流量下限（至少达到一定的投放效果），也可能是流量上限（不能超预算）。&lt;br&gt;目标函数：&lt;br&gt;生没看懂。。。&lt;br&gt;文章的数学味很浓，我已经把凸优化、对偶空间那套理论忘光了，读起来相当吃力。。。嗯，正好督促我复习一下&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-2782113769375076762?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/2782113769375076762/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=2782113769375076762' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2782113769375076762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2782113769375076762'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/03/reading-optimal-online-assignment-with.html' title='[Reading] Optimal Online Assignment with Forecasts'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-7294743401971017206</id><published>2010-02-28T15:04:00.001+08:00</published><updated>2010-02-28T15:04:31.392+08:00</updated><title type='text'>Space rail</title><content type='html'>听zeta同学推荐，订了一个space rail，貌似很好玩的样子，相当期待。在YY的时候，忽然发现这个东东貌似很适合搞软件的团队做team building~&lt;br&gt;需求：造出来的过山车要能转起来(functional)，而且样子要酷(polished)&lt;br&gt;设计：利用力学原理(theory)，设计轨道(architecture)造型(product)&lt;br&gt;构建：每个人组装(implement)一个模块(module)，确保小球在给定进入速度范围内可以通过自己的模块，并且离开速度满足给定要求(unit test)，然后集成(integration)&lt;br&gt; 管理：分配底座、支架、轨道等零件(resource)给各个玩家(engineer)，协调各个模块组装的进度等&lt;br&gt;迭代：当过山车做装好后(release)，每当有了新装置或设想(new feature)，稍加改动(refactoring)就可以安装到成品中，而不需要全部拆散重来(redesign/rewrite)，并且递归地，改动后的过山车仍然具有此属性(continual improvement)。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-7294743401971017206?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/7294743401971017206/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=7294743401971017206' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7294743401971017206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7294743401971017206'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/02/space-rail.html' title='Space rail'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5308507453744298211</id><published>2010-02-19T11:27:00.001+08:00</published><updated>2010-02-19T11:27:55.374+08:00</updated><title type='text'>春节。上海。西塘。杭州。</title><content type='html'>&lt;p class="mobile-photo"&gt;&lt;a href="http://4.bp.blogspot.com/_iMG9M3S-9Xo/S34FO4LIocI/AAAAAAAACvE/JqElLanIi8A/s1600-h/%3D%3FGB2312%3FB%3Fs77SwNChs7QuanBn%3F%3D-775375"&gt;&lt;img src="http://4.bp.blogspot.com/_iMG9M3S-9Xo/S34FO4LIocI/AAAAAAAACvE/JqElLanIi8A/s320/%3D%3FGB2312%3FB%3Fs77SwNChs7QuanBn%3F%3D-775375"  border="0" alt="" id="BLOGGER_PHOTO_ID_5439791153065533890" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="mobile-photo"&gt;&lt;a href="http://3.bp.blogspot.com/_iMG9M3S-9Xo/S34FPXEpekI/AAAAAAAACvM/p5-F5aD7ShE/s1600-h/%3D%3FGB2312%3FB%3FsMfR8sjiLmpwZw%3D%3D%3F%3D-777527"&gt;&lt;img src="http://3.bp.blogspot.com/_iMG9M3S-9Xo/S34FPXEpekI/AAAAAAAACvM/p5-F5aD7ShE/s320/%3D%3FGB2312%3FB%3FsMfR8sjiLmpwZw%3D%3D%3F%3D-777527"  border="0" alt="" id="BLOGGER_PHOTO_ID_5439791161359825474" /&gt;&lt;/a&gt;&lt;/p&gt;以为，杭州是一个充满了怨念的城市，可我还是去了。&lt;br&gt;大年初二凌晨5点，和LP踏上了南灰的旅途。落地是上海时间10:30，淅淅沥沥下着雨，冷得棉袄里面好像装着冰。下午从南站往嘉善。&lt;br&gt;晚上赶到西塘，被嘉善的出租车黑了。不能怪公交车收的早，也不能怪正品黑车杀人不见血，只能怪晚辈我人生地不熟不敢跟人家犯蛮，成全了那披着出租车绿皮的黑车。&lt;br&gt;晚上住在杨老板家，杨老板人很好，给我们热粽子吃。终于见识了南方的冬天没有暖气的冷是啥滋味。&lt;br&gt;初三，天晴了，西塘上午的阳光真的非常非常亚克西。只想坐在水边的石台上一直发呆，看着游人走着石板路，看着爱人吃着煮青豆，看着老太太不急不忙地递过来臭豆腐、粉蒸肉，惬意地只想睡了算了。LP食欲和玩心超好，逢食必吃，逢店必进，逢景必拍照，活蹦乱跳。&lt;br&gt;下午在杨老板的帮助下换到了提前发往杭州的汽车票，于是两个小P孩拍PP走了。一觉醒来，就到了莫干山路pod，传说中的家庭房，超cute的小房间。晚饭杭大路尘衣食府，尘依小炒和扒羊肉相当不错(偷偷拍照)，片儿川没有下次了。&lt;br&gt;初四，彻底在武林门/广场迷失了方向，因为杭州修轨道一号线，公交车已经不再既定路线上行动了。灵隐，九溪，都没去成，因为找不到Y1，Y2，很崩溃。只想摔了手机，卸了Google&lt;br&gt;Map。中午灰溜溜地去河坊街吃王润兴，吃到一半犯病了，不知道是不是因为太难吃了。比08年来杭州那次犯得还厉害。下午继续在河坊街逛，买了丝巾和被面，反正不会砍价，索性没有砍，宰就宰吧，反正杭州我已经来四次了，没有下次了。&lt;br&gt;初四晚上，一咬牙一瞪眼，回到北京了。&lt;p&gt;春节前：&lt;br&gt;阳光明媚。上班浪费。&lt;p&gt;春节：&lt;br&gt;怨念沪杭。怀念西塘。&lt;p&gt;春节后：&lt;br&gt;龙体欠安。提前下班。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5308507453744298211?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5308507453744298211/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5308507453744298211' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5308507453744298211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5308507453744298211'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/02/blog-post.html' title='春节。上海。西塘。杭州。'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_iMG9M3S-9Xo/S34FO4LIocI/AAAAAAAACvE/JqElLanIi8A/s72-c/%3D%3FGB2312%3FB%3Fs77SwNChs7QuanBn%3F%3D-775375' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8477199384912394492</id><published>2010-02-12T21:29:00.001+08:00</published><updated>2010-02-12T21:29:12.192+08:00</updated><title type='text'>Happy Chinese New Year!</title><content type='html'>富饶之城，赛乐堡，全城热恋，放鸽子&lt;br&gt;&lt;br&gt;春节快到了，娱乐活动多了起来。&lt;br&gt;周四午饭和501的同事一起吃，那些家伙比传说中的客气。饭后响应weiwei的号召去玩&lt;b&gt;富饶之城&lt;/b&gt;。我是第一次玩，还是挺有意思的。桌游的魅力在于现场互动，大家都相当生动。Free有一局不幸地当了我的替罪羊被刺了，然后从此一蹶不振，Snow是永远的军阀，挣钱就是拆台，口号是我赢不了谁也别想赢，Dandan为了争第二费劲了心思，我一直很想在博物馆下面藏一个大学，因为觉得那样特别逗，不过一上来就被军阀摧了。赢家当然是weiwei，在正确的时机建造了八级浮屠，不愧是有经验的玩家。&lt;br&gt; 下午公司里人越来越少，每个人起身离去都要和剩下的所有人告别说"明年见"，搞得我越来越没心情coding了。下班后跑到&lt;b&gt;赛乐堡&lt;/b&gt;和朋友K歌，含自助晚餐。因为下班前吃了一包饼干，不饿，于是我说，"你们先吃，我给你们唱歌！"，然后开开原唱，到处找调。找到所有人都吃饱了我也没找到调。5个人水平都一般，个别人个别曲目个别段落有感觉有旋律，大多时候有感觉没旋律或没感觉。然而非常High，不知不觉4个小时过去了，还有4屏的曲目没轮上，就很伤心的走了。&lt;br&gt; 周五叫嚣着去上班，然而早上起床后发现阳光明媚，心想上班浪费，于是和MM去看&lt;b&gt;全城热恋&lt;/b&gt;了。虽然很肥皂很商业，但是还是有几处很有趣的。最逗的是字幕，在显示人物发短信的时候，居然可以支持退格！还有就是显示制作群的时候，文字可以配合音乐抖啊抖的。两只小鱼的动画也很搞。&lt;br&gt;下午回家干活，处理了服务器上的一个小事件，又读了篇PM的Design。然后上Skype，发现DZF在线上，一个昨天也号称今天要去上班的童鞋，结果一问，啊哈，也没去公司，再一问XXX，也没去。。。瀑布汗，今天503貌似就剩前台姐姐了。。。心中顿时升起一坨坨的歉意。&lt;br&gt; 明儿就三十儿了，大后天就去南方玩了，保佑我们的Server keep alive吧！&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8477199384912394492?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8477199384912394492/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8477199384912394492' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8477199384912394492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8477199384912394492'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/02/happy-chinese-new-year.html' title='Happy Chinese New Year!'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5886744980323863390</id><published>2010-02-10T22:24:00.001+08:00</published><updated>2010-02-10T22:24:52.679+08:00</updated><title type='text'>The limitation of the sampling algorithm: a simple case</title><content type='html'>一个不能用采样算法的问题的例子&lt;br&gt;网站某天有N个request，每个request都包含一个session_id，现在希望统计y=平均每个session有几次request。若M为distinct的session的个数（通常M&amp;lt;N），则y=N/M。&lt;br&gt;现在从N个request中随机取n个，记这其中distinct的session的个数为m，令随机变量X=n/m，则EX!=y&lt;br&gt; 反例：当n=1时，m恒=1，X恒=1。&lt;br&gt;问题：是否存在一个采样算法，使得算法的输出是y的无偏、相合估计？&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5886744980323863390?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5886744980323863390/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5886744980323863390' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5886744980323863390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5886744980323863390'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/02/limitation-of-sampling-algorithm-simple.html' title='The limitation of the sampling algorithm: a simple case'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8656912440801624775</id><published>2010-02-07T13:37:00.001+08:00</published><updated>2010-02-07T13:37:16.495+08:00</updated><title type='text'>The impact of resampling to RSE in sampling algorithms</title><content type='html'>采样算法中，是否可重复采样对相对标准差的影响&lt;br&gt;&lt;br&gt;在古典概型中有放回和无放回差别很大。在随机采样算法中，对已经采过的样本，是否还可以再采？&lt;br&gt;问题：&lt;br&gt;假设有N个零件，次品率为p（即有pN个次品）。现在已知N，要求通过采样率为q（检查qN次）算法来估计p。&lt;br&gt;&lt;br&gt;有放回算法：&lt;br&gt;依次生成qN个独立同分布U[0,N)的随机数xi，检查第xi个零件是否为次品，记随机变量X为检查出的次品的个数。来求X的分布。&lt;br&gt; 令Xi=1表示第xi个零件为次品，则X=X1+...+X_qN&lt;br&gt;P(Xi=1)=p，EXi=p，根据期望线性性，EX=EX1+EX_qN=pqN，DX=pqN(1-p)&lt;br&gt;&lt;a href="http://en.wikipedia.org/wiki/Standard_error_%28statistics%29#Relative_Standard_Error"&gt;相对标准差&lt;/a&gt;的平方RSE2为DX/(EX)^2=(1-p)/(pqN)&lt;br&gt; &lt;br&gt;无放回算法：&lt;br&gt;一次从N个零件中随机抽取qN个零件，记其中次品个数为X，则X服从&lt;a href="%20http://course.cug.edu.cn/21cn/%E6%A6%82%E7%8E%87%E8%AE%BA%E4%B8%8E%E6%95%B0%E7%90%86%E7%BB%9F%E8%AE%A1/gltj/3/gltj03040102.htm"&gt;超几何分布&lt;/a&gt;。&lt;br&gt;EX=pqN，DX=p(1-p)q(1-q)N，RSE2=(1-p)(1-q)/(pqN)&lt;br&gt; &lt;br&gt;对比发现，两个算法的RSE2就差个(1-q)，&lt;b&gt;即相同采样率q下，无放回更精确&lt;/b&gt;。当然，对于千分之一的采样率，二者差别可以忽略，但是如果要采50%的样，最好用无放回算法了。这也符合物理直观。&lt;br&gt;但是不管有没有放回，RSE都关于p,q,N单调递减，因此，固定p（p来自问题域），可以通过调节qN来寻求性能与精度的平衡――&lt;br&gt;当N较小时，用比较大的q来维持精度，反正样本数qN也不大。&lt;br&gt;当N较大时，不需要很大的q，因为反正RSE2的分母上已经有个N了：）&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8656912440801624775?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8656912440801624775/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8656912440801624775' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8656912440801624775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8656912440801624775'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/02/impact-of-resampling-to-rse-in-sampling.html' title='The impact of resampling to RSE in sampling algorithms'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-9090456798661553135</id><published>2010-01-26T22:05:00.001+08:00</published><updated>2010-01-26T22:05:54.650+08:00</updated><title type='text'>Share Two Google Calendar App</title><content type='html'>&lt;font size="4"&gt;Calendars&lt;/font&gt;&lt;br&gt;1) Daily English&lt;br&gt;ID&lt;br&gt;&lt;a href="mailto:gfn0kpsechk859laf5effn31uo@group.calendar.google.com"&gt;gfn0kpsechk859laf5effn31uo@group.calendar.google.com&lt;/a&gt;&lt;br&gt;preview&lt;br&gt;&lt;a href="http://www.google.com/calendar/embed?src=gfn0kpsechk859laf5effn31uo%40group.calendar.google.com&amp;amp;ctz=Asia/Shanghai"&gt;http://www.google.com/calendar/embed?src=gfn0kpsechk859laf5effn31uo%40group.calendar.google.com&amp;amp;ctz=Asia/Shanghai&lt;/a&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt;2) Beijing Weather&lt;br&gt;ID&lt;br&gt;&lt;a href="mailto:oiio53f5pflo33a3nd328gfics@group.calendar.google.com"&gt;oiio53f5pflo33a3nd328gfics@group.calendar.google.com&lt;/a&gt;&lt;br&gt;preview&lt;br&gt;&lt;a style="font-weight: normal;" href="http://www.google.com/calendar/embed?src=oiio53f5pflo33a3nd328gfics%40group.calendar.google.com&amp;amp;ctz=Asia/Shanghai" target="_blank"&gt;http://www.google.com/calendar/embed?src=oiio53f5pflo33a3nd328gfics%40group.calendar.google.com&amp;amp;ctz=Asia/Shanghai&lt;/a&gt;  &lt;br&gt;&lt;br&gt;&lt;font size="4"&gt;How to use&lt;/font&gt;&lt;br&gt;step 1 &lt;br&gt;go to your Google Calendar and paste the ID above into the text box title with &amp;quot;Add a friend&amp;#39;s calendar&amp;quot; at left;&lt;br&gt;step 2 (optional)&lt;br&gt;Add SMS as a Notification for the calendar, then you can receive Daily English/Beijing Weather everyday!&lt;br&gt; &lt;br&gt;&lt;font size="4"&gt;Copyright&lt;/font&gt;&lt;br&gt;Daily English &lt;a href="http://pipes.yahoo.com"&gt;piped&lt;/a&gt; from &lt;a href="http://dict.cn"&gt;dict.cn&lt;/a&gt;&lt;br&gt;Beijing Weather &lt;a href="http://appengine.google.com"&gt;fetched&lt;/a&gt; from &lt;a href="http://weather.com.cn"&gt;weather.com.cn&lt;/a&gt;&lt;br&gt; &lt;br&gt;&lt;font size="4"&gt;More&lt;/font&gt;&lt;br&gt;Tell me what you want, I&amp;#39;m pleasure to pipe it into your SMS :)&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-9090456798661553135?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/9090456798661553135/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=9090456798661553135' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/9090456798661553135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/9090456798661553135'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/01/share-two-google-calendar-app.html' title='Share Two Google Calendar App'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-3700914919133213093</id><published>2010-01-24T11:37:00.001+08:00</published><updated>2010-01-24T11:37:10.410+08:00</updated><title type='text'>Ubuntu 9.10 remember last boot choice</title><content type='html'>&lt;a href="http://ubuntuforums.org/showthread.php?t=1195275"&gt;http://ubuntuforums.org/showthread.php?t=1195275&lt;/a&gt;&lt;p&gt;step 1&lt;br&gt;sudo gedit &amp;quot;/etc/default/grub&amp;quot;&lt;br&gt;change&lt;br&gt;&amp;quot;GRUB_DEFAULT=0&amp;quot;&lt;br&gt;to&lt;br&gt;&amp;quot;GRUB_DEFAULT=saved&amp;quot;&lt;p&gt;step 2&lt;br&gt;sudo update-grub&lt;p&gt;step 3&lt;br&gt;reboot&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-3700914919133213093?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/3700914919133213093/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=3700914919133213093' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3700914919133213093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3700914919133213093'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/01/ubuntu-910-remember-last-boot-choice.html' title='Ubuntu 9.10 remember last boot choice'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6861366363977570060</id><published>2010-01-17T21:14:00.000+08:00</published><updated>2010-01-17T21:15:01.161+08:00</updated><title type='text'>Reading about Refactoring</title><content type='html'>I&amp;#39;m reading &lt;a href="http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1263652735&amp;amp;sr=8-1" target="_blank"&gt;a book about refactoring&lt;/a&gt; these days, and found some good points useful in my work.&lt;br&gt;  &lt;font size="4"&gt;1. Definition&lt;/font&gt;&lt;br&gt;Refactor do not change any observable behavior of software&lt;br&gt;//But new features are needed, they are mixed in time, but should not mixed in mind. &lt;b&gt;They are two things!&lt;/b&gt;&lt;br&gt;//Programmers should never add any new feature without PM design while refactoring.&lt;br&gt;  &lt;font size="4"&gt;2. Aim&lt;/font&gt;&lt;br&gt;Improving the design&lt;br&gt;//Performance&lt;br&gt;//Data &lt;b&gt;Consistency&lt;/b&gt;&lt;br&gt; //Reuse the logic&lt;br&gt;Make the code easy to understand&lt;br&gt;//Not easy, because the logic is really complicated sometimes. We should try.&lt;br&gt;Find bugs&lt;br&gt;//&lt;b&gt;Clarifying the assumptions&lt;/b&gt; of each unit!&lt;br&gt;Move on fast&lt;br&gt; //Decayed design is a huge burden. Without it, we can move fast!&lt;br&gt; &lt;font size="4"&gt;3. When and when not&lt;/font&gt;&lt;br&gt;&lt;a href="http://sourcemaking.com/refactoring/when-should-you-refactor"&gt;&lt;b&gt;Three strikes&lt;/b&gt;&lt;b&gt; and you refactor.&lt;/b&gt;&lt;/a&gt;&lt;br&gt;//I used to refactor at two strike, and always find it unnecessary in the end.&lt;br&gt; Right time: adding new features, fixing bugs, doing a code review&lt;br&gt;Wrong time: Need to rewrite, near to deadline&lt;br&gt;//Stop refactoring on branch since staging release&lt;br&gt;&lt;font size="4"&gt;4. Limitation&lt;/font&gt;&lt;br&gt;DB, interface&lt;br&gt; //change them carefully. Data migration is always dangerous. Other team depend on your interface, so if you change it, they have to change!&lt;br&gt;Design&lt;br&gt;//The feature design is sometimes lead to bad structure of program. &lt;b&gt;Engineers are obliged to reduce the bad design.&lt;/b&gt;&lt;br&gt; &lt;font size="4"&gt;5. Bad smell&lt;/font&gt;&lt;br&gt;Long parameters list&lt;br&gt;//Erlang program is easy to be writen into these style&lt;br&gt;Switch statement instead of &lt;b&gt;polymorph&lt;/b&gt;&lt;br&gt;//Erlang has no switch, it is good! I love polymorph&lt;br&gt; Lazy class&lt;br&gt;//Someone loves it, but I never use it&lt;br&gt;Use member fields as global variable&lt;br&gt;//I hate it very much, although I do it sometimes&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;//Member fields are state of an instance, rather than a basket holding the mess you do not know where to put it.&lt;/span&gt;&lt;/b&gt;&lt;br&gt; Data classes&lt;br&gt;//All the time I wish all small data struct can be thrown into protobuf, but sometimes they need quick lookup or other functions. It is difficult to trade off.&lt;br&gt;&lt;font size="4"&gt;6. Test&lt;/font&gt;&lt;br&gt;When you get a bug report, start by writing a unit test that expose the bug.&lt;br&gt; //I&amp;#39;m not sure if all the refactoring can be covered by unit test. I love TDD, however, I find it hard to maintain the unit tests because the inner interfaces changed frequently. Unit tests turn from my proud into my burden that I have to change accordingly. So I think writing too much unit test is not a good idea. Today I agree that unit tests have two major purpose: &lt;b&gt;1) Code coverage, 2) reported bugs coverage&lt;/b&gt;&lt;br&gt; &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6861366363977570060?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6861366363977570060/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6861366363977570060' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6861366363977570060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6861366363977570060'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/01/reading-about-refactoring.html' title='Reading about Refactoring'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-2167565388268508369</id><published>2010-01-05T23:22:00.001+08:00</published><updated>2010-01-05T23:22:25.600+08:00</updated><title type='text'>2010 Resolution</title><content type='html'>Many &lt;a href="http://b2.broom9.com/?p=1585"&gt;resolutions&lt;/a&gt; &lt;a href="http://feedproxy.google.com/%7Er/ranxiang/%7E3/noke4ik7NYE/"&gt;around&lt;/a&gt;, even a &lt;a href="http://moninavelarde.com/newyears/"&gt;generator&lt;/a&gt; was found:p&lt;br&gt; &lt;br&gt;My wish list this year&lt;br&gt;&lt;br&gt;Healthy&lt;br&gt;Weekly sweat&lt;br&gt;Gain weight &lt;br&gt;Tech&lt;br&gt;Expert in Linux Shell/Python/C++&lt;br&gt;Get start with Design Pattern&lt;br&gt;Sci&lt;br&gt;Keep on following Recommendation Algorithms&lt;br&gt;Get start with Microeconomics&lt;br&gt; Sandbox&lt;br&gt;Dig into App Engine/GData&lt;br&gt;Popularize my Blog&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-2167565388268508369?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/2167565388268508369/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=2167565388268508369' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2167565388268508369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2167565388268508369'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2010/01/2010-resolution.html' title='2010 Resolution'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-2391981754595101216</id><published>2009-12-27T12:15:00.002+08:00</published><updated>2009-12-27T15:36:01.776+08:00</updated><title type='text'>Free SMS</title><content type='html'>功能：&lt;br /&gt;通过互联网免费发送短信&lt;p&gt;原理：&lt;br /&gt;Google Calendar可以通过运营商发送短信提醒&lt;br /&gt;Google App Engine可以当虚拟主机运行简单的程序&lt;br /&gt;Google App Engine上可以跑Google Calendar API的类库&lt;p&gt;详解：&lt;br /&gt;假设你想给A发短信，而且不想花钱。&lt;br /&gt;1、让A注册一个Google账号，如果A已经有Google账号，此步可以省略；&lt;br /&gt;2、你自己用一个Google账号B，在Calendar里面创建一个新日历，比如名字叫aaa，分享给A；&lt;br /&gt;3、让A打开他账号下的Calendar，如果还没设置SMS，要先点Set up your mobile phone to receive&lt;br /&gt;notifications，选中国、输入手机号，点&amp;quot;发送验证码&amp;quot;，然后A的手机短信收到一个验证码，填到网页的验证码输入框中，点&amp;quot;Finishe&lt;br /&gt;Setup&amp;quot;，然后页面显示状态变成了绿色的&amp;quot;Phone number successfully&lt;br /&gt;validated&amp;quot;。关键--让A找到你分享给A的日历aaa，设置提醒，默认通过SMS，提前事件一分钟发送；&lt;br /&gt;4、你去开通Google App Engine，在&lt;a href="http://xxxxx.appspot.com"&gt;xxxxx.appspot.com&lt;/a&gt;部署一个网站，网站后台程序自动通过Calendar&lt;br /&gt;API向账号B的日历aaa添加事件，事件的时间设置为当前时间+75秒，这样你基本上就可以实时给A发消息了。程序关键的一段代码(Java)：&lt;br /&gt;private void send_msg(String to, String msg) throws Exception {&lt;br /&gt;  // login&lt;br /&gt;  CalendarService myService = new CalendarService(&amp;quot;useless&amp;quot;);&lt;br /&gt;  myService.setUserCredentials(USERNAME, PASSWORD);&lt;br /&gt;  // get URL&lt;br /&gt;  CalendarFeed resultFeed = myService&lt;br /&gt;    .getFeed(&lt;br /&gt;      new URL(&lt;br /&gt;        &amp;quot;&lt;a href="http://www.google.com/calendar/feeds/default/owncalendars/full"&gt;http://www.google.com/calendar/feeds/default/owncalendars/full&lt;/a&gt;&amp;quot;),&lt;br /&gt;      CalendarFeed.class);&lt;br /&gt;  String post_url = null;&lt;br /&gt;  for (int i = 0; i &amp;lt; resultFeed.getEntries().size(); ++i) {&lt;br /&gt;   CalendarEntry entry = resultFeed.getEntries().get(i);&lt;br /&gt;   if (entry.getTitle().getPlainText().equals(to)) {&lt;br /&gt;    post_url = &amp;quot;&lt;a href="http://www.google.com/calendar/feeds"&gt;http://www.google.com/calendar/feeds&lt;/a&gt;&amp;quot;&lt;br /&gt;      + entry.getId().substring(&lt;br /&gt;        entry.getId().lastIndexOf(&amp;quot;/&amp;quot;))&lt;br /&gt;      + &amp;quot;/private/full&amp;quot;;&lt;br /&gt;    break;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  // create event&lt;br /&gt;  if (post_url == null)&lt;br /&gt;   throw new Exception(to + &amp;quot; not found&amp;quot;);&lt;br /&gt;  CalendarEventEntry myEntry = new CalendarEventEntry();&lt;br /&gt;  myEntry.setTitle(new PlainTextConstruct(msg));&lt;br /&gt;  long now = DateTime.now().getValue() + (TIMEZONE * 3600 + DELAY) * 1000;&lt;br /&gt;  When eventTimes = new When();&lt;br /&gt;  eventTimes.setStartTime(new DateTime(now));&lt;br /&gt;  eventTimes.setEndTime(new DateTime(now + 60 * 1000));&lt;br /&gt;  myEntry.addTime(eventTimes);&lt;br /&gt;  myService.insert(new URL(post_url), myEntry);&lt;br /&gt; }&lt;br /&gt;然后外面简单包一层就可以用了&lt;br /&gt;public class SimpleServlet extends HttpServlet {&lt;br /&gt; private static final String USERNAME = &amp;quot;&lt;a href="mailto:B@gmail.com"&gt;B@gmail.com&lt;/a&gt;&amp;quot;;&lt;br /&gt; private static final String PASSWORD = &amp;quot;B&amp;quot;;&lt;br /&gt; // now() + delay = the event time&lt;br /&gt; private static final long DELAY = 60 + 15;//seconds&lt;br /&gt; private static final int TIMEZONE = 8;//hours&lt;br /&gt; public void doGet(HttpServletRequest req, HttpServletResponse resp)&lt;br /&gt;throws IOException {&lt;br /&gt;  String to = req.getParameter(&amp;quot;to&amp;quot;);&lt;br /&gt;  String msg = req.getParameter(&amp;quot;msg&amp;quot;);&lt;br /&gt;  send_msg(to, msg);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;（其中时区的问题你得自己动脑筋想一想）&lt;br /&gt;配置web.xml&lt;br /&gt; &amp;lt;servlet&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;api&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;servlet-class&amp;gt;SimpleServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt; &amp;lt;/servlet&amp;gt;&lt;br /&gt; &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;  &amp;lt;servlet-name&amp;gt;api&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;  &amp;lt;url-pattern&amp;gt;/api&amp;lt;/url-pattern&amp;gt;&lt;br /&gt; &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;5、通过Web发送短信&lt;br /&gt;打开Firefox或UCWeb，输入网址，形如&lt;a href="http://xxx.appspot.com/api?to=aaa&amp;amp;msg=balabala"&gt;http://xxx.appspot.com/api?to=aaa&amp;amp;msg=balabala&lt;/a&gt;&lt;p&gt;限制：&lt;br /&gt;msg不能超过57个字符（不同账号可能会有出入）&lt;br /&gt;可能有一天app engine会撞墙&lt;br /&gt;可能有一天你app engine的quota会用完&lt;br /&gt;可能有一天Google会Ban掉你这样调用API的&lt;p&gt;开发：&lt;br /&gt;个人认为用Java+Eclipse+Google Plug-in最方便，可以本地debug、一键部署&lt;br /&gt;&lt;a href="http://code.google.com/appengine/docs/java/tools/eclipse.html"&gt;http://code.google.com/appengine/docs/java/tools/eclipse.html&lt;/a&gt;&lt;p&gt;应用：&lt;br /&gt;1、私聊&lt;br /&gt;用Web发送，用短信接收，所以只要能上网，就可以随时随地免费发短信，而且接受者可以不用上网。比飞信省流量，还不用装客户端。P.S.因为你可以登陆账号B，所以如果什么话说出去后又后悔了，可以在15秒内登陆Google&lt;br /&gt;Calendar删除该Event即可。&lt;p&gt;2、当Twitter用&lt;br /&gt;把自己的日历publish出去，让你那几个闺蜜来订阅。然后你api?to=yourself&amp;amp;msg=balabalalalala她们就收到短信了。&lt;p&gt;3、群聊&lt;br /&gt;为了识别说话人的身份，Servlet程序需要多做一点工作。不然群里你一言我一语都不知道哪句话是谁说的就乱套了。&lt;br /&gt;另外，怎样才能用一种简单的方式，不让自己的留言也发条短信给自己，我还没想好。&lt;p&gt;4、Monitor&lt;br /&gt;比如你有一个系统，后台跑一个cronjob，让它&lt;br /&gt;50 0 * * *  wget &amp;quot;&lt;a href="http://xxxx.appspot.com/api?to=your_team&amp;amp;msg=`grep"&gt;http://xxxx.appspot.com/api?to=your_team&amp;amp;msg=`grep&lt;/a&gt;&lt;br /&gt;ERROR logfile | wc -l`&amp;quot; -O /dev/null&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-2391981754595101216?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/2391981754595101216/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=2391981754595101216' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2391981754595101216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2391981754595101216'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/12/free-sms.html' title='Free SMS'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-3642422719953606532</id><published>2009-10-17T21:52:00.001+08:00</published><updated>2009-10-17T21:52:04.942+08:00</updated><title type='text'>时钟纸牌</title><content type='html'>《随机算法》一书中，时钟纸牌是这样一个程序：考虑13*4张标准扑克牌，随机排成13堆。先从第13堆中取一张，然后迭代地，每次从第x堆中取一张牌，其中x是上一次取的牌的面值，直到某次第x堆中没有牌为止。&lt;br&gt;命题：最后一次取的那张牌是13。&lt;br&gt;证明：假设最后一次取的牌不是13，是X，那么此时第X堆中没有牌，而程序开始时第X堆中有4张牌，所以在此之前已经从第X堆中取4张牌了，而每次从X堆中取牌，都必须要求上一次翻开的是X，所以在此之前已经翻开4张X了。一共就4张X，这次又翻出一张X，矛盾。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-3642422719953606532?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/3642422719953606532/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=3642422719953606532' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3642422719953606532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3642422719953606532'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/10/blog-post.html' title='时钟纸牌'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-4365435180409897149</id><published>2009-05-11T16:52:00.001+08:00</published><updated>2009-05-11T16:52:20.353+08:00</updated><title type='text'>Principle of Shrink Method in collaborative filtering</title><content type='html'>&lt;link href="file:///C:%5CDOCUME%7E1%5CWANGYU%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List"  &gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;w:WordDocument&gt;&lt;w:View&gt;Normal&lt;/w:View&gt;&lt;w:Zoom&gt;0&lt;/w:Zoom&gt;&lt;w:PunctuationKerning/&gt;&lt;w:DrawingGridVerticalSpacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;&lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;&lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;&lt;w:ValidateAgainstSchemas/&gt;&lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;&lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;&lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;&lt;w:Compatibility&gt;&lt;w:SpaceForUL/&gt;&lt;w:BalanceSingleByteDoubleByteWidth/&gt;&lt;w:DoNotLeaveBackslashAlone/&gt;&lt;w:ULTrailSpace/&gt;&lt;w:DoNotExpandShiftReturn/&gt;&lt;w:AdjustLineHeightInTable/&gt;&lt;w:BreakWrappedTables/&gt;&lt;w:SnapToGridInCell/&gt;&lt;w:WrapTextWithPunct/&gt;&lt;w:UseAsianBreakRules/&gt;&lt;w:DontGrowAutofit/&gt;&lt;w:UseFELayout/&gt;&lt;/w:Compatibility&gt;&lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;&lt;/w:WordDocument&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;w:LatentStyles DefLockedState="false" LatentStyleCount="156"&gt;&lt;/w:LatentStyles&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;style  &gt;&lt;!--  /* Font Definitions */  @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt;&lt;/style&gt;&lt;p class="MsoNormal"  &gt;&lt;span style="font-family: 宋体;"  &gt;在&lt;/span&gt;&lt;span lang="EN-US"  &gt;Scalable Collaborative Filtering with Jointly Derived Neighborhood InterpolationWeights&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;等很多篇流行的协同过滤算法的文献中，都提到了&lt;/span&gt;&lt;span lang="EN-US"  &gt;Shrink&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;技巧。&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  &gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&amp;nbsp;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  &gt;&lt;span lang="EN-US"  &gt;Shrink&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;技巧的理论基础是高斯假设下的贝叶斯参数估计，这部分内容是经典的，可以在贝叶斯方法、模式分类等的领域相关教科书中找到。我们将假设和推导过程整理、重述如下：&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"  &gt;假设我们要估计参数&lt;img id="latexexpressionimage1" imagesize="120" latexexpression=" \mu" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031117100_31117100_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5CWANGYU%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" rel="File-List"  &gt;&lt;link href="file:///C:%5CDOCUME%7E1%5CWANGYU%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_editdata.mso" rel="Edit-Time-Data"  &gt;&lt;link href="file:///C:%5CDOCUME%7E1%5CWANGYU%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_oledata.mso" rel="OLE-Object-Data"  &gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;w:WordDocument&gt;&lt;w:View&gt;Normal&lt;/w:View&gt;&lt;w:Zoom&gt;0&lt;/w:Zoom&gt;&lt;w:PunctuationKerning/&gt;&lt;w:DrawingGridVerticalSpacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;&lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;&lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;&lt;w:ValidateAgainstSchemas/&gt;&lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;&lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;&lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;&lt;w:Compatibility&gt;&lt;w:SpaceForUL/&gt;&lt;w:BalanceSingleByteDoubleByteWidth/&gt;&lt;w:DoNotLeaveBackslashAlone/&gt;&lt;w:ULTrailSpace/&gt;&lt;w:DoNotExpandShiftReturn/&gt;&lt;w:AdjustLineHeightInTable/&gt;&lt;w:BreakWrappedTables/&gt;&lt;w:SnapToGridInCell/&gt;&lt;w:WrapTextWithPunct/&gt;&lt;w:UseAsianBreakRules/&gt;&lt;w:DontGrowAutofit/&gt;&lt;w:UseFELayout/&gt;&lt;/w:Compatibility&gt;&lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;&lt;/w:WordDocument&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;w:LatentStyles DefLockedState="false" LatentStyleCount="156"&gt;&lt;/w:LatentStyles&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;style  &gt;&lt;!--  /* Font Definitions */  @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:"\@宋体"; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt;&lt;/style&gt;&lt;span style="font-family: 宋体;"  &gt;，视为随机变量，关于&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage2" imagesize="120" latexexpression=" \mu" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031117100_31117100_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;的先验知识是它服从正态分布&lt;img id="latexexpressionimage3" imagesize="120" latexexpression="N(\mu _0 ,\sigma _0^2 )" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031188492_31188492_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 6pt"  &gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;&lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1026"   DrawAspect="Content" ObjectID="_1303565080"&gt;&lt;/o:OLEObject&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，即其概率密度函数为：&lt;br  &gt;&lt;img id="latexexpressionimage4" imagesize="120" latexexpression="p(\mu )=\frac{1}{\sqrt {2\pi \sigma _0 } }\exp \left( {-\frac{1}{2}\left(  {\frac{\mu -\mu _0 }{\sigma _0 }} \right)^2} \right)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031204938_31204938_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;对&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage5" imagesize="120" latexexpression=" \mu" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031117100_31117100_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;的一组观测值&lt;img id="latexexpressionimage6" imagesize="120" latexexpression="D=\left\{ {x_1 ,...,x_n } \right\}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031286050_31286050_img2.png&amp;accId=766392000000002007"  &gt;视为独立同分布的样本，其总体为随机变量&lt;img id="latexexpressionimage7" imagesize="120" latexexpression="x" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031331186_31331186_img2.png&amp;accId=766392000000002007"  &gt;，满足条件正态分布&lt;img id="latexexpressionimage8" imagesize="120" latexexpression="x\vert \mu \sim N(\mu ,\sigma ^2)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031310766_31310766_img2.png&amp;accId=766392000000002007"  &gt;。我们关心的是，有了一组观测后，我们应该如何用&lt;img id="latexexpressionimage9" imagesize="120" latexexpression="D" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031343987_31343987_img2.png&amp;accId=766392000000002007"  &gt;的信息修正先验知识。为此，计算后验概率密度函数：&lt;br  &gt;&lt;img id="latexexpressionimage10" imagesize="120" latexexpression="p(\mu \vert D)=c^{-1}p(D\vert \mu )p(\mu )=c^{-1}\prod\limits_{k=1}^n  {p(x_k \vert \mu )p(\mu )} " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031399924_31399924_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;img id="latexexpressionimage11" imagesize="120" latexexpression="=c^{-1}\prod\limits_{k=1}^n {\frac{1}{\sqrt {2\pi \sigma } }} \exp \left(  {-\frac{1}{2}\left( {\frac{x_k -\mu }{\sigma }} \right)^2}  \right)\frac{1}{\sqrt {2\pi \sigma _0 } }\exp \left( {-\frac{1}{2}\left(  {\frac{\mu -\mu _0 }{\sigma _0 }} \right)^2} \right)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031435664_31435664_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;img id="latexexpressionimage12" imagesize="120" latexexpression="=c^{-1}\exp \left( {-\frac{1}{2}\left( {\left[ {\sum\limits_{k=1}^n  {\left( {\frac{x_k -\mu }{\sigma }} \right)^2} } \right]+\left( {\frac{\mu  -\mu _0 }{\sigma _0 }} \right)^2} \right)} \right)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031486446_31486446_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;img id="latexexpressionimage13" imagesize="120" latexexpression="=c^{-1}\exp \left( {-\frac{1}{2}\left[ {\left( {\frac{n}{\sigma  ^2}+\frac{1}{\sigma _0^2 }} \right)\mu ^2-2\left( {\frac{1}{\sigma  ^2}\sum\limits_{k=1}^n {x_k } +\frac{\mu _0 }{\sigma _0^2 }} \right)\mu }  \right]} \right) " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031512114_31512114_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;其中c为归一化系数，倒数第二步将其整理为&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage14" imagesize="120" latexexpression=" \mu" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031117100_31117100_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;的二次型，是为了将其凑成正态密度函数的形式。上式告诉我们&lt;img id="latexexpressionimage15" imagesize="120" latexexpression="\mu \vert D" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031599004_31599004_img2.png&amp;accId=766392000000002007"  &gt;服从正态分布，记为&lt;img id="latexexpressionimage16" imagesize="120" latexexpression="N(\mu _n ,\sigma _n^2 )" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031613018_31613018_img2.png&amp;accId=766392000000002007"  &gt;，则&lt;br  &gt;&lt;img id="latexexpressionimage17" imagesize="120" latexexpression="p(\mu \vert D)=\frac{1}{\sqrt {2\pi \sigma _n } }\exp \left(  {-\frac{1}{2}\left( {\frac{\mu -\mu _n }{\sigma _n }} \right)^2} \right)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031627612_31627612_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;将上面两个式子中&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage18" imagesize="120" latexexpression=" \mu" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031117100_31117100_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;二项式对应项系数相等，得到下面两个方程：&lt;br  &gt;&lt;img id="latexexpressionimage19" imagesize="120" latexexpression="\frac{1}{\sigma _n^2 }=\frac{n}{\sigma ^2}+\frac{1}{\sigma _0^2 } " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031662924_31662924_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;img id="latexexpressionimage20" imagesize="120" latexexpression=" \frac{\mu _n }{\sigma _n^2 }=\frac{1}{\sigma ^2}\left( {\sum\limits_{k=1}^n  {x_k } } \right)+\frac{\mu _0 }{\sigma _0^2 }=\frac{n\bar {x}}{\sigma  ^2}+\frac{\mu _0 }{\sigma _0^2 } " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031675713_31675713_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;从中很容易反解出我们关心的&lt;img id="latexexpressionimage21" imagesize="120" latexexpression="\mu _n ,\sigma _n^2 " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031702353_31702353_img2.png&amp;accId=766392000000002007"  &gt;：&lt;br  &gt;&lt;img id="latexexpressionimage22" imagesize="120" latexexpression="\mu _n =\frac{n\sigma _0^2 \bar {x}+\sigma ^2\mu _0 }{n\sigma _0^2 +\sigma ^2}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031717100_31717100_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;img id="latexexpressionimage23" imagesize="120" latexexpression=" \sigma _n^2 =\frac{\sigma _0^2 \sigma ^2}{n\sigma _0^2 +\sigma ^2} " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031728602_31728602_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;从中可以得到两点结论：&lt;br  &gt;&lt;br  &gt;1、后验期望&lt;img id="latexexpressionimage24" imagesize="120" latexexpression="\mu _n " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031742222_31742222_img2.png&amp;accId=766392000000002007"  &gt;总可以表示成样本均值&lt;img id="latexexpressionimage25" imagesize="120" latexexpression="\bar {x}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031755277_31755277_img2.png&amp;accId=766392000000002007"  &gt;和先验期望&lt;img id="latexexpressionimage26" imagesize="120" latexexpression="\mu _0 " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031768636_31768636_img2.png&amp;accId=766392000000002007"  &gt;的凸组合；&lt;br  &gt;&lt;br  &gt;2、当观测足够多，即n充分大时，&lt;img id="latexexpressionimage27" imagesize="120" latexexpression="\sigma _n^2 " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031781906_31781906_img2.png&amp;accId=766392000000002007"  &gt;趋向于0，即我们确信&lt;/span&gt;&lt;span style="font-size: 10.5pt; font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage28" imagesize="120" latexexpression=" \mu" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031117100_31117100_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;非常接近其期望&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage29" imagesize="120" latexexpression="\mu _n " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031742222_31742222_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;。而&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage30" imagesize="120" latexexpression="\mu _n " src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031742222_31742222_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;收敛到样本均值&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage31" imagesize="120" latexexpression="\bar {x}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031755277_31755277_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;。&lt;br  &gt;&lt;br  &gt;在&lt;br  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage32" imagesize="120" latexexpression="\mu _n =\frac{n\sigma _0^2 \bar {x}+\sigma ^2\mu _0 }{n\sigma _0^2 +\sigma ^2}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031717100_31717100_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;br  &gt;中取&lt;br  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage33" imagesize="120" latexexpression="\mu _0 =0" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031851721_31851721_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;br  &gt;记&lt;br  &gt;&lt;img id="latexexpressionimage34" imagesize="120" latexexpression="\alpha =\frac{\sigma _n^2 }{\sigma_0^2}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031884715_31884715_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;即得到文献中的Shrink技巧的实用形式：&lt;br  &gt;&lt;img id="latexexpressionimage35" imagesize="120" latexexpression="\mu _n =\frac{n\bar {x}}{n+\alpha }" src="http://writer.zoho.com:80/ImageDisplay.im?name=1242031898012_31898012_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-4365435180409897149?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/4365435180409897149/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=4365435180409897149' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4365435180409897149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4365435180409897149'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/05/principle-of-shrink-method-in.html' title='Principle of Shrink Method in collaborative filtering'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5507630914329334202</id><published>2009-05-03T20:13:00.001+08:00</published><updated>2009-05-03T20:13:51.212+08:00</updated><title type='text'>Implement RBM for netflix CF</title><content type='html'>&lt;h3  &gt;RBM的实现&lt;/h3&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:WordDocument&gt;   &lt;w:View&gt;Normal&lt;/w:View&gt;   &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:PunctuationKerning/&gt;   &lt;w:DrawingGridVerticalSpacing&gt;7.8 磅&lt;/w:DrawingGridVerticalSpacing&gt;   &lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;   &lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;   &lt;w:ValidateAgainstSchemas/&gt;   &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:Compatibility&gt;    &lt;w:SpaceForUL/&gt;    &lt;w:BalanceSingleByteDoubleByteWidth/&gt;    &lt;w:DoNotLeaveBackslashAlone/&gt;    &lt;w:ULTrailSpace/&gt;    &lt;w:DoNotExpandShiftReturn/&gt;    &lt;w:AdjustLineHeightInTable/&gt;    &lt;w:BreakWrappedTables/&gt;    &lt;w:SnapToGridInCell/&gt;    &lt;w:WrapTextWithPunct/&gt;    &lt;w:UseAsianBreakRules/&gt;    &lt;w:DontGrowAutofit/&gt;    &lt;w:UseFELayout/&gt;   &lt;/w:Compatibility&gt;   &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:LatentStyles DefLockedState="false" LatentStyleCount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;  &lt;table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border: medium none ; border-collapse: collapse;"  &gt;  &lt;tbody  &gt;&lt;tr style  &gt;   &lt;td colspan="2" style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 424.7pt;" valign="top" width="566"  &gt;   &lt;p align="center" class="MsoNormal" style="text-align: center; text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;RBM&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;预测器（隐层节点数&lt;/span&gt;&lt;span lang="EN-US"  &gt;F&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;）&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style  &gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 68.4pt;" valign="top" width="91"  &gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;参数&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 356.3pt;" valign="top" width="475"  &gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;权值矩阵&lt;/span&gt;&lt;span lang="EN-US"  &gt;W&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，维数&lt;/span&gt;&lt;span lang="EN-US"  &gt;M&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&amp;times;&lt;/span&gt;&lt;span lang="EN-US"  &gt;K&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&amp;times;&lt;/span&gt;&lt;span lang="EN-US"  &gt;F(K=5)&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;Bias&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;矩阵&lt;/span&gt;&lt;span lang="EN-US"  &gt;b&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，维数&lt;/span&gt;&lt;span lang="EN-US"  &gt;M&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&amp;times;&lt;/span&gt;&lt;span lang="EN-US"  &gt;K&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;原始显层节点向量&lt;/span&gt;&lt;span lang="EN-US"  &gt;v&lt;sub  &gt;0&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，元素取值于&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;/span&gt;&lt;span lang="EN-US"  &gt;K&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，维数不超过&lt;/span&gt;&lt;span lang="EN-US"  &gt;M&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，与当前用户的评分个数相同，重构后的显层节点向量&lt;/span&gt;&lt;span lang="EN-US"  &gt;v&lt;sub  &gt;1&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，与&lt;/span&gt;&lt;span lang="EN-US"  &gt;v&lt;sub  &gt;0&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;维数相同，&lt;/span&gt;&lt;span lang="EN-US"  &gt;m&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;为&lt;/span&gt;&lt;span lang="EN-US"  &gt;v&lt;sub  &gt;0&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;下标集到&lt;/span&gt;&lt;span lang="EN-US"  &gt;M&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;的映射，即&lt;/span&gt;&lt;span lang="EN-US"  &gt;v&lt;sub  &gt;0j&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;表示电影&lt;/span&gt;&lt;span lang="EN-US"  &gt;m&lt;sub  &gt;j&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;的实际评分&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;隐层节点&lt;/span&gt;&lt;span lang="EN-US"  &gt;0-1&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;向量第一次采样&lt;/span&gt;&lt;span lang="EN-US"  &gt;h&lt;sub  &gt;0&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，第二次采样&lt;/span&gt;&lt;span lang="EN-US"  &gt;h&lt;sub  &gt;1&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，维数&lt;/span&gt;&lt;span lang="EN-US"  &gt;F&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;每个用户对应的隐层节点向量的期望&lt;/span&gt;&lt;span lang="EN-US"  &gt;Eh&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，维数&lt;/span&gt;&lt;span lang="EN-US"  &gt;U&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&amp;times;&lt;/span&gt;&lt;span lang="EN-US"  &gt;F&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style  &gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 68.4pt;" valign="top" width="91"  &gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;训练算法&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 356.3pt;" valign="top" width="475"  &gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;1)&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;初始化&lt;/span&gt;&lt;span lang="EN-US"  &gt;W~N(0, 0.001),b&lt;sub  &gt;ik&lt;/sub&gt;=&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;电影&lt;/span&gt;&lt;span lang="EN-US"  &gt;i&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;得&lt;/span&gt;&lt;span lang="EN-US"  &gt;k&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;分的评分次数占电影&lt;/span&gt;&lt;span lang="EN-US"  &gt;i&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;评分次数的比例&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;迭代&lt;/span&gt;&lt;span lang="EN-US"  &gt;2)&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;和&lt;/span&gt;&lt;span lang="EN-US"  &gt;3)&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;直到收敛&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;2)&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;对于每个用户&lt;/span&gt;&lt;span lang="EN-US"  &gt;u&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;：&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;2.a)&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;根据&lt;/span&gt;&lt;span lang="EN-US"  &gt;u&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;的实际评分生成&lt;/span&gt;&lt;span lang="EN-US"  &gt;v&lt;sub  &gt;0&lt;/sub&gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;2.b)h&lt;sub  &gt;0&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;采样&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 5pt"  &gt;&lt;!--[if !vml]--&gt;&lt;!--endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1025"     DrawAspect="Content" ObjectID="_1302884449"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage1" imagesize="120" latexexpression="\forall f &amp;lt; F" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241350413491_50413491_img2.png&amp;accId=766392000000002007"  &gt;，生成随机数&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 5pt"  &gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1027"     DrawAspect="Content" ObjectID="_1302884450"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;p来自U[0,1],若&lt;img id="latexexpressionimage2" imagesize="120" latexexpression="sigmoid\left( \sum_{j&amp;lt;|v_0|}{W \left(m_j,v_{0j},f \right)} \right) &amp;gt;p" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241350611141_50611141_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 9pt"  &gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1033"     DrawAspect="Content" ObjectID="_1302884452"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;br  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;则&lt;/span&gt;&lt;span lang="EN-US"  &gt;h&lt;sub  &gt;0f&lt;/sub&gt;=1&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，否则&lt;/span&gt;&lt;span lang="EN-US"  &gt;h&lt;sub  &gt;0f&lt;/sub&gt; =0&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;2.c)&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;轮盘赌法重构&lt;/span&gt;&lt;span lang="EN-US"  &gt;v&lt;sub  &gt;1&lt;/sub&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;&lt;sub  &gt;&lt;img id="latexexpressionimage3" imagesize="120" latexexpression="\forall j&amp;lt;|v_0|,i \leftarrow m_j" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241350720219_50720219_img2.png&amp;accId=766392000000002007"  &gt;&lt;/sub&gt;&lt;span style="top: 7pt"  &gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1034"     DrawAspect="Content" ObjectID="_1302884453"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;：&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 12pt;"  &gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 7pt"  &gt;&lt;!--[if !vml]--&gt;&lt;img id="latexexpressionimage4" imagesize="120" latexexpression="\forall k=1,...,K: p_k \leftarrow b_{ik}exp \left(\sum_{f&amp;lt;F}{h_fW_{ikf}} \right)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241350801134_50801134_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 13pt;"  &gt;&lt;span style="font-family: 宋体;"  &gt;&lt;br  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-indent: 13pt;"  &gt;&lt;span style="font-family: 宋体;"  &gt;生成随机数&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 5pt"  &gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1027"     DrawAspect="Content" ObjectID="_1302884450"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;p来自U[0,&lt;img id="latexexpressionimage5" imagesize="120" latexexpression="\sum_{k=1}^{K}{p_k}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241350886907_50886907_img2.png&amp;accId=766392000000002007"  &gt;)&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 13pt;"  &gt;&lt;span style="font-family: 宋体;"  &gt;令&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 7pt"  &gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1030"     DrawAspect="Content" ObjectID="_1302884456"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;span style  &gt;&lt;img id="latexexpressionimage6" imagesize="120" latexexpression="v_{1j}=k" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241350912938_50912938_img2.png&amp;accId=766392000000002007"  &gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;其中&lt;/span&gt;&lt;span lang="EN-US"  &gt;k&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;使得&lt;img id="latexexpressionimage7" imagesize="120" latexexpression="\sum_{l=1}^{k-1}{p_l} \leqslant p  &amp;lt; \sum_{l=1}^{k}{p_l} " src="http://writer.zoho.com:80/ImageDisplay.im?name=1241350987962_50987962_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 8pt"  &gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1040"     DrawAspect="Content" ObjectID="_1302884457"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;2.d) h&lt;sub  &gt;1&lt;/sub&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;采样&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage8" imagesize="120" latexexpression="\forall f &amp;lt; F" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241350413491_50413491_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;生成随机数&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 5pt"  &gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1027"     DrawAspect="Content" ObjectID="_1302884450"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;p来自U[0,1],若&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;img id="latexexpressionimage9" imagesize="120" latexexpression="sigmoid\left( \sum_{j&amp;lt;|v_1|}{W \left(m_j,v_{1j},f \right)} \right) &amp;gt;p" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241351030035_51030035_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;&lt;br  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;则&lt;/span&gt;&lt;span lang="EN-US"  &gt;h&lt;sub  &gt;1f&lt;/sub&gt;=1&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;，否则&lt;/span&gt;&lt;span lang="EN-US"  &gt;h&lt;sub  &gt;1f&lt;/sub&gt; =0&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;2.e)&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;更新&lt;/span&gt;&lt;span lang="EN-US"  &gt;W&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;&lt;sub  &gt;&lt;img id="latexexpressionimage10" imagesize="120" latexexpression="\forall j&amp;lt;|v_0|, \forall f&amp;lt;F" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241351061714_51061714_img2.png&amp;accId=766392000000002007"  &gt;&lt;/sub&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;&lt;span style  &gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;若&lt;/span&gt;&lt;span lang="EN-US"  &gt;h&lt;sub  &gt;0f&lt;/sub&gt;=1&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;则&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 7pt"  &gt;&lt;!--[if !vml]--&gt;&lt;img id="latexexpressionimage11" imagesize="120" latexexpression="W \left(m_j,v_{0j},f \right)+= \gamma _t" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241351116749_51116749_img2.png&amp;accId=766392000000002007"  &gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1038"     DrawAspect="Content" ObjectID="_1302884462"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;&lt;span style  &gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;若&lt;/span&gt;&lt;span lang="EN-US"  &gt;h&lt;sub  &gt;1f&lt;/sub&gt;=1&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;则&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 7pt"  &gt;&lt;img id="latexexpressionimage12" imagesize="120" latexexpression="W \left(m_j,v_{1j},f \right)-= \gamma _t" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241351199141_51199141_img2.png&amp;accId=766392000000002007"  &gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;3)&lt;/span&gt;&lt;span style="font-family: 宋体;"  &gt;计算&lt;/span&gt;&lt;span lang="EN-US"  &gt;Eh&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;&lt;img id="latexexpressionimage13" imagesize="120" latexexpression="\forall u \in U, \forall f &amp;lt; F: Eh_{uf} \leftarrow sigmoid \left(\sum_{i \in S_u}{W \left(i,r_{ui}, f \right)} \right)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241351364079_51364079_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;span style="top: 9pt"  &gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;&lt;span style="top: 9pt"  &gt;&lt;br  &gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;    &lt;o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1037"     DrawAspect="Content" ObjectID="_1302884464"&gt;    &lt;/o:OLEObject&gt;   &lt;/xml&gt;&lt;![endif]--&gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style  &gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0cm 5.4pt; width: 68.4pt;" valign="top" width="91"  &gt;   &lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span style="font-family: 宋体;"  &gt;预测函数&lt;/span&gt;&lt;span lang="EN-US"  &gt;&lt;O:P  &gt;&lt;/O:P&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0cm 5.4pt; width: 356.3pt;" valign="top" width="475"  &gt;   &lt;br  &gt;&lt;img id="latexexpressionimage14" imagesize="120" latexexpression="\hat{r}_{ui}=\frac{\sum_{k=1}^{K}{kb_{ik}exp \left(\sum_{f&amp;lt;F}{Eh_{uf}W_{ikf} } \right)}}{\sum_{k=1}^{K}{b_{ik}exp \left(\sum_{f&amp;lt;F}{Eh_{uf}W_{ikf} } \right)}}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241351507037_51507037_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;br  &gt;&lt;br  &gt;&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;h3  &gt;实验结果&lt;/h3&gt;F=16,lrate=0.002&lt;br  &gt;[1]1.0528 0.0508 1 &lt;br  &gt;[2]0.9617 -0.0018 135 0.0911&lt;br  &gt;[3]0.9516 0.0024 273 0.0101&lt;br  &gt;[4]0.9476 0.0007 411 0.0041&lt;br  &gt;[5]0.9454 0.0008 550 0.0022&lt;br  &gt;[6]0.9440 0.0011 689 0.0014&lt;br  &gt;[7]0.9434 -0.0007 828 0.0006&lt;br  &gt;...&lt;br  &gt;[20]0.9404 -0.0003 2636 0.0002&lt;br  &gt;...&lt;br  &gt;[30]0.9400 -0.0024 4029 0.0001&lt;br  &gt;...&lt;br  &gt;&lt;br  &gt;各列含义：[迭代步数]RMSE(on ProbeSet) 平均偏差(on ProbeSet) 逝去时间(秒) RMSE改进量&lt;br  &gt;发现前几步RMSE下降非常快。&lt;br  &gt;注：使用Weight Decay可以略微改进结果&lt;br  &gt;将2.e)改成&lt;br  &gt;&lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&lt;span lang="EN-US"  &gt;&lt;sub  &gt;&lt;img id="latexexpressionimage15" imagesize="120" latexexpression="\forall j&amp;lt;|v_0|, \forall f&amp;lt;F:" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241352435128_52435128_img2.png&amp;accId=766392000000002007"  &gt;&lt;/sub&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&amp;nbsp; &lt;img id="latexexpressionimage16" imagesize="120" latexexpression="W\left(m_j,v_{0j},f \right)+= \gamma _t\left(h_{0f}- \lambda W\left(m_j,v_{0j}f \right)\right)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241352392764_52392764_img2.png&amp;accId=766392000000002007"  &gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-indent: 0cm;"  &gt;&amp;nbsp; &lt;img id="latexexpressionimage17" imagesize="120" latexexpression="W\left(m_j,v_{1j}f \right)-= \gamma_t \left(h_{1f}+ \lambda W\left(m_j,v_{1j}f \right)\right)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1241352462800_52462800_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;span lang="EN-US"  &gt;&lt;/span&gt;&lt;/p&gt;实验结果&lt;br  &gt;F=16,lrate=0.002,decay=0.0001&lt;br  &gt;...&lt;br  &gt;[20]0.9393 -0.0011 2719 0.0005&lt;br  &gt;...&lt;br  &gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5507630914329334202?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5507630914329334202/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5507630914329334202' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5507630914329334202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5507630914329334202'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/05/implement-rbm-for-netflix-cf.html' title='Implement RBM for netflix CF'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-652214413920635107</id><published>2009-04-16T10:50:00.001+08:00</published><updated>2009-04-16T10:50:54.859+08:00</updated><title type='text'>The Stable Marriage Problem</title><content type='html'>稳定婚姻问题&lt;br&gt;&lt;br&gt;这是从社会生活中&lt;b&gt;过分简化&lt;/b&gt;、抽象出来的一个&lt;b&gt;组合数学问题&lt;/b&gt;。参考：&lt;br&gt;&lt;a href="http://www.cs.columbia.edu/~evs/intro/stable/writeup.html"&gt;http://www.cs.columbia.edu/~evs/intro/stable/writeup.html&lt;/a&gt;&lt;br&gt; &lt;a href="http://zh.wikipedia.org/wiki/%E7%A8%B3%E5%AE%9A%E5%A9%9A%E5%A7%BB%E9%97%AE%E9%A2%98"&gt;http://zh.wikipedia.org/wiki/稳定婚姻问题&lt;/a&gt;&lt;br&gt;&lt;br&gt;严格描述如下：&lt;br&gt;定义：&lt;br&gt;&lt;ul&gt;&lt;li&gt;考虑n个男人，用大写字母表示(X,Y,Z...)、n个女人，用小写字母表示(x,y,z...)&lt;/li&gt;&lt;li&gt; 每个人有一个异性的&lt;b&gt;偏好&lt;/b&gt;列表，例如X(x&amp;gt;y&amp;gt;z...)表示X喜欢x胜过喜欢y，喜欢y胜过喜欢z...（静态严格全序，即不存在相等或不可比较的情况，可传递，且不随时间改变）&lt;/li&gt;&lt;li&gt;一个婚姻表示为一个序对，例如Xx表示X与x结婚&lt;/li&gt;&lt;li&gt;一个婚姻组合为所有男人到所有女人的一一对应，表示为n个婚姻，恰好没有人单身&lt;/li&gt;&lt;li&gt;称一对男女(X, y)是&lt;b&gt;不满&lt;/b&gt;的，若存在Y、x使得Xx、Yy、X(y&amp;gt;x)、y(X&amp;gt;Y)成立，也就是说，X和x结婚，Y和y结婚，但是X和y喜欢彼此胜过喜欢他们现有的配偶，所以X和y不满于现在的婚姻，存在重新组合的不稳定因素&lt;/li&gt; &lt;li&gt;称一个婚姻组合是&lt;b&gt;稳定&lt;/b&gt;的，若其中不包含不满的男女对&lt;/li&gt;&lt;li&gt;一个稳定婚姻问题是指：给定n男n女和他们的偏好列表，问是否存在一个稳定的婚姻组合&lt;/li&gt;&lt;/ul&gt;定理：&lt;br&gt;&lt;ul&gt;&lt;li&gt;任何一个稳定婚姻问题的实例，都是"是"实例。进一步地，存在一个多项式时间算法，求出稳定婚姻问题的解。&lt;/li&gt;&lt;/ul&gt;算法（被称作&lt;b&gt;求婚算法&lt;/b&gt;）：&lt;br&gt;初始时所有男人和女人设为单身&lt;br&gt;每一步&lt;br&gt;&lt;div style="margin-left: 40px;"&gt; 任选一个当前单身的男人X&lt;br&gt;X向其列表中尚未标记为&amp;quot;拒绝"的、最喜欢的女人x求婚（其存在性在命题0中证明）&lt;br&gt;如果x单身，则Xx结婚，X从单身男人集合中移除&lt;br&gt;否则（存在Y，使得已经有Yx）如果x(X&amp;gt;Y)，则Xx，Y放回单身男人集合并从Y的列表中标记x为&amp;quot;拒绝&amp;quot;&lt;br&gt;否则X留在单身男人集合中并从X的列表中标记x为"拒绝"&lt;br&gt;&lt;/div&gt;直到单身男人集合为空集（可终止性在命题1中证明）&lt;br&gt; &lt;br&gt;命题0：上述算法&lt;b&gt;每一步的男人X，都能找到可以求婚的x&lt;/b&gt;&lt;br&gt;证明：反证法，假设不然，也就是说这时候X的列表中所有女人都已经拒绝X了。注意到按照算法的构造，只有结过婚的女人才能拒绝男人，而且结过婚的女人只能改嫁不能返回单身，因此这时候所有女人都非单身，从而所有男人都已经结婚了，这与X还单身矛盾。假设不成立，原命题得证。&lt;br&gt;&lt;br&gt;命题1：上述算法&lt;b&gt;至多n+n^2步终止&lt;/b&gt;&lt;br&gt;证明：每一步要么有一个女人第一次结婚，要么有一个男人被拒绝，注意到n个男人的列表总长度为n^n，因此算法至多n+n^2步终止&lt;br&gt; &lt;br&gt;命题2：算法的正确性：上述算法&lt;b&gt;终止时，得到一个稳定的婚姻组合&lt;/b&gt;&lt;br&gt;证明：反证法，假设不然，算法终止时存在(X,y)不满，即Xx、Yy、X(y&amp;gt;x)、y(X&amp;gt;Y)&lt;br&gt;由于X(y&amp;gt;x)，因此X向y求婚，发生在X向x求婚之前，而最终Xx，说明存在一个时刻，y拒绝或抛弃了X&lt;br&gt;若当时y拒绝了X，说明y的配偶Z在y心中比X好，即y(Z&amp;gt;X)，而最终Yy，说明要么Y就是Z，要么y(Y&amp;gt;Z)，从而都有y(Y&amp;gt;X)，与假设y(X&amp;gt;Y)矛盾&lt;br&gt; 若当时y抛弃了X，说明那时候有一个Z向y求婚，而且y(Z&amp;gt;X)，而最终Yy，说明要么Y就是Z，要么y(Y&amp;gt;Z)，从而都有y(Y&amp;gt;X)，与假设y(X&amp;gt;Y)矛盾&lt;br&gt;得证。&lt;br&gt;&lt;br&gt;应用：&lt;br&gt;这个算法北应用到大学联合招生、&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-652214413920635107?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/652214413920635107/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=652214413920635107' title='2 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/652214413920635107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/652214413920635107'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/04/stable-marriage-problem.html' title='The Stable Marriage Problem'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-718884788545494456</id><published>2009-04-03T15:08:00.001+08:00</published><updated>2009-04-03T15:08:24.666+08:00</updated><title type='text'>Technical Details in RBM for CF</title><content type='html'>Technical Details in RBM for CF&lt;br  &gt;受限玻尔兹曼机的技术细节&lt;br  &gt;&lt;br  &gt;参考&lt;br  &gt;[1]&lt;a href="http://www.netflixprize.com/community/viewtopic.php?id=1007" target="_blank" title="http://www.netflixprize.com/community/viewtopic.php?id=1007"  &gt;http://www.netflixprize.com/community/viewtopic.php?id=1007&lt;/a&gt;&lt;br  &gt;[2]&lt;a href="http://todwang.blogspot.com/2009/03/understanding-rbm-for-cf.html" target="_blank" title="http://todwang.blogspot.com/2009/03/understanding-rbm-for-cf.html"  &gt;http://todwang.blogspot.com/2009/03/understanding-rbm-for-cf.html&lt;/a&gt;&lt;br  &gt;[3]&lt;a href="http://www.iro.umontreal.ca/%7Elisa/twiki/bin/view.cgi/Public/DBNPseudoCode" target="_blank" title="http://www.iro.umontreal.ca/~lisa/twiki/bin/view.cgi/Public/DBNPseudoCode"  &gt;http://www.iro.umontreal.ca/~lisa/twiki/bin/view.cgi/Public/DBNPseudoCode&lt;/a&gt;&lt;br  &gt;[4]&lt;a href="http://imonad.com/blog/2008/10/restricted-boltzmann-machine/" target="_blank" title="http://imonad.com/blog/2008/10/restricted-boltzmann-machine/"  &gt;http://imonad.com/blog/2008/10/restricted-boltzmann-machine/&lt;/a&gt;&lt;br  &gt;[5]&lt;a href="http://www.ics.uci.edu/%7Ewelling/teaching/ICS273AFall06/NeuralNets273AFall06.ppt" target="_blank" title="http://www.ics.uci.edu/~welling/teaching/ICS273AFall06/NeuralNets273AFall06.ppt"  &gt;http://www.ics.uci.edu/~welling/teaching/ICS273AFall06/NeuralNets273AFall06.&lt;/a&gt;&lt;wbr  &gt;&lt;/wbr&gt;&lt;a href="http://www.ics.uci.edu/%7Ewelling/teaching/ICS273AFall06/NeuralNets273AFall06.ppt"  &gt;ppt&lt;/a&gt;&lt;h3  &gt;Gibbs一步采样&lt;/h3&gt;在[2]中，我提到训练中要计算&amp;lt;v&lt;sub  &gt;ik&lt;/sub&gt;h&lt;sub  &gt;f&lt;/sub&gt;&amp;gt;&lt;sub  &gt;data&lt;/sub&gt;和&amp;lt;v&lt;sub  &gt;ik&lt;/sub&gt;h&lt;sub  &gt;f&lt;/sub&gt;&amp;gt;&lt;sub  &gt;T&lt;/sub&gt;，而按照[1]中的讨论，T通常取1，因为实践中发现T取大了也得不到更精确的解。因此，我们下面的讨论都是Gibbs一步采样。&lt;br  &gt;这一步如何采，也有两种方式。[3]中&amp;lt;v&lt;sub  &gt;ik&lt;/sub&gt;h&lt;sub  &gt;f&lt;/sub&gt;&amp;gt;&lt;sub  &gt;1&lt;/sub&gt;项中的hf使用了它的期望而不是采样值，而标准的Gibbs采样步骤这步也应该采样。[1]中的讨论中说，[3]的做法精度更好。而我实验发现，这两种方法效果差不多。[3]的具体做法在下一节中一起详细说明。&lt;br  &gt;&lt;h3  &gt;在线训练&lt;/h3&gt;Hinton那篇开创RBM for CF的文章中，用了Batch update weights的方法，也就是我[2]中解释的那样。而[1]讨论中发现，per-case-update（在线训练）也取得很好的效果。具体来说：&lt;br  &gt;1、设trainning case v是一个M&amp;times;K的0-1阵，表示一个用户的所有评分行为，vik=1表示该用户给电影i评分为k。&lt;br  &gt;2、按照[2]中假设2采样得到隐层的F维0-1向量h，表示用户的特征。&lt;br  &gt;3、按照[2]中假设1采样得到显层的M&amp;times;K的0-1阵，记作v2，表示重构后的用户评分行为。&lt;br  &gt;4、再按照[2]中假设2计算h的期望Eh，也是F维的向量，元素值取于区间[0,1]。&lt;br  &gt;5、针对这一个trainning case v就可以更新W了：&lt;br  &gt;W[i][k][f]+=LRATE * (v[i][k]*h[f]-v2[i][k]*Eh[f]),foreach i,k,f&lt;br  &gt;&lt;h3  &gt;利用稀疏性&lt;/h3&gt;在我的程序中，v使用了一种相对紧凑的数据结构，注意到v的列和总为1（如果此列不缺失的话）。&lt;br  &gt;ur是一个二元组(mid, rate)的列表，长度和v的非缺失列个数sz相同，rate取值于K，它和v等价：v[ur[j].mid][ur[j].rate]=1恒成立，且v[i][k]=1当且仅当存在j&amp;lt;sz使得ur[j].mid=i,ur[j].rate=k。对应v2为结构ur2。&lt;br  &gt;用这个结构改善上述第5步：&lt;br  &gt;for j in sz&lt;br  &gt;&amp;nbsp; note u as ur[j], u2 as ur2[j]&lt;br  &gt;&amp;nbsp; foreach f&lt;br  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; W[u.mid][u.rate][f] += LRATE * h[f];&lt;br  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; W[u2.mid][u2.rate][f]-= LRATE * Eh[f];&lt;br  &gt;这样一来，这一步的复杂度从MKF降到sz&amp;times;F&amp;lt;&amp;lt;M&amp;times;F了。&lt;br  &gt;&lt;h3  &gt;Bias设置与训练&lt;/h3&gt;[1]中讨论说hidden unit bias都设为零，也就是[2]中d&lt;sub  &gt;f&lt;/sub&gt;设为0，visibel unit bias固定为先验概率分布的对数：b&lt;sub  &gt;ik&lt;/sub&gt;=log(给电影i评k分的用户个数/给电影i有评分的用户数)。b&lt;sub  &gt;ik&lt;/sub&gt;也可以一起在线训练：&lt;br  &gt;bik+=&amp;lt;vik&amp;gt;data-&amp;lt;vik&amp;gt;T&lt;br  &gt;利用稀疏性表示为：&lt;br  &gt;for j in sz&lt;br  &gt; &amp;nbsp; note u as ur[j], u2 as ur2[j]&lt;br  &gt;&amp;nbsp; b[u.mid][u.rate]+=LRATE&lt;br  &gt; &amp;nbsp; b[u2.mid][u2.rate]-=LRATE&lt;br  &gt;我实践发现，visibel unit bias固定或训练效果差不多。&lt;br  &gt;&lt;h3  &gt;Weight Decay和Momentum&lt;/h3&gt;这是常见的梯度下降技巧，[5]中有详细的解释。&lt;br  &gt;Weight Decay可以理解为一个弹簧，把每个weight拉回0点，防止权变太大：&lt;br  &gt;&lt;img id="latexexpressionimage1" imagesize="120" latexexpression="compute \Delta W \\ \Delta W=\Delta W -  \lambda W \\ W = W+\Delta W" src="http://writer.zoho.com:80/ImageDisplay.im?name=1238740731501_40731501_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;其中lambda是充分小的正数。&lt;br  &gt;W[u.mid][u.rate][f] += LRATE * (h[f]-WEIGHTDECAY*W[u.mid][u.rate][f]);&lt;br  &gt;Momentum是动量项，用于加速梯度下降，有点自适应步长的意思。&lt;br  &gt;&lt;img id="latexexpressionimage2" imagesize="120" latexexpression="compute \Delta_{new} W \\ \Delta W=\Delta_{new} W + \gamma \Delta_{old} W \\ W = W+\Delta W \\ \Delta_{old} W = \Delta W" src="http://writer.zoho.com:80/ImageDisplay.im?name=1238740953041_40953041_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;其中&amp;gamma;为小于1的正数。&lt;br  &gt;相当于这一步计算的权变化量不仅对这一步迭代有贡献，而且对以后都有贡献，不过贡献随着迭代的次数指数衰减罢了。&lt;br  &gt;注意到，这两个技巧主要是针对Batch update weights的，用到在线训练中的效果不好估计。&lt;br  &gt;&lt;h3  &gt;退火&lt;/h3&gt;这也可以用在所有迭代学习算法中，主要随着收敛步长减小的格式。[1]中给出了一个反比例函数的降温格式。&lt;br  &gt;lrate = LRATE/(1 + iter / (3 * U));&lt;br  &gt;其中LRATE是初始步长，iter是用过的trainning case的个数。可见，迭代30轮（pass），步长就已经下降一个数量级了。&lt;br  &gt;&lt;h3  &gt;连续受限玻尔兹曼机&lt;/h3&gt;参考[4]，注意到评分1,...,5原本是全序的，而不是K个无序的label，而发明RBM的初衷是用于模式分类，最后输出是一个离散label。因此引入连续受限玻尔兹曼机，是自然的。也就是显层向量v不是0-1的，而是连续取值的。这就要求更新[2]中的假设了，需要模型建立者重新假设条件概率分布，也就是重新定义整个贝叶斯网络。[4]引用的那篇&lt;a href="http://www.ee.nthu.edu.tw/%7Ehchen/pubs/iee2003.pdf"  &gt;Continuous RBM&lt;/a&gt;很有意思，用扩散网络建模，求解时用了随机微分方程。以后可以考虑做做这个方向。&lt;br  &gt;&lt;h3  &gt;结果&lt;/h3&gt;可能由于是随机算法，发现rmse随着迭代进行的下降过程有抖动，而不是严格单调的。&lt;br  &gt;目前做到了probe rmse 0.9438 ：迭代46步，其算法参数：&lt;br  &gt;100个hidden unit，在线训练、固定bias、没有退火，lrate=0.001，WEIGHTDECAY=0.0001，没有用动量项。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-718884788545494456?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/718884788545494456/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=718884788545494456' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/718884788545494456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/718884788545494456'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/04/technical-details-in-rbm-for-cf.html' title='Technical Details in RBM for CF'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6336000953863881959</id><published>2009-03-26T17:30:00.001+08:00</published><updated>2009-03-26T17:30:22.169+08:00</updated><title type='text'>Understanding RBM for CF</title><content type='html'>Understanding RBM for CF&lt;br  &gt;&lt;br  &gt;理解协同过滤中的受限玻尔兹曼机&lt;br  &gt;&lt;h1  &gt;引论&lt;/h1&gt;协同过滤（Collaborative Filtering，简称CF）推荐系统中，古典的模型有近邻模型、隐性因子模型等。从2007年开始，受限玻尔兹曼机模型在协同过滤中开始流行起来。&lt;br  &gt;参考文献&lt;br  &gt;[1]&lt;a href="http://www.machinelearning.org/proceedings/icml2007/papers/407.pdf" target="_blank" title="Restricted Boltzmann Machines for Collaborative Filtering"  &gt;Restricted Boltzmann Machines for Collaborative Filtering&lt;/a&gt;&lt;br  &gt;[2]&lt;a href="http://www.cs.toronto.edu/%7Ehinton/absps/cdmiguel.pdf" target="_blank" title="On Contrastive Divergence Learning"  &gt;On Contrastive Divergence Learning&lt;/a&gt;&lt;br  &gt;[3]&lt;a href="http://www.stat.columbia.edu/%7Eliam/teaching/neurostat-spr07/papers/mcmc/mcmc-gibbs-intro.pdf" target="_blank" title="Markov Chain Monte Carlo and Gibbs Sampling"  &gt;Markov Chain Monte Carlo and Gibbs Sampling&lt;/a&gt;&lt;br  &gt;受限玻尔兹曼机（Restricted Boltzmann Machines，简称RBM）是一种借鉴了模拟退火思想的人工神经网络模型，它在计算过程中又借鉴了蒙特卡洛马尔科夫链(MCMC)的思想。这篇Blog是[1]的阅读笔记，为了理解训练的算法，延伸阅读了[2]和[3]。&lt;br  &gt;&lt;br  &gt;&lt;h1  &gt;问题描述&lt;/h1&gt;在线系统中，有很多用户(User)给电影(Movie)评分的数据，协同过滤推荐系统利用这些数据，估计给定User对给定Movie的评分。评分值域为{1,...,K}，用户集合记作U={0,...,U-1}，电影集合记作M={0,...,M-1}，已知评分用有缺失值的矩阵R表示，&lt;img id="latexexpressionimage1" imagesize="120" latexexpression="R=(r_{ui}),u \in U, i \in M" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237967508956_67508956_img2.png&amp;accId=766392000000002007"  &gt;，推荐系统使用某种协同过滤算法评分器估计(u,i)点处的评分记作&lt;img id="latexexpressionimage2" imagesize="120" latexexpression="\hat{r}_{ui}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237967676303_67676303_img2.png&amp;accId=766392000000002007"  &gt;，我们希望在给定测试集Q上均方根误差&lt;img id="latexexpressionimage3" imagesize="120" latexexpression="RMSE=\sum_{(u,i)\in Q}{(r_{ui}-\hat{r}_{ui})^2}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237967878399_67878399_img2.png&amp;accId=766392000000002007"  &gt;尽量小。&lt;br  &gt;&lt;h1  &gt;模型框架&lt;/h1&gt;存在这样一个对称网络可以表示用户给电影评分的机制，它包括显层和隐层两层节点。&lt;br  &gt;显层共M&amp;times;K个节点，对应M个电影和K个可能评分的卡氏积。每个u&amp;isin;U的实际评分对应一组显层状态（Visible），一组显层状态用M&amp;times;K的、允许缺失行的、0-1矩阵V表示，它刻画了u的实际行为。V=(v&lt;sub  &gt;ik&lt;/sub&gt;)，若V的第i行数据缺失，则表示u没有给i评分，否则V的第i行总恰有一个非零元，v&lt;sub  &gt;ik&lt;/sub&gt;=1表示u给i评分为k。&lt;br  &gt;隐层共F个节点，对应F个隐藏的因素（Factor）。隐层表示为F维0-1向量h，非零元代表u具备的因素，它描述了u行为的原因。&lt;br  &gt;任一显层节点(i,k)和任一隐层节点f之间用无向弧相连，弧的权值记作&lt;img id="latexexpressionimage4" imagesize="120" latexexpression="W_{ik}^f" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237969475961_69475961_img2.png&amp;accId=766392000000002007"  &gt;，表示两个节点联系的程度。权值矩阵W为M行K列F层的三维矩阵&lt;sub  &gt;&lt;/sub&gt;。不同的u，对应不同的V和h，但是他们共用一个W。根据显层状态分布假设P(V|h)，用隐层状态h和权值W决定显层状态的过程，是预测的过程。利用显层状态V反推权值W和隐层状态的过程，是训练的过程。作为Hopfiled网络，学习过程是以下两个步骤的交替：&lt;br  &gt;1、激活：固定W，根据隐层状态分布假设P(h|V)，计算h的分布&lt;br  &gt;2、反向传播误差修正W：固定h，极大化似然函数P(V)，计算它关于W各分量的偏导数，沿负梯度方向改变一充分小步长来修正W。&lt;br  &gt;&lt;h1  &gt;模型假设&lt;/h1&gt;固定一个u，&lt;br  &gt;&lt;span style="font-weight: bold;"  &gt;1、显层状态的条件概率分布：&lt;/span&gt;&lt;br  &gt;&lt;img id="latexexpressionimage5" imagesize="120" latexexpression="P(v_{ik}=1|h)=\frac{a_{ik}}{\sum_{l\in K}{a_{il}}}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237982851268_82851268_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;其中&lt;br  &gt;&lt;img id="latexexpressionimage6" imagesize="120" latexexpression="a_{ik}=exp(b_{ik}+h\cdot W_{ik})=exp(b_{ik}+\sum_{f\in F}{h_{f}W_{ik}^{f}})" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237982896533_82896533_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;这里a&lt;sub  &gt;ik&lt;/sub&gt;表示u给电影i的评k分的激发程度，它关于h和W&lt;sub  &gt;ik&lt;/sub&gt;的向量内积成指数增加，也就是说，i具备u评k分的因素越多，被u评k分的可能性越大，而且这种正相关的影响呈指数增加。b&lt;sub  &gt;ik&lt;/sub&gt;为电影i的得k分的内在因素，与u无关。&lt;br  &gt;&lt;span style="font-weight: bold;"  &gt;2、隐层状态的条件概率分布：&lt;/span&gt;&lt;br  &gt;&lt;img id="latexexpressionimage7" imagesize="120" latexexpression="P(h_f=1|V)=sigmoid(d_f+V \cdot W^f)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237984443454_84443454_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;其中W&lt;sup  &gt;f&lt;/sup&gt;为W的第f层，&lt;br  &gt;&lt;img id="latexexpressionimage8" imagesize="120" latexexpression="V\cdot W^f=\sum_{i\in M}{\sum_{k\in K}{v_{ik}W_{ik}^f}}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237982809292_82809292_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;d&lt;sub  &gt;f&lt;/sub&gt;为因素f被观测数据影响的因子，它只与因素f自身有关，与u和i无关，&lt;br  &gt;sigmoid(x)=1/(1+e&lt;sup  &gt;-x&lt;/sup&gt;)&lt;br  &gt;注意到，h&lt;sub  &gt;f&lt;/sub&gt;=1的条件概率，数值上就是h&lt;sub  &gt;f&lt;/sub&gt;的条件期望。&lt;br  &gt; &lt;span style="font-weight: bold;"  &gt;3、似然函数&lt;/span&gt;&lt;br  &gt;&lt;img id="latexexpressionimage9" imagesize="120" latexexpression="P(V)=c\cdot exp(-E(V,h))" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237983528979_83528979_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;其中c为归一化因子，E(V,h)为能量函数&lt;br  &gt;&lt;img id="latexexpressionimage10" imagesize="120" latexexpression="E(V,h)=-V\cdot W\cdot h+\sum_{i\in M}{log Z_i} -Vb-hd=-\sum_{i\in M,f\in F,k\in K}{v_{ik}W_{ik}^f h_f}+\sum_{i\in M}{log \sum_{k\in K}{a_{ik}}} -\sum_{i\in M,k\in K}{v_{ik}b_{ik}}-\sum_{f\in F}{h_j d_j}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237984606477_84606477_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;疑问：&lt;br  &gt; 这个假设如何从前两个假设推出来？&lt;br  &gt;&lt;h1  &gt;训练&lt;/h1&gt;计算似然函数偏导数&lt;br  &gt;&lt;img id="latexexpressionimage11" imagesize="120" latexexpression="\frac{\partial logP(V)}{\partial W_{ik}^f}=&amp;lt;v_{ik}h_f&amp;gt;_{data}-&amp;lt;v_{ik}h_f&amp;gt;_{model}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237986009963_86009963_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;其中&lt;br  &gt;&lt;img id="latexexpressionimage12" imagesize="120" latexexpression="&amp;lt;v_{ik}h_f&amp;gt;_{data}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237986433151_86433151_img2.png&amp;accId=766392000000002007"  &gt;为训练过程遍历所有u&amp;isin;U时，v&lt;sub  &gt;ik&lt;/sub&gt;h&lt;sub  &gt;f&lt;/sub&gt;非零的频率，具体来说&lt;img id="latexexpressionimage13" imagesize="120" latexexpression="&amp;lt;v_{ik}h_f&amp;gt;_{data}=\frac{1}{|U|}\sum_{u\in U}{v_{ik}(u)h_f(u)}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1238057684676_57684676_img2.png&amp;accId=766392000000002007"  &gt;，其中h(u)根据假设2采样得到；&lt;br  &gt;&lt;img id="latexexpressionimage14" imagesize="120" latexexpression="&amp;lt;v_{ik}h_f&amp;gt;_{model}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237987216225_87216225_img2.png&amp;accId=766392000000002007"  &gt;是v&lt;sub  &gt;ik&lt;/sub&gt;h&lt;sub  &gt;f&lt;/sub&gt;非零的频数的数学期望，它的值由模型假定的分布决定，但计算复杂度太高，按照[2]介绍的Contrastive Divergence方法用&lt;img id="latexexpressionimage15" imagesize="120" latexexpression="&amp;lt;v_{ik}h_f&amp;gt;_{T}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237987235652_87235652_img2.png&amp;accId=766392000000002007"  &gt;近似；&lt;br  &gt;&lt;img id="latexexpressionimage16" imagesize="120" latexexpression="&amp;lt;v_{ik}h_f&amp;gt;_{T}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1237987235652_87235652_img2.png&amp;accId=766392000000002007"  &gt;通过Gibbs采样[3]迭代T次得到，T初始为1，随着训练T的值不断增加，[1]中说T太大也没必要。Gibbs采样是一种蒙特卡洛方法，意思有点像&amp;ldquo;左右互搏&amp;rdquo;，在这个问题中，就是先固定V0=V，根据假设2采样得到h1,然后根据假设1采样得到V1，这叫迭代了一步，迭代T步求平均，就可以近似它的期望了。具体来说&lt;img id="latexexpressionimage17" imagesize="120" latexexpression="&amp;lt;v_{ik}h_f&amp;gt;_{T}=\frac{1}{|U|T}\sum_{t\in T,u\in U}{v_{ik}(u,t)h_f(u,t)}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1238057609967_57609967_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;有了似然函数个方向偏导数，就可以&amp;ldquo;爬山&amp;rdquo;啦~&lt;br  &gt;&lt;img id="latexexpressionimage18" imagesize="120" latexexpression="W_{ik}^{f} \longleftarrow W_{ik}^{f}+lrate \frac{\partial logP(V)}{\partial W_{ik}^f},i\in M,k\in K,f\in F" src="http://writer.zoho.com:80/ImageDisplay.im?name=1238057993460_57993460_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;lrate为学习率，或者叫步长。&lt;br  &gt;&lt;h1  &gt;预测&lt;/h1&gt;训练好了权值矩阵后，就可以用它来预测(u,i)&amp;isin;U&amp;times;M了。给定u，先根据假设2算出h的条件期望，然后用它来代替假设1中的h，算出v&lt;sub  &gt;i1&lt;/sub&gt;,...,v&lt;sub  &gt;iK&lt;/sub&gt;的分布，然后计算r&lt;sub  &gt;ui&lt;/sub&gt;期望作为预测值。具体来说：&lt;br  &gt;step1&lt;br  &gt;&lt;img id="latexexpressionimage19" imagesize="120" latexexpression="\hat{p}_f \leftarrow E(h_f|V)=P(h_f=1|V),f\in F" src="http://writer.zoho.com:80/ImageDisplay.im?name=1238059446282_59446282_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;step2&lt;br  &gt;&lt;img id="latexexpressionimage20" imagesize="120" latexexpression="P(r_{ui}=k|\hat{p})=P(v_{ik}=1|\hat{p})=\frac{exp(b_{ik}+\sum_{f\in F}{\hat{p}_f W_{ik}^f})}{\sum_{l\in K}{exp(b_{il}+\sum_{f\in F}{\hat{p}_f W_{il}^f})}},k\in K" src="http://writer.zoho.com:80/ImageDisplay.im?name=1238059468812_59468812_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;step3&lt;br  &gt;&lt;img id="latexexpressionimage21" imagesize="120" latexexpression="\hat{r}_{ui}  \leftarrow E(r_{ui}|\hat{p})=\sum_{k\in K}{k\cdot P(r_{ui}=k|\hat{p})}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1238059428843_59428843_img2.png&amp;accId=766392000000002007"  &gt;&lt;br  &gt;&lt;br  &gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6336000953863881959?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6336000953863881959/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6336000953863881959' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6336000953863881959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6336000953863881959'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/03/understanding-rbm-for-cf.html' title='Understanding RBM for CF'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-3960115668103735527</id><published>2009-03-19T23:06:00.001+08:00</published><updated>2009-03-19T23:06:38.705+08:00</updated><title type='text'>Netflix数据集的一些统计特征(2)</title><content type='html'>很多网站的流量在一周之内变化的趋势类似，那就是工作日流量多，周末流量少。Netflix数据集也如此。无论是训练集还是测试集，评分日期的一周分布中，周六周日两天加起来不到20%，而周一周二尤其多，加起来超过了35%，说明人们上班的时候很闲可以上网，或者晚上喜欢放松看看电影，而周末则外出休闲去鸟。&lt;br&gt;&lt;br&gt;另一个发现，是训练集和测试集的某些边缘分布很不同（测试集包括probe set和quiz set，分布相同）。&lt;br&gt;1、训练集的用户分布不均匀，少数用户非常活跃，10%最活跃的用户评分点占了所有测试集评分点的43.6%，而测试集的用户分布是均匀的，几乎所有用户被测试的概率相同，除了极少数最不活跃的用户。说明Netflix对所有用户一视同仁，不活跃的用户被认为与活跃的用户有相同的消费的能力。&lt;br&gt; 2、测试集比训练集的时间更集中于离现在较近的时刻，测试集中最后一周的评分点占了20.4%，而训练集中最后一周的评分点仅占了1.5%。说明要求模型有一定预测的能力，尤其是预测当下用户偏好，而不是猜测用户过去偏好的能力，因为前者是有价值的。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-3960115668103735527?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/3960115668103735527/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=3960115668103735527' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3960115668103735527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/3960115668103735527'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/03/netflix2.html' title='Netflix数据集的一些统计特征(2)'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-2330603552483982192</id><published>2009-03-04T10:36:00.001+08:00</published><updated>2009-03-04T10:36:59.950+08:00</updated><title type='text'>run mysql with ruby in ubuntu 8.04</title><content type='html'>&lt;ol&gt;&lt;li&gt;用新立得安装ruby,mysql,mysql server的最新版&lt;/li&gt;&lt;li&gt;下载mysql-ruby-2.8.1，&lt;a href="http://www.tmtm.org/en/mysql/ruby/"&gt;http://www.tmtm.org/en/mysql/ruby/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;按照上面网址的说明，配置、编译、安装&lt;/li&gt;&lt;/ol&gt;中途遇到几个小麻烦，mkmf包在ubuntu 8.04默认的ruby 1.8中没有，mysql客户端的版本也有些问题。总之全都使用最新版就OK了。&lt;br&gt; &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-2330603552483982192?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/2330603552483982192/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=2330603552483982192' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2330603552483982192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/2330603552483982192'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/03/run-mysql-with-ruby-in-ubuntu-804.html' title='run mysql with ruby in ubuntu 8.04'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-4965738340449244332</id><published>2009-02-25T17:23:00.001+08:00</published><updated>2009-02-25T17:23:37.285+08:00</updated><title type='text'>Second-hand Hash</title><content type='html'>二手散列这个名字是我起的，官方叫法是&lt;a   href="http://en.wikipedia.org/wiki/Cuckoo_hashing"&gt;Cuckoo hashing&lt;/a&gt;，他是一个散列算法框架而不是一个散列函数。事实上，二手散列需要两个散列函数h1和h2，对应两个散列表T1和T2，散列函数从值域（domain of values）映射到键域（domain of keys），散列表把键应成值。判断值x是否存在于字典D中：lookup(x,D)=(T1[h1(x)]==x || T2[h2(x)]==x)。&lt;br  &gt;插入的方式很有趣，如果有散列冲突，就把原有值的踢出去，提到另一个表里去，知道没有冲突为止。用伪代码来说：&lt;br  &gt;insert x into D:&lt;br  &gt;如果lookup(x,D)返回真，返回&lt;br  &gt;重复maxloop次：&lt;br  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若T1[h1(x)]为空，则T1[h1(x)]=x后返回&lt;br  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 交换T1[h1(x)]和x&lt;br  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 若T2[h2(x)]为空，则T2[h2(x)]=x后返回&lt;br  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 交换T2[h2(x)]和x&lt;br  &gt;如果代码走到了这一行，调整T1,T2的大小和h1，h2的值域，重新insert x into D&lt;br  &gt;&lt;br  &gt;这是一个完美散列，因为我们确定地知道，lookup至多探查两次，绝对O(1)。难点在insert的复杂度的分析。注意到在insert中使用了递归调用，因此必需首先证明，insert的做法能够以较大的概率在有限步内终止。然后还能证明，insert的均摊复杂度的期望也是常数。证明过程这里就不转载了。&lt;br  &gt;------&lt;br  &gt;另外有一种d手链式散列的框架，针对一种特殊的问题，也有很漂亮的结果，出自《概率与计算》一书。n个球放入n个箱子，每个球放的时候先从n个箱子中等概率地选d(&amp;gt;=2)个箱子，然后放入这d个箱子中球最少的那个箱子。可以证明，以1-o(1)的概率，球最多的箱子中球的个数（称为最大负荷）是&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235552105025_52105025_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage1" latexexpression="\frac{ln(ln(n))}{ln(d)}+ \Theta(1)" imagesize="120"&gt;&lt;br  &gt;基于此，我们可以开发出确定性O(d)时间插入、依很大的概率在至多lnlnn/lnd时间查找的链式散列算法。&lt;br  &gt;d=1时，没有选择的余地，书中引理5.12告诉我们：n个球独立等概率放入n个箱子，最大负荷以1-1/n的概率至少为lnn/lnlnn。这告诉我们，在散列表比较满的时候，“一手”链式散列的性能和二分查找相当。对比发现，d手链式散列对传统链式散列的改进还是挺大的。&lt;br  &gt;------&lt;br  &gt;应用中，二手散列或d手链式散列还有一个好处：在多核处理器上可以并行计算散列函数，进一步提高效率。&lt;br  &gt;------&lt;br  &gt;P.S.复杂度的概率分析中大量用到了&lt;a   href="http://todwang.blogspot.com/2009/02/chernoff-bound.html"&gt;切尔诺夫界技巧&lt;/a&gt;&lt;br  &gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-4965738340449244332?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/4965738340449244332/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=4965738340449244332' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4965738340449244332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/4965738340449244332'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/02/second-hand-hash.html' title='Second-hand Hash'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-8785329611297216781</id><published>2009-02-23T12:03:00.001+08:00</published><updated>2009-02-23T12:03:09.102+08:00</updated><title type='text'>Export all SMS messages as xml file from your Windows Mobile</title><content type='html'>昨天觉得手机中病毒了，老莫名其妙拨号上网。准备重装系统，先备份短信。.NET Compact Framework类库中outlook类中的SMS若干方法&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.pocketoutlook.smsmessage.aspx"&gt;形同虚设&lt;/a&gt;。&lt;a href="http://xn--4gqsa2hoqjb976usze20a059k.NET"&gt;于是找了一个第三方.NET&lt;/a&gt;的类库，&lt;a href="http://www.codeproject.com/KB/mobile/PocketPCandSmartphone.aspx"&gt;MAPIdotnet&lt;/a&gt;。他构建在Windows API的MAPIlib基础上，专门用来访问Windows Mobile的短信的。他本身是for Smartphone的，稍微改一下就能在我的Pocket PC上跑了。&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //export all&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileStream fs = new FileStream(&amp;quot;smsExport&amp;quot;+DateTime.Now.ToString(&amp;quot;yy_MM_d_H_mm&amp;quot;)+&amp;quot;.xml&amp;quot;, FileMode.OpenOrCreate);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;UTF-8\&amp;quot; ?&amp;gt;&amp;lt;sms&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int k = 0, K = this.stores.Length; k &amp;lt; K; k++)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMAPIMsgStore store = this.stores[k];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;store name=\&amp;quot;&amp;quot;+store.ToString()+&amp;quot;\&amp;quot;&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMAPIFolder folder = store.RootFolder.OpenFolder();&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMAPIFolderID[] subFolders = folder.GetSubFolders((int)folder.NumSubFolders);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (IMAPIFolderID fId in subFolders)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMAPIFolder f = fId.OpenFolder();&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;folder name=\&amp;quot;&amp;quot; + f.ToString() + &amp;quot;\&amp;quot;&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMAPIMessage[] messages = f.GetNextMessages(f.NumSubItems);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0, length = messages.Length; i &amp;lt; length; i++)&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMAPIMessage msg = messages[i];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msg.PopulateProperties(EMessageProperties.DeliveryTime | EMessageProperties.Sender | EMessageProperties.Subject);&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //store folder subfolder msg&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;msg when=\&amp;quot;&amp;quot; + msg.LocalDeliveryTime.ToString(&amp;quot;H:mm d/MM/yy&amp;quot;) + &amp;quot;\&amp;quot;&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;Sender name=\&amp;quot;&amp;quot; + &lt;a href="http://msg.Sender.Name"&gt;msg.Sender.Name&lt;/a&gt; + &amp;quot;\&amp;quot;&amp;gt;&amp;lt;![CDATA[&amp;quot; + msg.Sender.FullAddress + &amp;quot;]]&amp;gt;&amp;lt;/Sender&amp;gt;&amp;quot;);&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;Recipients&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int j = 0; j &amp;lt; msg.Recipients.Length; j++)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMAPIContact recipient = msg.Recipients[j];&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;Recipient name=\&amp;quot;&amp;quot; + recipient.Name + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + recipient.FullAddress + &amp;quot;&amp;lt;/Recipient&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;/Recipients&amp;gt;&amp;quot;);&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;Subject&amp;gt;&amp;lt;![CDATA[&amp;quot;+msg.Subject+&amp;quot;]]&amp;gt;&amp;lt;/Subject&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;Body&amp;gt;&amp;lt;![CDATA[&amp;quot; + msg.Body + &amp;quot;]]&amp;gt;&amp;lt;/Body&amp;gt;&amp;quot;);&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;/msg&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;/folder&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;/store&amp;gt;&amp;quot;);&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Write(&amp;quot;&amp;lt;/sms&amp;gt;&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sw.Close();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fs.Close();&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-8785329611297216781?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/8785329611297216781/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=8785329611297216781' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8785329611297216781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/8785329611297216781'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/02/export-all-sms-messages-as-xml-file.html' title='Export all SMS messages as xml file from your Windows Mobile'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5479033552458914259</id><published>2009-02-21T19:04:00.001+08:00</published><updated>2009-02-21T19:04:19.931+08:00</updated><title type='text'>Chernoff bound</title><content type='html'>Chernoff bound&lt;br  &gt;&lt;br  &gt;《概率与计算》一书中介绍了一个叫作“切尔诺夫界”的不等式，在概率论中，可以用来估计随机变量尾分布的性质，也就是随机变量在远离其期望值的某区域中取值的概率。切尔诺夫界可以用于分析算法的概率意义下的性能，具体来说，能给出算法运行时间超过某一阈值的概率的上界，或者解的相对误差超过某一阈值的概率的上界。&lt;br  &gt;&lt;br  &gt;Wikipedia上有切尔诺夫界的若干中形式的公式。我在这里不加证明地引用其中一个比较简单的公式，然后给出一个它在算法分析上应用。&lt;br  &gt;&lt;br  &gt;切尔懦夫定理：X&lt;sub  &gt;1&lt;/sub&gt;,...,X&lt;sub  &gt;n&lt;/sub&gt;是独立随机变量，X&lt;sub  &gt;i&lt;/sub&gt;服从0-1分布，&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235213945630_13945630_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage1" latexexpression="X=\sum_{i=1}^n{X_i},  E(X) \leq\mu " imagesize="120"&gt;，则对任意的ε，0&amp;lt;ε&amp;lt;1，有：&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235213978076_13978076_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage2" latexexpression="P(X \geq (1+ \varepsilon) \mu) \leq e^{- \mu  \varepsilon^2 / 3}" imagesize="120"&gt;。&lt;br  &gt;&lt;br  &gt;考虑这样一个判定问题：G=(V,E)为无向图，D={(s&lt;sub  &gt;i&lt;/sub&gt;,t&lt;sub  &gt;i&lt;/sub&gt;),i=1,...,n,}为一个顶点对的集合，问是否存在{p&lt;sub  &gt;i&lt;/sub&gt;,i=1,...,n}，其中p&lt;sub  &gt;i&lt;/sub&gt;为连接s&lt;sub  &gt;i&lt;/sub&gt;到t&lt;sub  &gt;i&lt;/sub&gt;的路，使得任何一条边e属于E都没有被两条路p&lt;sub  &gt;i&lt;/sub&gt;、p&lt;sub  &gt;j&lt;/sub&gt;覆盖。&lt;br  &gt;对应解一个优化问题：给一组路{p&lt;sub  &gt;i&lt;/sub&gt;,i=1,...,n}，对于任一e属于E，定义cong(e)=|{p&lt;sub  &gt;i&lt;/sub&gt;|e属于p&lt;sub  &gt;i&lt;/sub&gt;,i=1,...,n}|，即通过e的路的条数。求{p&lt;sub  &gt;i&lt;/sub&gt;,i=1,...,n}使得C=max{cong(e),e属于E}达到最小，即让被通过次数最多的边，通过次数最少。&lt;br  &gt;&lt;br  &gt;这个问题是NP难的，不过我们可以设计这样一个算法：线性规划松弛，然后随机近似。通过切尔诺夫界能够给出这个算法的近似率的一个估计。&lt;br  &gt;&lt;br  &gt;令P&lt;sub  &gt;i&lt;/sub&gt;为从s&lt;sub  &gt;i&lt;/sub&gt;到t&lt;sub  &gt;i&lt;/sub&gt;的所有路的集合，记f(p,i)=1{p属于P&lt;sub  &gt;i&lt;/sub&gt;}，也就是表示p是否是一条从s&lt;sub  &gt;i&lt;/sub&gt;到t&lt;sub  &gt;i&lt;/sub&gt;的路。优化目标是min C。约束条件有下面两个：&lt;br  &gt;首先任何一对点s&lt;sub  &gt;i&lt;/sub&gt;,t&lt;sub  &gt;i&lt;/sub&gt;恰有一条路p通过，&lt;br  &gt;&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235213491432_13491432_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage3" latexexpression="\sum_{p \in P_i}{f(p,i)}=1" imagesize="120"&gt;，对于任意i，&lt;br  &gt;其次每一条边的冲突数不超过C，&lt;br  &gt;&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235205959523_05959523_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage4" latexexpression="\sum_{i=1}^n{\sum_{p:e \in p}{f(p,i)}}  \leq C" imagesize="120"&gt;，对任意e属于E。&lt;br  &gt;我们把f(p,i)松弛到[0,1]，用线性规划的方式求解。然后对每个i=1,...,n，用轮盘赌的方式以概率f(p&lt;sub  &gt;i&lt;/sub&gt;,i)选p&lt;sub  &gt;i&lt;/sub&gt;属于Pi。&lt;br  &gt;&lt;br  &gt;上面就是线性规划松弛加随机近似的算法，下面用概率的方法分析这个算法。&lt;br  &gt;&lt;br  &gt;定义随机变量&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235213716301_13716301_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage5" latexexpression="X_{i}^e" imagesize="120"&gt;表示路选中的路p&lt;sub  &gt;i&lt;/sub&gt;是否通过边e，i=1,...,n，e属于E。则：&lt;br  &gt;&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235213681655_13681655_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage6" latexexpression="E(X_{i}^e)=P(X_{i}^e=1)=\sum_{p \in P_i, e \in E}{f(p,i)}" imagesize="120"&gt;&lt;br  &gt;定义&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235213793852_13793852_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage7" latexexpression="X_e=\sum_{i=1}^n{X_i^e}" imagesize="120"&gt;，表示边e的被通过的次数。则：&lt;br  &gt;&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235213825438_13825438_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage8" latexexpression="E(X_e)=\sum_{i=1}^n{\sum_{p \in P_i, e \in E}{f(p,i)}} \leq C" imagesize="120"&gt;&lt;br  &gt;由切尔诺夫界定理，立得：&lt;br  &gt;&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1235214096967_14096967_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage9" latexexpression="P(X_e \geq (1+ \epsilon)C) \leq e^{- \epsilon^2 C / 3}" imagesize="120"&gt;&lt;br  &gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5479033552458914259?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5479033552458914259/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5479033552458914259' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5479033552458914259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5479033552458914259'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/02/chernoff-bound.html' title='Chernoff bound'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-7666611281696930887</id><published>2009-02-17T23:45:00.001+08:00</published><updated>2009-02-17T23:45:46.283+08:00</updated><title type='text'>旁听《电视新闻研究》1</title><content type='html'>从这周开始，在北大旁听《电视新闻研究》，阿忆讲的。其实早就对电视媒体发生了兴趣，尤其是互联网对电视媒体的变革。要想读懂互联网电视，我认为首先应该读懂电视，然后才是读懂互联网。新闻，作为内容的一种，既出现于传统平面媒体、电视媒体，也出现于互联网后的新媒体。新闻，是媒体之所以存在的最原始也是最具有生命力的理由。&lt;br&gt;这个系列Blog是随记，不仅仅是课堂笔记，还记录了这门课上其他所见、所想。&lt;br&gt;&lt;br&gt;2009年2月17日&lt;br&gt;"今天下午，我和丽冒着2009年的第一场雪骑车去北大找硕硕旁听&lt;a href="http://blog.sina.com.cn/zhouyijun"&gt;阿忆&lt;/a&gt;的《电视新闻研究》。"&lt;br&gt; 按照新闻学的分类，上面这句话是不折不扣的"硬新闻"。今天这堂课，主要就讲了一个"软新闻"的概念，它与"硬新闻"相对，有很多版本的定义，我理解的软新闻，就是讲故事，而硬新闻，则是中国人原来印象中的新闻。&lt;br&gt;"软新闻"不是电视媒体发明的，而是平面杂志发明的。1968年以前，电视新闻主要是硬新闻，因为它在时效性和感染力方面有着得天独厚的媒介优势，不需要用内容上的革新就能赢得广泛受众。而受到杂志上频见的"软新闻"的启发，CBS的《Cronkite晚间新闻》的执行制片人Don Hewitt在1968年引入了个性化新闻的理念，将"软新闻"带进电视媒体。值得注意的时间节点有两个，一个是1968年，当年《60 minutes》栏目就上线了，说明他的团队执行力强，另一个是在栏目不受好评的低谷中坚持摸索了7年，在1975年才成为相当于中国春晚一样的收视率极高的节目，说明他们能厚积薄发，耐得住寂寞。&lt;br&gt; 这让我想到互联网电视，它相对于广播电视，和广播电视相对于平面媒体有很多相似之处。首先它们都是技术的革新带来媒介上的突破，使得新闻传播的更实时、更鲜活，影响力更大。其次，他们都在抢占传统媒体市场的同时，学习传统媒体中有价值的元素，例如电视从平面学来了"软新闻"，而互联网也从电视学来了"文字直播"、"参与式新闻"等等。新事物的不会凭空产生，他们必须在旧事物中汲取养分，才能成长。互联网电视也一样。这也是我为什么想做互联网电视，却热心于学习传统电视媒体的原因。&lt;br&gt; 《60 minutes》的Hewitt改变了新闻理念。Now, News is the story you never heard。好新闻的标准，据说是"昨晚播出的节目成为第二天早上人们的话题"。不过，我更认可另一种也许更保守、更古典的说法：新闻是历史的第一稿。仔细想想，二者并不矛盾，只是表意倾向不同罢了。&lt;br&gt;关于电视广告，有这样一个案例，每期《60 minutes》分为3个独立新闻故事，中间插播两个广告。即使这节目中抨击了广告主，广告主很不爽，却还要在这里打广告，因为其他地方的回报无法和这里相提并论。这让我想起以前经常听做互联网电视的朋友提起的一句话：内容为王。&lt;br&gt; &lt;br&gt;也许是学校不同，也许是专业不同，北大新闻系的同学给我感觉放的更开。上课时，阿忆一度困扰于笔记本电脑接到音箱上没有声音，很快第一排主动站起来一个男生一个女生，走上讲台帮阿忆解决问题。女生打电话，和物业的人员沟通，按照提示尝试讲台上的各种开关，沟通很得体很有效率，男生则和女生配合，帮着拉开讲台的柜门、查看各种开关的说明等，很快找到了正确的开关，解决了问题：能听到阿忆笔记本电脑的声音了。他们也许上过阿忆的课，也许在坐很多都是他俩的同学罢，所以感觉特别自然，就像中学的一个班上，同学帮老师去拿粉笔或帮老师擦黑板一样，给人感觉很亲切很温馨。在清华理工科的课堂上，我从没见过这种场面。遇到笔记本电脑声音放不出来，要么是所有同学都对老师的无助无动于衷或爱莫能助，要么是于无声处跳出来一个惊世骇俗的大牛，上去一按，电脑就出声了。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-7666611281696930887?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/7666611281696930887/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=7666611281696930887' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7666611281696930887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7666611281696930887'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/02/1.html' title='旁听《电视新闻研究》1'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-739808747587087861</id><published>2009-02-15T23:56:00.001+08:00</published><updated>2009-02-15T23:56:42.421+08:00</updated><title type='text'>正心诚意读书不二</title><content type='html'>最近经历了一些大悲大喜，发现自己内心越发平静了。&lt;br&gt;正心诚意，出自《大学》，刚上大学时特别特别喜欢的一句话，烙在了骨子里。虽然多年来学习成绩一直很一般，但是却自以为学得很洒脱，很愿意砸时间去享受自由的思考的乐趣。&lt;span id="reply_content_61501842"&gt;"古之欲明明德于天下者，先治其国；欲治其国者，先齐其家；欲齐其家者，先修其身；欲修其身者，先正其心；欲正其心者，先诚其意；欲诚其意者，先致其知，致知在格物。"格物，我以为指的是学好物理和数学，或者说了解自然和理性。这一串"责任链"中最重要的，我认为是正心诚意。自古以来，许多治国者没有很好的根基，风光一时甚至一世，但最终被人民群众和历史否定，无法达到"明明德于天下"的儒家理想。也许是我的唯物历史观太教条了罢。。。&lt;br&gt; 读书不二，出自曾文正公的自律条款。"敬、静坐、早起、读书不二、读史、谨言、养气、保身、日知所亡、月无亡不能、作字、夜不出门"。我特别喜欢其中"读书不二"这句，以为是不要同时读两本书的意思。很多时候，我们到图书馆会搞一大堆书，东翻翻西看看结果哪一本都没看透。这样不好。最近我在潜心读一本书《&lt;a href="http://www.amazon.com/Algorithmics-Hard-Problems-Juraj-Hromkovic/dp/3540441344/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1234711445&amp;amp;sr=1-1"&gt;Algorithms for hard problems&lt;/a&gt;》，去图书馆只带这一本书、一支笔、一个笔记本（纸的）。只读一本书时，心灵会觉得特别纯净。虽然这本书很难啃，而且对眼下的毕设、对即将面对的工作没有多少直接帮助，却提供了很多我认为很有价值的算法设计与分析的思想，读起来很享受。专注，是一种做学问的态度，也是一种做人的态度，适合一小撮人。他们是畏惧社会吗？看你怎么看了。&lt;br&gt; 正心诚意，读书不二。继续，作我的快乐学术男。&lt;br&gt;&lt;/span&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-739808747587087861?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/739808747587087861/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=739808747587087861' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/739808747587087861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/739808747587087861'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/02/blog-post_15.html' title='正心诚意读书不二'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-7729569510519200388</id><published>2009-02-06T19:01:00.001+08:00</published><updated>2009-02-06T19:01:27.871+08:00</updated><title type='text'>赫鲁晓夫在哪里</title><content type='html'>1965年2月14日，&lt;a href="http://baike.baidu.com/view/1149053.htm"&gt;苏共第二十次代表大会&lt;/a&gt;在莫斯科召开。2月24日深夜，赫鲁晓夫忽然做了《&lt;a href="http://baike.baidu.com/view/25583.html"&gt;秘密报告&lt;/a&gt;》，系统揭露和批评斯大林的重大错误，要求肃清个人崇拜的流毒。顿时在国内外引起强烈反响。很多人就有疑问，你既然知道他的错误，为什么在斯大林生前不提出来呢？后来，在党的代表会上，赫鲁晓夫又谈此问题时，有人从听众席传来一张纸条，上面写着：当时你在哪里？&lt;br&gt; 赫鲁晓夫不愧是政治家，看看他是如何机智应对的。&lt;br&gt;他拿起纸条，大声念出了上面的内容，然后向台下喊道："请写这张纸条的人，马上从座位上站起来，并走到台上。"台下鸦雀无声。赫鲁晓夫又重复了一遍，台下依然一片死寂。于是，赫鲁晓夫淡淡地说："好吧，就让我告诉你，当时我就坐在你现在坐的那个位置上"。&lt;br&gt;&lt;br&gt;这个故事来自&lt;a href="http://www.douban.com/subject/2026086/"&gt;一本博弈论的科普读物&lt;/a&gt;，当时正在讲多人博弈的人质困境。&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-7729569510519200388?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/7729569510519200388/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=7729569510519200388' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7729569510519200388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/7729569510519200388'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/02/blog-post.html' title='赫鲁晓夫在哪里'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-5927703871281615166</id><published>2009-01-20T10:26:00.001+08:00</published><updated>2009-01-20T10:26:46.038+08:00</updated><title type='text'>Simulating N-Body Problem</title><content type='html'>&lt;span style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);"  &gt;&lt;br  &gt;&lt;/span&gt;&lt;div style="text-align: center;"  &gt;&lt;span style="font-weight: bold;"  &gt;理解多体问题的数值模拟&lt;/span&gt;&lt;br  &gt;&lt;/div&gt;&lt;br  &gt;&lt;span style="font-weight: bold;"  &gt;多体问题&lt;/span&gt;&lt;br  &gt;物理上，多体问题（N-Body Problem）是指：3维空间中给n个质点在某一时刻的位置和速度，已知他们的质量，假定他们彼此之间只受万有引力作用，求他们后续任意时刻的位置和速度。数学上，多体问题是一个高阶的常微分方程初值问题，具体说来：&lt;br  &gt;设位置函数向量x=(x&lt;sub  &gt;1&lt;/sub&gt;,...,x&lt;sub  &gt;n&lt;/sub&gt;)，&lt;img id="latexexpressionimage1" imagesize="120" latexexpression="x_i:\mathbb{R} \rightarrow \mathbb{R}^3, i=1,...,n" src="http://writer.zoho.com:80/ImageDisplay.im?name=1232343972168_43972168_img2.png&amp;amp;accId=766392000000002007"  &gt;，质量m&lt;sub  &gt;i&lt;/sub&gt;&lt;br  &gt;满足方程&lt;br  &gt;&lt;img id="latexexpressionimage2" imagesize="120" latexexpression="\ddot{x}=f(x), f:\mathbb{R}^n  \rightarrow \mathbb{R}^n" src="http://writer.zoho.com:80/ImageDisplay.im?name=1232348449814_48449814_img2.png&amp;amp;accId=766392000000002007"  &gt;&lt;br  &gt;其分量形式为&lt;br  &gt;&lt;img id="latexexpressionimage3" imagesize="120" latexexpression="\ddot{x_i} = \sum_{j \neq i}{\frac{m_j (x_i - x_j) }{|x_i - x_j|^3}}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1232344332147_44332147_img2.png&amp;amp;accId=766392000000002007"  &gt;&lt;br  &gt;和初值条件&lt;br  &gt;&lt;img id="latexexpressionimage4" imagesize="120" latexexpression="x_i(0) = C_{1i}, \dot{x_i}(0) = C_{2i}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1232344471496_44471496_img2.png&amp;amp;accId=766392000000002007"  &gt;&lt;br  &gt;求x(t)&lt;br  &gt;当n=2时（又称二体问题），有解析解，解曲线是平面上的二次曲线（《&lt;a href="http://www.wl.cn/1095336"  &gt;常微分方程教程&lt;/a&gt;》P132）。&lt;br  &gt;n&amp;gt;2时目前没有解析解，虽然理论上得到了很多很漂亮的定性分析结果，但是实践中还要归诸数值模拟，也就是用差分代替微分。&lt;br  &gt;&lt;br  &gt;&lt;span style="font-weight: bold;"  &gt;多体问题的数值模拟&lt;/span&gt;&lt;br  &gt;Part1：差分格式&lt;br  &gt;参考&lt;a   href="http://en.wikipedia.org/wiki/Verlet_integration"&gt;http://en.wikipedia.org/wiki/Verlet_integration&lt;/a&gt;&lt;br  &gt;数值模拟最朴素的想法是欧拉迭代，在每一个时刻，根据当前位置计算加速度，更新下一时刻的速度，根据当前速度更新下一时刻位置：（设时间步长为h）&lt;br  &gt;a(t) = f(x(t))&lt;br  &gt;v(t + h) = v(t) + a(t)h&lt;br  &gt;x(t + h) = x(t) + v(t)h&lt;br  &gt;这个方法误差很大，即使假设速度v没有产生误差，也很容易分析出（通过Taylor展开到二阶项），迭代一步产生的误差为O(h&lt;sup  &gt;2&lt;/sup&gt;)。&lt;br  &gt;&lt;br  &gt;经典力学中的数值模拟常用的是Verlet方法，它利用两侧Taylor展开消去速度项，构造误差阶数更小的差分格式：&lt;br  &gt;首先Taylor展开到4阶&lt;br  &gt;&lt;img id="latexexpressionimage5" imagesize="120" latexexpression="x(t+h)=x(t)+h\dot{x}(t)+\frac{1}{2}h^2\ddot{x}(t)+\frac{1}{6}h^3\dddot{x}(t)+O(h^4)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1232349724764_49724764_img2.png&amp;amp;accId=766392000000002007"  &gt;&lt;br  &gt;注意到&lt;br  &gt;&lt;img id="latexexpressionimage6" imagesize="120" latexexpression="\ddot{x}=f(x)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1232349807790_49807790_img2.png&amp;amp;accId=766392000000002007"  &gt;&lt;br  &gt;并将-h带入上面的h，得&lt;br  &gt;&lt;img id="latexexpressionimage7" imagesize="120" latexexpression="x(t-h)=x(t)-h\dot{x}(t)+\frac{1}{2}h^2f({x}(t))-\frac{1}{6}h^3\dddot{x}(t)+O(h^4)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1232349870002_49870002_img2.png&amp;amp;accId=766392000000002007"  &gt;&lt;br  &gt;两式相加，消去1阶项，顺带把3阶项也消掉了（赚到了，呵呵）。得到：&lt;br  &gt;&lt;img id="latexexpressionimage8" imagesize="120" latexexpression="x(t+h)=2x(t)-x(t-h)+h^2f({x}(t))+O(h^4)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1232350075729_50075729_img2.png&amp;amp;accId=766392000000002007"  &gt;&lt;br  &gt;定义差分格式为&lt;br  &gt;&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1232353672724_53672724_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage9" latexexpression="\hat{x}(t+h) = 2\hat{x}(t)-\hat{x}(t-h)+h^2f(\hat{x}(t))" imagesize="120"&gt;&lt;br  &gt;显然一步误差O(h&lt;sup  &gt;4&lt;/sup&gt;)&lt;br  &gt;然后来分析误差扩散。&lt;br  &gt;（注：通常Big O Notation是不能做减法的，这里我们不加说明地假设它可以做减法，使用Lagrange余项的Taylor展开也许能解释清楚，我们有深究它。）&lt;br  &gt;来归纳证明，k步误差有如下二次扩散关系&lt;br  &gt;&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1232353775206_53775206_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage10" latexexpression="x(t+kh) - \hat{x}(t+kh) = \frac{k(k+1)}{2}O(h^4)" imagesize="120"&gt;&lt;br  &gt;k=1、2时不难直接验证。假设直到k-1都成立，来看k时&lt;br  &gt;&lt;img   src="http://writer.zoho.com:80/ImageDisplay.im?name=1232416741650_16741650_img2.png&amp;amp;accId=766392000000002007" id="latexexpressionimage11" latexexpression="x(t+kh) - \hat{x}(t+kh)  = 2x(t-(k-1)h) - 2\hat{x}(t-(k-1)h)   -(x(t-(k-2)h) - \hat{x}(t-(k-2)h))   + h^2f(x(t+(k-1)h))- h^2f(\hat{x}(t+(k-1)h))  + O(h^4) =(k(k-1)+\frac{(k-1)(k-2)}{2}+1)O(h^4) =\frac{k+k^2}{2}O(h^4)" imagesize="120"&gt;&lt;br  &gt;其中假设f连续可微，x取值在一个紧集上，就有f是Lipschitz连续的，从而两个h&lt;sup  &gt;2&lt;/sup&gt;f项做差是高阶小，直接扔掉。从而上式成立。&lt;br  &gt;因此，若模拟总时间T=kh固定，则总误差O(h&lt;sup  &gt;2&lt;/sup&gt;)&lt;br  &gt;&lt;br  &gt;&lt;br  &gt;Part2：受力计算的分治算法&lt;br  &gt;参考&lt;a href="http://www.cs.berkeley.edu/%7Edemmel/cs267/lecture26/lecture26.html"  &gt;http://www.cs.berkeley.edu/~demmel/cs267/lecture26/lecture26.html&lt;/a&gt;&lt;br  &gt;计算每个质点受的合力，按照定义，是其他质点对它的万有引力的矢量和。n个点，每个点计算(n-1)个分力，这样迭代一步的复杂度是O(n&lt;sup  &gt;2&lt;/sup&gt;)，不能忍。&lt;br  &gt;Barnes-Hut算法使用分治策略，将复杂度降低到O(nlogn)，它的思想是，将较远的若干个点当做一个点，一起计算来自他们的分力。举例来说，假设x,y到点集A的质心的距离很远，A包含a个点，则按照定义计算x,y受A的力需要计算2a个分力，而若把A当做一个对象处理，预先计算它的质心和总质量，则完成同样的工作，仅需要a次计算。&lt;br  &gt;算法用到了四叉树的结构（这是对于2维情形，3维使用八叉树）。&lt;br  &gt;递归地将矩形分成四等分，落入第i象限的点属于当前节点的第i子节点，直到当前节点只有一个节点为止，依此从平面上的点集构造四叉树，如图——&lt;br  &gt;&lt;img   src="http://www.cs.berkeley.edu/%7Edemmel/cs267/lecture26/Quadtree2.gif"&gt;&lt;br  &gt;通过适当选取划分轴，可以保证四叉树均衡，也称自适应四叉树，这一步复杂度O(nlogn)&lt;br  &gt;得到四叉树后，后续遍历一次得到每个节点的质心和总质量。最后，计算每个质点的受力：&lt;br  &gt;从根节点开始考虑每个子树，如果质点到该子树的根节点的质心足够远，则累加质点受到该子树（作为整体对应的质心和总质量）的万有引力，否则，质点受到该子树的合力等于该子树的每个子树的引力矢量和，而计算子树的引力又递归调用当前算法。由四叉树对应的几何空间划分，很容易看出，计算一个质点的受力，要遍历树上的节点个数不超过树的高度。若四叉树均衡，则复杂度O(nlogn)，从而总复杂度也如此。&lt;br  &gt;&lt;br  &gt;总结：&lt;br  &gt;1、利用Taylor展开构造有效差分格式可以减少计算误差&lt;br  &gt;2、利用分治思想改进算法可以降低计算复杂度&lt;br  &gt;&lt;br  &gt;题外话：&lt;br  &gt;计算数学看算法就看三件事：收敛性、复杂性、稳定性。这个例子中讨论了前两个，第三个稳定性主要是针对良好的问题的，也就是说，如果真实解对初值的依赖是连续的，则要求算法的数值解对初值的依赖也是连续的。但是多体问题是一个典型的混沌系统，问题本身是病态的，讨论它的算法稳定性也就意义不大了。&lt;br  &gt;一直以来，我就特别看好物理的sense好的人，像上面这个分治算法的设计，物理背景就很强（berkeley的讲义上用仙女座星系做四叉树构造思想的导言），或者说，对问题域有透彻了解的人，往往能发明出新的、好的方法。&lt;br  &gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-5927703871281615166?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/5927703871281615166/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=5927703871281615166' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5927703871281615166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/5927703871281615166'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/01/simulating-n-body-problem.html' title='Simulating N-Body Problem'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6028522428165069117</id><published>2009-01-13T09:09:00.001+08:00</published><updated>2009-01-13T09:09:35.367+08:00</updated><title type='text'>Keypoints for Basic Functional Analysis</title><content type='html'>Keypoint for Basic Functional Analysis&lt;br  &gt;基础泛函分析知识点整理&lt;br  &gt;&lt;span   style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);"&gt;度量空间&lt;/span&gt;&lt;br  &gt;&lt;br  &gt;聚点：x∈G'，若x的任何去心邻域交G非空&lt;br  &gt;&lt;br  &gt;闭集的等价定义：&lt;br  &gt;1、余集是开集&lt;br  &gt;2、闭包为自身&lt;br  &gt;3、若其中一序列收敛，则极限点属于集合&lt;br  &gt;&lt;br  &gt;闭包的等价定义&lt;br  &gt;1、G的闭包=G∪G'&lt;br  &gt;2、G的闭包是包含G的最小闭集&lt;br  &gt;&lt;br  &gt;可分空间的子空间可分&lt;br  &gt;对X'可分，则X可分&lt;br  &gt;C[0,1]可分&lt;br  &gt;l∞不可分&lt;br  &gt;&lt;br  &gt;完备子集闭&lt;br  &gt;完备空间的闭子空间完备&lt;br  &gt; 自反，则完备&lt;br  &gt;离散度量空间总完备&lt;br  &gt; lp、l∞、c0、c、C[a,b]完备&lt;br  &gt;&lt;br  &gt;M是紧子集，若M的任何序列都有收敛到M中的子列&lt;br  &gt; 紧空间完备&lt;br  &gt;紧子集是有界闭集&lt;br  &gt; 紧集中的闭集是紧的&lt;br  &gt;点到紧集的距离总可达到&lt;a class="ItemAnchor" name="点到紧集的距离总可达到" title="点到紧集的距离总可达到"  &gt;&lt;/a&gt;&lt;br  &gt;&lt;br  &gt;压缩映射：T:X-&amp;gt;X成为压缩的，若存在0&amp;lt;a&amp;lt;1，d(Tx,Ty)&amp;lt;=ad(x,y)对于任意x,y∈X&lt;br  &gt;不动点：x为T不动点，若Tx=x&lt;br  &gt;不动点定理：X完备，存在m&amp;gt;0使得Tm压缩，则T有唯一不动点&lt;br  &gt;&lt;br  &gt;连续映射：&lt;br  &gt;开集的原像是开集、闭集的原像是闭集&lt;br  &gt;把紧集映成紧集&lt;br  &gt;与极限号可交换&lt;br  &gt;&lt;br  &gt;&lt;span   style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);"&gt;线性空间&lt;/span&gt;&lt;br  &gt;&lt;br  &gt;G是Hamel基，若G无关且spanG=X&lt;br  &gt;有限维线性空间代数自反&lt;br  &gt;&lt;br  &gt;实线性空间X，Z为子空间，p为X上次线性泛函，f属于Z*，f(x)&amp;lt;=p(x)对于任意x∈Z，则存在g属于X*使得g|Z=f，g(x)&amp;lt;=p(x)对于任意x∈X&lt;br  &gt;线性空间X，Z为子空间，p为X上半范，|f(x)|&amp;lt;=p(x)对于任意x∈Z，则存在g属于X*使得g|Z=f，|g(x)|&amp;lt;=p(x)对于任意x∈X&lt;br  &gt;&lt;br  &gt;&lt;span   style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);"&gt;赋范空间&lt;/span&gt;&lt;br  &gt;&lt;br  &gt;度量具有平移不变性、比例缩放、球可线性运算&lt;br  &gt;&lt;br  &gt; (e&lt;sub  &gt;n&lt;/sub&gt;)为Schauder基，若对于任意x∈X，存在唯一λ&lt;sub  &gt;n&lt;/sub&gt;使得x=∑λ&lt;sub  &gt;n&lt;/sub&gt;e&lt;sub  &gt;n&lt;/sub&gt;&lt;br  &gt;X有Schauder基，则X可分&lt;br  &gt;Schauder基无关，则dimX=∞&lt;br  &gt;&lt;br  &gt;Reiz引理：X是赋范空间，Y是Z真子空间，Y是闭集。对于任意0&amp;lt;θ&amp;lt;1，存在z∈Z，||z||=1，使得ρ(z,Y)&amp;gt;θ&lt;br  &gt;&lt;sub  &gt;&lt;br  &gt;&lt;/sub&gt;X是有限维赋范空间，(e&lt;sub  &gt;i&lt;/sub&gt;)是X的基，则存在a&amp;gt;0，使得a||x||&lt;sub  &gt;1&lt;/sub&gt;&amp;lt;=||x||对于任意x成立&lt;br  &gt; 有限维赋范空间是Banach空间&lt;br  &gt; 有限维赋范空间中有界闭集是紧集&lt;br  &gt; 赋范空间X，X有限维当且仅当单位闭球是紧的&lt;br  &gt; 赋范空间中，点到有限维子空间的距离总可达到&lt;a class="ItemAnchor" name="赋范空间中，点到有限维子空间的距离总可达到" title="赋范空间中，点到有限维子空间的距离总可达到"  &gt;&lt;/a&gt;&lt;br  &gt;&lt;br  &gt;X严格凸，点到闭子空间的距离至多可达一处&lt;br  &gt;&lt;br  &gt;X,Y赋范空间，T:X-&amp;gt;Y线性，则三者等价：T连续，T在0处连续，T有界算子&lt;br  &gt;&lt;br  &gt;Z为X子空间，f∈Z'，则存在g∈X'，g|Z=f，|g|=|f|&lt;br  &gt;对于非零元x，存在f∈X'，|f|=1，f(x)=|x|&lt;br  &gt;|x|=max{f(x)|f∈X'，|f|=1}&lt;br  &gt;Y真闭，x=X-Y，则存在f∈X'，|f|=1，f|Y=0，f(x)=ρ(x,Y)&amp;gt;0&lt;br  &gt;&lt;br  &gt;T属于B(X,Y)，定义共轭算子T×:Y'-&amp;gt;X'，T×f定义为fT，f∈Y'&lt;br  &gt;&lt;br  &gt;自反，则完备&lt;br  &gt;H自反，lp自反&lt;br  &gt;l1、l∞、c0、C[a,b]不自反&lt;br  &gt;&lt;br  &gt;&lt;span   style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);"&gt;&lt;/span&gt;&lt;span   style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);"&gt;Banach空间&lt;/span&gt;&lt;br  &gt;&lt;br  &gt;赋范空间完备，当且仅当任何绝对收敛的级数都收敛&lt;br  &gt;X,Y赋范空间，B(X,Y)完备当且仅当Y完备&lt;br  &gt;&lt;br  &gt;X完备，Tn∈B(X,Y)：&lt;br  &gt;&lt;div   style="margin-left: 40px;"&gt;对于任意x∈X，Tnx有界，则Tn有界&lt;br  &gt;Tn弱收敛到T，则T有界&lt;br  &gt;T∈B(X,Y)，Tn强收敛到T，当且仅当Tn有界且Tn在X的一个完全集上处处收敛到T&lt;br  &gt;&lt;/div&gt;&lt;br  &gt;X,Y完备：&lt;br  &gt;&lt;div   style="margin-left: 40px;"&gt;T∈B(X,Y)，若T满，则T为开映射，若T双，则T逆连续&lt;br  &gt;D(T)闭，T闭，则T∈B(X,Y)&lt;br  &gt;&lt;/div&gt;&lt;div  &gt;X,Y赋范空间，T∈B(D(T),Y)：&lt;br  &gt;&lt;/div&gt;&lt;div   style="margin-left: 40px;"&gt;D(T)闭，则T闭&lt;br  &gt;T闭，Y完备，则D(T)闭&lt;br  &gt;&lt;/div&gt;&lt;br  &gt;&lt;span   style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);"&gt;Hilbert空间&lt;/span&gt;&lt;br  &gt;&lt;br  &gt;范数由内积给出，当且仅当平行四边形等式成立|x+y|&lt;sup  &gt;2&lt;/sup&gt;+|x-y|&lt;sup  &gt;2&lt;/sup&gt;=2|x|&lt;sup  &gt;2&lt;/sup&gt;+2|y|&lt;sup  &gt;2&lt;/sup&gt;&lt;br  &gt;&lt;br  &gt;内积空间中，点到完备凸集的距离唯一达到，特别到闭子空间对&lt;a class="ItemAnchor" name="内积空间中，点到完备凸集的距离唯一达到，特别到闭子空间对" title="内积空间中，点到完备凸集的距离唯一达到，特别到闭子空间对"  &gt;&lt;/a&gt;&lt;br  &gt;内积空间中，点到子空间的距离可达到&lt;a class="ItemAnchor" name="内积空间中，点到子空间的距离可达到" title="内积空间中，点到子空间的距离可达到"  &gt;&lt;/a&gt;&lt;br  &gt;&lt;br  &gt;任何集合的正交补都是闭子空间&lt;br  &gt; X=M&lt;img id="latexexpressionimage1" imagesize="120" latexexpression=" \oplus" src="http://writer.zoho.com:80/ImageDisplay.im?name=1231750976137_50976137_img2.png&amp;amp;accId=766392000000002007"  &gt;N，若任意x∈X，存在唯一m∈M,n∈N，使得x=m+n&lt;br  &gt;X为Hilbert空间，M为闭子空间，则X=M&lt;img id="latexexpressionimage1" imagesize="120" latexexpression=" \oplus" src="http://writer.zoho.com:80/ImageDisplay.im?name=1231750976137_50976137_img2.png&amp;amp;accId=766392000000002007"  &gt;M正交补&lt;br  &gt;M完全当且仅当M正交补为{0}&lt;br  &gt;&lt;br  &gt;Bessal不等式：(ei)为标准正交列，则∑|&amp;lt;x,ei&amp;gt;|2&amp;lt;=||x||2&lt;br  &gt;&lt;br  &gt;完全标准正交集，可数则Schauder基，有限则Hamel基&lt;br  &gt;Hilbert空间总有完全标准正交基&lt;br  &gt;伴随算子：H1,H2为Hilbert空间，T∈B(H1,H2)，T*∈B(H2,H1)使得&amp;lt;T*y,x&amp;gt;=&amp;lt;y,Tx&amp;gt;&lt;br  &gt;&lt;br  &gt;&lt;span   style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);"&gt;点到集合的距离&lt;/span&gt;&lt;br  &gt;&lt;a href="#%C3%A8%C2%B5%C2%8B%C3%A8%C2%8C%C2%83%C3%A7%C2%A9%C2%BA%C3%A9%C2%97%C2%B4%C3%A4%C2%B8%C2%AD%C3%AF%C2%BC%C2%8C%C3%A7%C2%82%C2%B9%C3%A5%C2%88%C2%B0%C3%A6%C2%9C%C2%89%C3%A9%C2%99%C2%90%C3%A7%C2%BB%C2%B4%C3%A5%C2%AD%C2%90%C3%A7%C2%A9%C2%BA%C3%A9%C2%97%C2%B4%C3%A7%C2%9A%C2%84%C3%A8%C2%B7%C2%9D%C3%A7%C2%A6%C2%BB%C3%A6%C2%80%C2%BB%C3%A5%C2%8F%C2%AF%C3%A8%C2%BE%C2%BE%C3%A5%C2%88%C2%B0"  &gt;有限维&lt;/a&gt;，&lt;a href="#%C3%A7%C2%82%C2%B9%C3%A5%C2%88%C2%B0%C3%A7%C2%B4%C2%A7%C3%A9%C2%9B%C2%86%C3%A7%C2%9A%C2%84%C3%A8%C2%B7%C2%9D%C3%A7%C2%A6%C2%BB%C3%A6%C2%80%C2%BB%C3%A5%C2%8F%C2%AF%C3%A8%C2%BE%C2%BE%C3%A5%C2%88%C2%B0"  &gt;紧&lt;/a&gt;，&lt;a href="#%C3%A5%C2%86%C2%85%C3%A7%C2%A7%C2%AF%C3%A7%C2%A9%C2%BA%C3%A9%C2%97%C2%B4%C3%A4%C2%B8%C2%AD%C3%AF%C2%BC%C2%8C%C3%A7%C2%82%C2%B9%C3%A5%C2%88%C2%B0%C3%A5%C2%AE%C2%8C%C3%A5%C2%A4%C2%87%C3%A5%C2%87%C2%B8%C3%A9%C2%9B%C2%86%C3%A7%C2%9A%C2%84%C3%A8%C2%B7%C2%9D%C3%A7%C2%A6%C2%BB%C3%A5%C2%94%C2%AF%C3%A4%C2%B8%C2%80%C3%A8%C2%BE%C2%BE%C3%A5%C2%88%C2%B0%C3%AF%C2%BC%C2%8C%C3%A7%C2%89%C2%B9%C3%A5%C2%88%C2%AB%C3%A5%C2%88%C2%B0%C3%A9%C2%97%C2%AD%C3%A5%C2%AD%C2%90%C3%A7%C2%A9%C2%BA%C3%A9%C2%97%C2%B4%C3%A5%C2%AF%C2%B9"  &gt;内积&lt;/a&gt;，&lt;a href="#%C3%A5%C2%86%C2%85%C3%A7%C2%A7%C2%AF%C3%A7%C2%A9%C2%BA%C3%A9%C2%97%C2%B4%C3%A4%C2%B8%C2%AD%C3%AF%C2%BC%C2%8C%C3%A7%C2%82%C2%B9%C3%A5%C2%88%C2%B0%C3%A5%C2%AD%C2%90%C3%A7%C2%A9%C2%BA%C3%A9%C2%97%C2%B4%C3%A7%C2%9A%C2%84%C3%A8%C2%B7%C2%9D%C3%A7%C2%A6%C2%BB%C3%A5%C2%8F%C2%AF%C3%A8%C2%BE%C2%BE%C3%A5%C2%88%C2%B0"  &gt;凸&lt;/a&gt;&lt;br  &gt;&lt;br  &gt;&lt;br  &gt;&lt;br  &gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6028522428165069117?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6028522428165069117/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6028522428165069117' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6028522428165069117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6028522428165069117'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/01/keypoints-for-basic-functional-analysis.html' title='Keypoints for Basic Functional Analysis'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-6259382241781520208</id><published>2009-01-12T12:08:00.001+08:00</published><updated>2009-01-12T12:10:45.410+08:00</updated><title type='text'>广播加密算法调研报告</title><content type='html'>&lt;div style="font-size: 20px; color: rgb(120, 120, 190);" zid="5"&gt;&lt;div style="font-size: 20px; color: rgb(120, 120, 190);" zid="89"&gt;&lt;br zid="126"&gt;&lt;br zid="127"&gt;&lt;div style="text-align: center; color: rgb(0, 0, 0); font-weight: bold;" zid="128"&gt;广播加密算法调研报告&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br zid="2"&gt;&lt;font zid="6" color="#000000" size="2" face="Verdana"&gt;&lt;span style="font-weight: bold; font-size: 14px; color: rgb(0, 0, 0);" zid="7"&gt;&lt;span style="font-weight: bold; font-size: 14px;" zid="90"&gt;&lt;span style="font-weight: bold; font-size: 14px;" zid="116"&gt;一、广播加密问题&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br zid="8"&gt;1、问题的提法&lt;br zid="36"&gt;一个系统有一个广播源和n个用户，订阅者S为用户集的一个子集，大小为k。广播源将消息m加密后广播给所有用户，使得S中的用户解密得到m，非S中的用户&lt;/font&gt;&lt;font zid="9" color="#000000" size="2" face="Verdana"&gt;无法&lt;/font&gt;&lt;font zid="35" color="#000000" size="2" face="Verdana"&gt;解密&lt;/font&gt;&lt;font zid="10" color="#000000" size="2" face="Verdana"&gt;得到m。其中如何加密解密，并使得密钥和密文长度尽量短，就是广播加密问题。&lt;/font&gt;相当于多把钥匙一把锁，锁可以制定，想让谁能开谁就能开，而且想让谁能开谁才能开。&lt;br zid="11"&gt;&lt;font zid="12" color="#000000" size="2" face="Verdana"&gt;注意到，不可以给每个订阅者单独加密，这样虽然可以把广播加密问题归结为已经解决的点对点加密问题，但是实际中不能接受：应为那样广播源加密的计算开销将随着k的增大而线性增大。&lt;/font&gt;这是广播加密问题和传统的加密问题的区别。&lt;br zid="13"&gt;&lt;font zid="14" color="#000000" size="2" face="Verdana"&gt;广播加密问题的形式化提法：&lt;br zid="15"&gt;通过&lt;/font&gt;&lt;span style="font-family: 宋体; color: black;" zid="247"&gt;&lt;font zid="248" size="2"&gt;&lt;span style="font-family: verdana;" zid="109"&gt;Setup(用户总数 n)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;font zid="405" color="#000000" size="2" face="Verdana"&gt;函数得到一个&lt;/font&gt;&lt;font zid="16" color="#000000" size="2" face="Verdana"&gt;广播源&lt;/font&gt;&lt;font zid="17" color="#000000" size="2" face="Verdana"&gt;的公钥PK，每个用户i的私钥di，i=1,..,n。广播源针对订阅者集合S加密消息m，即执行加密函数Encrypt(&lt;/font&gt;&lt;font zid="78" color="#000000" size="2" face="Verdana"&gt;广播明文m, 订阅者集合S&lt;/font&gt;&lt;font zid="417" color="#000000" size="2" face="Verdana"&gt;, 公钥 PK)得到密文Hdr，通过网络广播&lt;/font&gt;&lt;font zid="18" color="#000000" size="2" face="Verdana"&gt;Hdr&lt;/font&gt;&lt;font zid="19" color="#000000" size="2" face="Verdana"&gt;给所有用户。所有用户都有相同的解密函数&lt;/font&gt;Decrypt(密文Hdr,私钥d)&lt;font zid="418" color="#000000" size="2" face="Verdana"&gt;，&lt;/font&gt;&lt;font zid="20" color="#000000" size="2" face="Verdana"&gt;用户i接收到Hdr后计算Decrypt(Hdr, di)&lt;/font&gt;&lt;font zid="21" color="#000000" size="2" face="Verdana"&gt;，&lt;/font&gt;&lt;font zid="22" color="#000000" size="2" face="Verdana"&gt;Decrypt(Hdr, di)&lt;/font&gt;&lt;font zid="23" color="#000000" size="2" face="Verdana"&gt;=m&lt;/font&gt;&lt;font zid="24" color="#000000" size="2" face="Verdana"&gt;当且仅当i属于S&lt;/font&gt;。注意到，初始化公钥和私钥的算法与订阅者S无关，实际中订阅者会经常变化。我们希望开发出其中Setup、Encrypt、Decrypt的算法，满足一系列安全要求，并且PK、di关于n不太长，给定m后Hdr不太长。&lt;br zid="174"&gt;关于广播正文m的一点注解：实际中广播内容是一段比较长的视频流stream，但是用此非对称加密算法加密stream可能无法满足实时性需要，因此，我们用计算复杂度比较低的某种对称加密算法加密stream，设对称密钥为K，然后用广播加密算法（非对称加密）加密此对称密钥K，然后广播非对称加密后的K和用K对称加密过的stream即可满足实时性的需要。因此我们下面讨论的广播正文m，实际就是这里的对称密钥K，因此，m只需要是某个随机的&lt;font zid="79" color="#000000" size="2" face="Verdana"&gt;整数&lt;/font&gt;即可，与待广播的视频流stream无关。&lt;br zid="25"&gt;&lt;font zid="26" color="#000000" size="2" face="Verdana"&gt;&lt;br zid="27"&gt;2、广播加密问题的若干安全要求：&lt;br zid="28"&gt;防破解：防止非S中的用户通过Hdr得到m。&lt;br zid="30"&gt;盗版追踪：如果S中的某个i将di出卖给非S中的j，如何检测到并确定i的行为。&lt;br zid="32"&gt;防恶意插播：如果另一个非法广播源在广播信道中广播内容，接收端如何识别，也就是如何验证广播源的身份。&lt;span class="ccomment" id="spanNoteText_766392000000004017" zid="152"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="noteClass" id="spanNote_766392000000004017" zid="153"&gt;&lt;/span&gt;&lt;br zid="34"&gt;&lt;/font&gt;&lt;br zid="37"&gt;3、接收端无状态&lt;br zid="38"&gt;[todo]&lt;br zid="39"&gt;&lt;br zid="40"&gt;&lt;span style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);" zid="91"&gt;&lt;font zid="92" color="#000000" size="2" face="Verdana"&gt;&lt;/font&gt;&lt;/span&gt;&lt;font zid="134" size="2"&gt;&lt;span style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);" zid="117"&gt;&lt;span style="font-weight: bold; font-size: 14px; color: rgb(204, 204, 204);" zid="118"&gt;&lt;font zid="119" color="#000000" face="Verdana"&gt;二、 广播加密&lt;/font&gt;&lt;font zid="42" color="#000000" face="Verdana"&gt;算法&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;br zid="43"&gt;1、多项式插值&lt;br zid="48"&gt;&lt;span style="font-family: Verdana; color: black;" zid="57"&gt;&lt;font zid="58" size="2"&gt;91&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: black;" zid="59"&gt;&lt;font zid="60" size="2"&gt;年&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Verdana; color: black;" zid="61"&gt;&lt;font zid="62" size="2"&gt;Berkovits&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: black;" zid="63"&gt;&lt;font zid="64" size="2"&gt;的《&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: Verdana; color: black;" zid="65"&gt;&lt;font zid="66" size="2"&gt;How to broadcast a secret&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: black;" zid="67"&gt;&lt;font zid="68" size="2"&gt;&lt;sup zid="102"&gt;&lt;a class="endnote" en-id="1" href="#en1" name="nen1" style="cursor: help; text-decoration: none; color: inherit;" title="http://www.springerlink.com/index/XXBDHG4QH59RGCH4.pdf" zid="103" contenteditable="false"&gt;1&lt;/a&gt;&lt;/sup&gt;》提出这样一个基于拉格朗日多项式插值的广播加密算法，它利用了这样一个事实：一个n阶多项式能被平面上（横坐标互不相同的）n+1个点确定。&lt;br zid="69"&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: black;" zid="70"&gt;&lt;font zid="71" size="2"&gt;算法构造的&lt;/font&gt;&lt;/span&gt;思路&lt;span style="font-family: 宋体; color: black;" zid="140"&gt;&lt;font zid="141" size="2"&gt;如下&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: verdana; color: black;" zid="245"&gt;&lt;font zid="246" size="2"&gt;（a special but typical case）&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: black;" zid="406"&gt;&lt;font zid="407" size="2"&gt;：&lt;br zid="72"&gt;&lt;span style="font-family: verdana;" zid="408"&gt;Setup(用户总数 n)&lt;/span&gt;&lt;br zid="73"&gt; 随机生成平面上&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; color: black;" zid="74"&gt;&lt;font zid="75" size="2"&gt;横坐标互不相同的&lt;/font&gt;&lt;/span&gt;n个点&lt;img id="latexexpressionimage1" imagesize="120" latexexpression="(x_i, y_i), i = 1,...,n" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651451076_51451076_img2.png&amp;amp;accId=766392000000002007" zid="436"&gt;，分配(xi,yi)作为用户i的私钥di。不妨设所有xi都不为0。&lt;br zid="76"&gt; 不用公钥。&lt;br zid="77"&gt;&lt;font zid="419" color="#000000" size="2" face="Verdana"&gt;Encrypt(广播明文m, 订阅者集合S)，&lt;/font&gt;&lt;font zid="510" color="#000000" size="2" face="Verdana"&gt;&lt;/font&gt;&lt;font zid="80" color="#000000" size="2" face="Verdana"&gt;S的大小为&lt;/font&gt;k&lt;br zid="81"&gt; 计算一个k阶多项式P，过下列k+1个点：(0,m), (xi,yi) ,i属于S&lt;br zid="82"&gt; 然后广播密文Hdr为一个长度为k的串/数组：(xi,yi)，i不属于U，且(xi,yi)在P上，不妨设所有xi都不为0。&lt;br zid="83"&gt; Decrypt(密文Hdr,私钥di)&lt;br zid="84"&gt; 如果用户i属于S，则i知道k+1个在P上的点（k个来自Hdr，还有一个是自己的私钥），从而确定P并能够求出P在0点的值，也就是密文m&lt;br zid="85"&gt; 否则i只知道k个在P上的点，自己的私钥(xi,yi)不在P上，无法求出P在0点的值。&lt;br zid="86"&gt;&lt;br zid="93"&gt;实际加密的时候还要引入j个扰乱的点，可能是为了安全，为了计算方便，作者给出了矩阵描述的等价算法。&lt;span class="ccomment" id="spanNoteText_766392000000004005" zid="96"&gt;&lt;/span&gt;&lt;br zid="95"&gt;&lt;br zid="87"&gt;&lt;br zid="44"&gt;2、子集覆盖&lt;br zid="45"&gt;3、配对&lt;span style="font-family: 宋体; color: black;" zid="249"&gt;&lt;font zid="250" size="2"&gt;&lt;br zid="446"&gt;05年&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: Verdana; color: black;" zid="252" lang="EN-US"&gt;Boneh等人的《&lt;/span&gt;Collusion Resistant Broadcast Encryption With Short Ciphertexts and Private Keys&lt;sup zid="269"&gt;&lt;a class="endnote" en-id="2" href="#en2" name="nen2" style="cursor: help; text-decoration: none; color: inherit;" title="http://crypto.stanford.edu/~dabo/papers/broadcast.pdf" zid="270" contenteditable="false"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;span style="font-size: 10pt; font-family: Verdana; color: black;" zid="253" lang="EN-US"&gt;》利用配对技术构造了这样一个广播加密算法，它利用了双线性DH假设&lt;/span&gt;。具体来说，给定误差限&lt;img id="latexexpressionimage2" imagesize="120" latexexpression="\epsilon " src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651090944_51090944_img2.png&amp;amp;accId=766392000000002007" zid="362"&gt;，给定p阶双线性群G和它上面的双线性映射e（相关定义和性质见附录），若h,g随机取值于G中&lt;span class="ccomment" id="spanNoteText_766392000000005003" zid="279"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="noteClass" id="spanNote_766392000000005003" zid="280"&gt;&lt;/span&gt;，&lt;img id="latexexpressionimage3" imagesize="120" latexexpression="\alpha" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228650824271_50824271_img2.png&amp;amp;accId=766392000000002007" zid="325"&gt;随机取值于&lt;img id="latexexpressionimage4" imagesize="120" latexexpression="\mathbb{Z}_p" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228650477474_50477474_img2.png&amp;amp;accId=766392000000002007" zid="297"&gt;中，则不存在这样一个（确定性的？且多项式时间的？）算法A使得&lt;br zid="306"&gt;&lt;img id="latexexpressionimage5" imagesize="120" latexexpression="P\left(\mathcal{A}(h,g,g_1,...,g_l,g_{l+2},...,g_{2l})=e(h,g_{l+1}) \right) \geqslant  \epsilon " src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651713392_51713392_img2.png&amp;amp;accId=766392000000002007" zid="471"&gt;，其中&lt;img id="latexexpressionimage6" imagesize="120" latexexpression="g_i=g^{\alpha^i}" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228650803970_50803970_img2.png&amp;amp;accId=766392000000002007" zid="316"&gt;&lt;br zid="255"&gt; 注意到，如果能在G中从g和&lt;img id="latexexpressionimage7" imagesize="120" latexexpression="g_1" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651036635_51036635_img2.png&amp;amp;accId=766392000000002007" zid="344"&gt;计算出&lt;img id="latexexpressionimage8" imagesize="120" latexexpression="\alpha" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228650824271_50824271_img2.png&amp;amp;accId=766392000000002007" zid="326"&gt;，则显然可计算出&lt;img id="latexexpressionimage9" imagesize="120" latexexpression="e(h,g_{l+1})=e(h^\alpha,g_l)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228650962409_50962409_img2.png&amp;amp;accId=766392000000002007" zid="335"&gt;因为其中&lt;img id="latexexpressionimage10" imagesize="120" latexexpression="h,\alpha,g_l" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651002811_51002811_img2.png&amp;amp;accId=766392000000002007" zid="345"&gt;已知。在G中从g和&lt;img id="latexexpressionimage11" imagesize="120" latexexpression="g_1" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651036635_51036635_img2.png&amp;amp;accId=766392000000002007" zid="387"&gt;计算出&lt;img id="latexexpressionimage12" imagesize="120" latexexpression="\alpha" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228650824271_50824271_img2.png&amp;amp;accId=766392000000002007" zid="388"&gt;就是经典的离散对数计算，因此&lt;span style="font-size: 10pt; font-family: Verdana; color: black;" zid="256" lang="EN-US"&gt;双线性DH假设比离散对数假设更强，如果离散对数多项式可解则双线性DH假设不再成立！（介于二者难度之间的还有一个DH假设，见附录）&lt;br zid="257"&gt; 算法构造的思路如下&lt;/span&gt;&lt;span style="font-family: 宋体; color: black;" zid="258"&gt;&lt;font zid="259" size="2"&gt;（a special but typical case）:&lt;/font&gt;&lt;/span&gt;&lt;br zid="260"&gt;&lt;span style="font-family: 宋体; color: black;" zid="261"&gt;&lt;font zid="262" size="2"&gt;&lt;span style="font-family: Verdana;" zid="263"&gt;Setup(用户总数 n)&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;br zid="490"&gt;&lt;img id="latexexpressionimage13" imagesize="120" latexexpression="\gamma" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651901347_51901347_img2.png&amp;amp;accId=766392000000002007" zid="500"&gt;随机取值于&lt;img id="latexexpressionimage14" imagesize="120" latexexpression="\mathbb{Z}_p" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228650477474_50477474_img2.png&amp;amp;accId=766392000000002007" zid="491"&gt;中，令&lt;img id="latexexpressionimage15" imagesize="120" latexexpression="v = g^\gamma " src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651940270_51940270_img2.png&amp;amp;accId=766392000000002007" zid="501"&gt;&lt;br zid="46"&gt;公钥PK：&lt;img id="latexexpressionimage16" imagesize="120" latexexpression="(v,g,g_1,...,g_n,g_{n+2},...,g_{2n})" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651948741_51948741_img2.png&amp;amp;accId=766392000000002007" zid="511"&gt;&lt;br zid="481"&gt;私钥di：&lt;img id="latexexpressionimage17" imagesize="120" latexexpression="g_i^ \gamma" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228651995843_51995843_img2.png&amp;amp;accId=766392000000002007" zid="512"&gt;&lt;br zid="513"&gt;&lt;font zid="514" color="#000000" size="2" face="Verdana"&gt;Encrypt(广播明文m, 订阅者集合S)&lt;/font&gt;&lt;br zid="531"&gt;t随机取值于&lt;img id="latexexpressionimage18" imagesize="120" latexexpression="\mathbb{Z}_p" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228650477474_50477474_img2.png&amp;amp;accId=766392000000002007" zid="540"&gt;中，不妨设&lt;img id="latexexpressionimage19" imagesize="120" latexexpression="m=e(g_{n+1}, g)^t" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228652137556_52137556_img2.png&amp;amp;accId=766392000000002007" zid="549"&gt;，广播密文为一个二元数组Hdr=(C0,C1)，其中&lt;br zid="558"&gt;&lt;img id="latexexpressionimage20" imagesize="120" latexexpression="C_0=g^t" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228652230566_52230566_img2.png&amp;amp;accId=766392000000002007" zid="559"&gt;&lt;br zid="560"&gt;&lt;img id="latexexpressionimage21" imagesize="120" latexexpression="C_1=(v \prod_{j \in S}g_{n+1-j})^t" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228652285550_52285550_img2.png&amp;amp;accId=766392000000002007" zid="569"&gt;&lt;br zid="570"&gt;Decrypt(密文Hdr,私钥di)&lt;br zid="579"&gt;&lt;img id="latexexpressionimage22" imagesize="120" latexexpression="m=e(g_i,C_1) / e(d_i \prod_{j \in S,j \neq i}g_{n+1-j+i}, C_0)" src="http://writer.zoho.com:80/ImageDisplay.im?name=1228652532621_52532621_img2.png&amp;amp;accId=766392000000002007" zid="596"&gt;&lt;span class="ccomment" id="spanNoteText_766392000000005015" zid="640"&gt;&lt;/span&gt;&lt;br zid="437"&gt;&lt;br zid="47"&gt;三、研究者&lt;br zid="49"&gt;1、&lt;span style="font-size: 10pt; font-family: Verdana; color: black;" zid="50" lang="EN-US"&gt;Naor&lt;/span&gt;&lt;br zid="51"&gt;2、&lt;span style="font-size: 10pt; font-family: Verdana; color: black;" zid="52" lang="EN-US"&gt;Boneh&lt;/span&gt;&lt;br zid="53"&gt;四、应用&lt;br zid="54"&gt;1、DRM&lt;br zid="55"&gt;2、CA for IPTV&lt;br zid="56"&gt;附、Mathematical Background&lt;br zid="650"&gt;&lt;br zid="1"&gt;&lt;div zid="667" class="encontainer" en-type="1" en-start="1" id="endnotediv"&gt;&lt;hr zid="668" align="left" color="lightgrey" size="1" width="200"&gt;&lt;p zid="669"&gt;&lt;sup zid="670"&gt;&lt;a zid="671" name="en1" href="#nen1" en-id="1" class="efnote"&gt;1&amp;nbsp;&lt;/a&gt;&lt;/sup&gt;http://www.springerlink.com/index/XXBDHG4QH59RGCH4.pdf&lt;/p&gt;&lt;p zid="672"&gt;&lt;sup zid="673"&gt;&lt;a zid="674" name="en2" href="#nen2" en-id="2" class="efnote"&gt;2&amp;nbsp;&lt;/a&gt;&lt;/sup&gt;http://crypto.stanford.edu/~dabo/papers/broadcast.pdf&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8532043836625598378-6259382241781520208?l=todwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://todwang.blogspot.com/feeds/6259382241781520208/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8532043836625598378&amp;postID=6259382241781520208' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6259382241781520208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8532043836625598378/posts/default/6259382241781520208'/><link rel='alternate' type='text/html' href='http://todwang.blogspot.com/2009/01/blog-post_2575.html' title='广播加密算法调研报告'/><author><name>王元涛</name><uri>http://www.blogger.com/profile/16853044940928636417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8532043836625598378.post-7650244069421368111</id><published>2009-01-09T14:14:00.001+08:00</published><updated>2009-01-09T14:14:25.966+08:00</updated><title type='text'>LLE Algorithm and Implement in Matlab</title><content type='html'>&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CWANGYU%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;style&gt; &amp;lt;!--  /* Font Definitions */  @font-face 	{font-family:宋体; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-alt:SimSun; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;} @font-face 	{font-family:&amp;quot;\@宋体&amp;quot;; 	panose-1:2 1 6 0 3 1 1 1 1 1; 	mso-font-charset:134; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:3 135135232 16 0 262145 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:&amp;quot;&amp;quot;; 	margin:0cm; 	margin-bottom:.0001pt; 	text-align:justify; 	text-justify:inter-ideograph; 	mso-pagination:none; 	font-size:10.5pt; 	mso-bidi-font-size:12.0pt; 	font-family:&amp;quot;Times New Roman&amp;quot;; 	mso-fareast-font-family:宋体; 	mso-font-kerning:1.0pt;}  /* Page Definitions */  @page 	{mso-page-border-surround-header:no; 	mso-page-border-surround-footer:no;} @page Section1 	{size:595.3pt 841.9pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:42.55pt; 	mso-footer-margin:49.6pt; 	mso-paper-source:0; 	layout-grid:15.6pt;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:264926265; 	mso-list-type:hybrid; 	mso-list-template-ids:-690743302 521678194 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 	{mso-level-text:%1、; 	mso-level-tab-stop:18.0pt; 	mso-level-number-position:left; 	margin-left:18.0pt; 	text-indent:-18.0pt;} @list l1 	{mso-list-id:853614211; 	mso-list-type:hybrid; 	mso-list-template-ids:-341925000 235992542 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 	{mso-level-text:%1、; 	mso-level-tab-stop:18.0pt; 	mso-level-number-position:left; 	margin-left:18.0pt; 	text-indent:-18.0pt;} @list l2 	{mso-list-id:1514301270; 	mso-list-type:hybrid; 	mso-list-template-ids:-1522906790 849139292 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l2:level1 	{mso-level-number-format:alpha-lower; 	mso-level-text:&amp;quot;%1\)&amp;quot;; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&amp;gt; &lt;/style&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体;"&gt;《数学建模案例分析》的大作业用&lt;/span&gt;&lt;span lang="EN-US"&gt;LLE&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;算法，但是原作者网站上提供的源代码有些问题，主要是因为不同版本的&lt;/span&gt;&lt;span lang="EN-US"&gt;Matlab&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，内置函数&lt;/span&gt;&lt;span lang="EN-US"&gt;eigs&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;返回的特征向量的顺序不同：老版本对应的特征值是升序，而新版本的是降序。&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体;"&gt;在这个问题中，&lt;/span&gt;&lt;span lang="EN-US"&gt;0&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;总是特征值，对应的特征向量为&lt;/span&gt;&lt;span lang="EN-US"&gt;(1,1,…,1)&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，这不是我们要的（如果把它放进来，则用它给&lt;/span&gt;&lt;span lang="EN-US"&gt;swiss_roll&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;数据集降维总得到一条粗直线。）&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体;"&gt;如果你用的是&lt;/span&gt;&lt;span lang="EN-US"&gt;Matlab6.5&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，则应该把&lt;/span&gt;&lt;span lang="EN-US"&gt;line 65&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Y = Y(:,2:d+1)&amp;#39;*sqrt(N);&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体;"&gt;改为&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Y = Y(:,n-d:n-1)&amp;#39;*sqrt(N);&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体;"&gt;打了这个补丁之后，&lt;/span&gt;&lt;span lang="EN-US"&gt;lle.m&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;就可以正常工作了！&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体;"&gt;我认为&lt;/span&gt;&lt;span lang="EN-US"&gt;LLE&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;算法很漂亮，下面过一下它的设计与实现&lt;/span&gt;&lt;span lang="EN-US"&gt;~&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;原作者的&lt;/span&gt;&lt;span lang="EN-US"&gt;paper&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;用&lt;/span&gt;&lt;span lang="EN-US"&gt;lle&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;做关键词即可在&lt;/span&gt;&lt;span lang="EN-US"&gt;Google&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;上搜到。&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="font-family: 宋体;"&gt;问题的提法：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体;"&gt;给&lt;/span&gt;&lt;span lang="EN-US"&gt;N&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;个&lt;/span&gt;&lt;span lang="EN-US"&gt;D&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;维列向量&lt;/span&gt;&lt;span lang="EN-US"&gt;X1,…,XN&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，希望通过映射得到&lt;/span&gt;&lt;span lang="EN-US"&gt;N&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;个&lt;/span&gt;&lt;span lang="EN-US"&gt;d(&amp;lt;D)&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;维列向量&lt;/span&gt;&lt;span lang="EN-US"&gt;Y1,…,YN&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，要求保持邻域关系：原来离的近的点，映射过来也近。&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;LLE&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;算法的思想：如果原像&lt;/span&gt;&lt;span lang="EN-US"&gt;Xi&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;能够表示成他邻域内点的线性组合，则像&lt;/span&gt;&lt;span lang="EN-US"&gt;Yi&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;也应该用相同的组合系数表示成对应像点的线性组合。即：局部线性嵌入。&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="font-family: 宋体;"&gt;算法骨架&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;1、&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;求近邻：计算每个&lt;/span&gt;&lt;span lang="EN-US"&gt;Xi&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;的邻居集合&lt;/span&gt;&lt;span lang="EN-US"&gt;Si&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span style="font-family: 宋体;"&gt;直接用&lt;/span&gt;&lt;span lang="EN-US"&gt;2&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;范数下的&lt;/span&gt;&lt;span lang="EN-US"&gt;K&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;近邻，其中&lt;/span&gt;&lt;span lang="EN-US"&gt;K&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;作为算法的参数&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt;2、&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;求权：改变组合系数&lt;/span&gt;&lt;span lang="EN-US"&gt;W&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;，极小化局部线性表出原像的方差&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 18pt;"&gt;&lt;span lang="EN-US"&gt;W&lt;/span&gt;&lt;span style="font-family: 宋体;
