﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>f(Program,Poet)=Programet &#187; 思维</title>
	<atom:link href="http://blog.programet.org/tag/%e6%80%9d%e7%bb%b4/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.programet.org</link>
	<description>f(诗,程序)=诗序=思绪 &#124; 记载我们自己的生活</description>
	<lastBuildDate>Tue, 07 Feb 2012 16:00:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>怎样才算是“显然”</title>
		<link>http://blog.programet.org/2011/03/%e6%80%8e%e6%a0%b7%e6%89%8d%e7%ae%97%e6%98%af%e2%80%9c%e6%98%be%e7%84%b6%e2%80%9d.html</link>
		<comments>http://blog.programet.org/2011/03/%e6%80%8e%e6%a0%b7%e6%89%8d%e7%ae%97%e6%98%af%e2%80%9c%e6%98%be%e7%84%b6%e2%80%9d.html#comments</comments>
		<pubDate>Sun, 27 Mar 2011 18:23:59 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[显然]]></category>
		<category><![CDATA[证明]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=3990</guid>
		<description><![CDATA[曾经，“显然”两个字让我非常讨厌——因为答案里出现这两个字的地方，往往就是整个证明中最拐弯抹角难以捉摸到的地方。有时我也会用这个词尝试不负责任地绕过自己其实证不出来的关键部分。不过，我在以前学数学分析以及最近学实变函数的过程中对它有了进一步的了解。 数学分析是一个通过严格的逻辑关系建立起来的理论体系，其中的每一个定理都有着牢固的理论基础。而数学分析研究的内容比较特别，它很多时候着重于分析中最最基础的问题。比如“单调有界数列必有极限”或者是自然数的阿基米德性，我们看到这样的问题第一反应肯定是：显然嘛！确实，这样的问题之所以让我们觉得“显然”，就是因为它阐述的性质非常容易被我们接受。但是这些命题的正确性真的都直白到了无需证明即可默认为真的地步了？其实未必。在实变函数中也碰到了不少这样的例子，上星期的实变函数课上我和TX还就某一个问题是否“是显然的所以对其的证明没什么意义”进行了一番讨论。 声称一个问题是“显然”的，必须要负起全部的责任，因为只要你没法严格地证明出来，那么便有可能被对手翻盘。如果没有魏尔斯特拉斯大神告诉你，那么你敢去想象一个“处处连续处处不可微”的函数么——这可是几代大数学家都想不到的事情。如果不知道巴拿赫-塔斯基定理，“一个头变成两个大”也不过是句嘲讽的话。还有更多的例子，一条直线上的点数和平面上的一样多，康托三分点集占有的区间长度为0，其基数却也是连续统……也许会有人说，分析这种东西都是抽象的，不像几何，我对着这个眼见为实的东西说一句显然，这总没人黑了吧——君不见，非欧几何天上来！当年欧几里得祭出第五公设，大家都认为这是显然的，虽然这个“显然性”隐隐约约有一些只可意会的东西搅杂在里面，于是到了近代，非欧几何横空出世，大家恍然大悟，原来第五公设这样的公理仍然并不“显然”。 其实我们说一个命题“显然”，真正的意思是指这个命题在直觉上很容易被大家接受，即不容易一下子找到漏洞或反例推翻它。通过前文可以了解，这个直觉上的正确性和命题的正确性其实是没什么关系的。一些很基础的定理，譬如“皮亚诺公理下的自然数系统满足加法交换律”这样的句子确实是直觉上可接受，但是并不是一眼就能看出正确性的命题——打开一本分析类教材的辅助练习，你便能找到很多类似的命题，一个个极尽隐藏特例之能想方设法骗到你。所以越是直觉上能够接受的东西，我们反而越应该对其保持一种严谨的紧张感，要么从定义、公理入手有条不紊地证明它，要么一针见血揭开它的伤疤。 而至于那些我们咬牙切齿的高中数学习题答案中的“显然”，只不过是出题老师在向我们张牙舞爪而已：这个推理从他的直觉来说不难接受，所以显然咯，你觉得直觉难以接受只是水平所限耳╮(╯_╰)╭当然，这时候保持怀疑是正确的，因为老师的直觉也可能犯错，不过更多情况下他并不是写不出这个证明，而是嫌写出的证明太繁琐，脑子里一下子就把证明的步骤列出来了，就索性用“显然”来恶心你一下。 仔细想想，这有点类似一个语言学上的问题，但是常常在数学上备受争议。如果大家都能够意识到直觉在数学逻辑上的地位之低下，那么也就不会随口而不屑地说“显然”了——当然，装B党除外！ 本文由 严酷的魔王 创作，转载或引用前请联系我们。相关文章： 趣题：“块移动”排序 无穷中的二分（一） 无穷中的二分（二）
相关文章：<ol>
<li><a href='http://blog.programet.org/2008/09/blog-post_6768.html' rel='bookmark' title='趣题：“块移动”排序'>趣题：“块移动”排序</a></li>
<li><a href='http://blog.programet.org/2009/10/%e6%97%a0%e7%a9%b7%e4%b8%ad%e7%9a%84%e4%ba%8c%e5%88%86%ef%bc%88%e4%b8%80%ef%bc%89.html' rel='bookmark' title='无穷中的二分（一）'>无穷中的二分（一）</a></li>
<li><a href='http://blog.programet.org/2009/10/%e6%97%a0%e7%a9%b7%e4%b8%ad%e7%9a%84%e4%ba%8c%e5%88%86%ef%bc%88%e4%ba%8c%ef%bc%89.html' rel='bookmark' title='无穷中的二分（二）'>无穷中的二分（二）</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>曾经，“显然”两个字让我非常讨厌——因为答案里出现这两个字的地方，往往就是整个证明中最拐弯抹角难以捉摸到的地方。有时我也会用这个词尝试不负责任地绕过自己其实证不出来的关键部分。不过，我在以前学数学分析以及最近学实变函数的过程中对它有了进一步的了解。</p>
<p><span id="more-3990"></span></p>
<p>数学分析是一个通过严格的逻辑关系建立起来的理论体系，其中的每一个定理都有着牢固的理论基础。而数学分析研究的内容比较特别，它很多时候着重于分析中最最基础的问题。比如“单调有界数列必有极限”或者是自然数的阿基米德性，我们看到这样的问题第一反应肯定是：显然嘛！确实，这样的问题之所以让我们觉得“显然”，就是因为它阐述的性质非常容易被我们接受。但是这些命题的正确性真的都直白到了无需证明即可默认为真的地步了？其实未必。在实变函数中也碰到了不少这样的例子，上星期的实变函数课上我和TX还就某一个问题是否“是显然的所以对其的证明没什么意义”进行了一番讨论。</p>
<p>声称一个问题是“显然”的，必须要负起全部的责任，因为只要你没法严格地证明出来，那么便有可能被对手翻盘。如果没有魏尔斯特拉斯大神告诉你，那么你敢去想象一个<a href="http://zh.wikipedia.org/wiki/%E9%AD%8F%E5%B0%94%E6%96%AF%E7%89%B9%E6%8B%89%E6%96%AF%E5%87%BD%E6%95%B0">“处处连续处处不可微”的函数</a>么——这可是几代大数学家都想不到的事情。如果不知道<a href="http://zh.wikipedia.org/wiki/%E5%B7%B4%E6%8B%BF%E8%B5%AB%EF%BC%8D%E5%A1%94%E6%96%AF%E5%9F%BA%E5%AE%9A%E7%90%86">巴拿赫-塔斯基定理</a>，“一个头变成两个大”也不过是句嘲讽的话。还有更多的例子，一条直线上的点数和平面上的一样多，康托三分点集占有的区间长度为0，其基数却也是连续统……也许会有人说，分析这种东西都是抽象的，不像几何，我对着这个眼见为实的东西说一句显然，这总没人黑了吧——君不见，非欧几何天上来！当年欧几里得祭出第五公设，大家都认为这是显然的，虽然这个“显然性”隐隐约约有一些只可意会的东西搅杂在里面，于是到了近代，非欧几何横空出世，大家恍然大悟，原来第五公设这样的公理仍然并不“显然”。</p>
<p>其实我们说一个命题“显然”，真正的意思是指这个命题<strong>在直觉上</strong>很容易被大家接受，即不容易一下子找到漏洞或反例推翻它。通过前文可以了解，这个直觉上的正确性和命题的正确性其实是没什么关系的。一些很基础的定理，譬如<a href="http://blog.programet.org/2009/05/blog-post-3.html">“皮亚诺公理下的自然数系统满足加法交换律”</a>这样的句子确实是直觉上可接受，但是并不是一眼就能看出正确性的命题——打开一本分析类教材的辅助练习，你便能找到很多类似的命题，一个个极尽隐藏特例之能想方设法骗到你。所以越是直觉上能够接受的东西，我们反而越应该对其保持一种严谨的紧张感，要么从定义、公理入手有条不紊地证明它，要么一针见血揭开它的伤疤。</p>
<p>而至于那些我们咬牙切齿的高中数学习题答案中的“显然”，只不过是出题老师在向我们张牙舞爪而已：这个推理从他的直觉来说不难接受，所以显然咯，你觉得直觉难以接受只是水平所限耳╮(╯_╰)╭当然，这时候保持怀疑是正确的，因为老师的直觉也可能犯错，不过更多情况下他并不是写不出这个证明，而是嫌写出的证明太繁琐，脑子里一下子就把证明的步骤列出来了，就索性用“显然”来恶心你一下。</p>
<p>仔细想想，这有点类似一个语言学上的问题，但是常常在数学上备受争议。如果大家都能够意识到直觉在数学逻辑上的地位之低下，那么也就不会随口而不屑地说“显然”了——当然，装B党除外！</p>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2008/09/blog-post_6768.html' rel='bookmark' title='趣题：“块移动”排序'>趣题：“块移动”排序</a></li>
<li><a href='http://blog.programet.org/2009/10/%e6%97%a0%e7%a9%b7%e4%b8%ad%e7%9a%84%e4%ba%8c%e5%88%86%ef%bc%88%e4%b8%80%ef%bc%89.html' rel='bookmark' title='无穷中的二分（一）'>无穷中的二分（一）</a></li>
<li><a href='http://blog.programet.org/2009/10/%e6%97%a0%e7%a9%b7%e4%b8%ad%e7%9a%84%e4%ba%8c%e5%88%86%ef%bc%88%e4%ba%8c%ef%bc%89.html' rel='bookmark' title='无穷中的二分（二）'>无穷中的二分（二）</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2011/03/%e6%80%8e%e6%a0%b7%e6%89%8d%e7%ae%97%e6%98%af%e2%80%9c%e6%98%be%e7%84%b6%e2%80%9d.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>只有一盏灯怎么传递信息——囚犯点灯问题</title>
		<link>http://blog.programet.org/2011/01/%e5%8f%aa%e6%9c%89%e4%b8%80%e7%9b%8f%e7%81%af%e6%80%8e%e4%b9%88%e4%bc%a0%e9%80%92%e4%bf%a1%e6%81%af%e2%80%94%e2%80%94%e5%9b%9a%e7%8a%af%e7%82%b9%e7%81%af%e9%97%ae%e9%a2%98.html</link>
		<comments>http://blog.programet.org/2011/01/%e5%8f%aa%e6%9c%89%e4%b8%80%e7%9b%8f%e7%81%af%e6%80%8e%e4%b9%88%e4%bc%a0%e9%80%92%e4%bf%a1%e6%81%af%e2%80%94%e2%80%94%e5%9b%9a%e7%8a%af%e7%82%b9%e7%81%af%e9%97%ae%e9%a2%98.html#comments</comments>
		<pubDate>Mon, 24 Jan 2011 15:55:23 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[科普]]></category>
		<category><![CDATA[博弈]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[策略]]></category>
		<category><![CDATA[趣题]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=3664</guid>
		<description><![CDATA[有一个监狱里面关押了六个囚犯，一天监狱长对他们说：我给你们一个出狱的机会，不过这要看你们的表现如何了。 “我每天晚上会抛一个骰子，那个骰子抛到几点就会让几号囚犯出来有一个小时放风的时间。走廊上有一盏灯，每个囚犯都能在出来放风的时候看见它，还能随意操作那盏灯的开关，决定它亮不亮。让你们全部都得到释放的办法就是：某一个囚犯在某次放风的时候和我说自己认为所有的囚犯都已经放风过了——如果他说对了，那么你们六人都能得到释放，不然的话，你们就要被终身监禁。” 他们有一段时间进行商量，试图想出一个策略来进行交流，然后就被关押到各自的牢房里面，期望从监狱长的手中夺到自由。 如果你是一个囚犯，你有没有策略能够保证他们能够被释放呢？ 在揭开谜底之前，不妨慢慢分析一下这个问题——其实就是一些提示啦。首先要注意到只有一盏灯，而且开关灯的过程别人看不见。只有0和1两种状态显然不能记录六个人（后面会发现其实这个数字只是方便配合抛骰子的选择方式罢了）那么多的信息量，那么每个人除了这一盏灯，还有其他的信息来源么？ 其实是有的，那就是上一次出来放风（如果有的话），上上次出来，上上上次出来。。。。的时候，那个灯泡的状态。不得不说，时间在这里起了很关键的作用，整个过程积累的信息往往会很有用，然而要想让历史信息有用，那么就只能约定一个有用的规则，每个人都能利用到。 其次，注意到只需要一个人去和监狱长说，同时注意到只要监狱长是按照游戏规则进行真正的随机抽人，那么每个人都会有机会出去放风，所以说大家肯定有机会被放出去。同时也要想到：去和监狱长说的人一个就够，为什么我们不规定某一个人去说呢？因为每个人都有机会出去放风，那么当每个人都出去放过风之后，那个被确定为通知者的人也有机会被放风——此时他已经通过某种方式得知了所有人都能被放出去，信心满满。所以这样的方法不是不可能的。 于是通过上面的分析，可以得到这样一个方案： 约定第一个出去放风的人是通知者——显然对这个身份的理解不会有误。接着便是一个长时间的通过对概率的信任而得到的策略。第一个人将灯泡点亮。从第二次开始，每一个出去放风并且还没操作过灯泡的人如果发现灯泡是亮着的，就将它关掉——这时他便算是操作过灯泡的人了。通知者以后某时肯定会有机会出去放风，如果他发现灯泡是灭的，就在计数器上加一，再将灯泡打开。等到他第5次发现灯泡熄灭后，就可以去向监狱长汇报了。 这个方法其实可以适用于任意多人的情况——只要你假定监狱长没有邪恶地作弊，而且时间足够长。 这个方法一个显而易见的弊端就是无法在最短的时间里去报告，也就是说第六个出来放风的人看着灯泡便能知道自己是最后一个出来放风的人。但是在人数任意多的一般情况下，只有一个灯泡的话是不可能做到这点的，两个灯泡也不能——至少要三个灯泡才能做到。这是《趣话概率》上面提到的，我暂时还没想到三个灯泡的解法，欢迎各种讨论~ 本文由 严酷的魔王 创作，转载或引用前请联系我们。相关文章： 趣题：“块移动”排序 拍卖，碰到鸡贼的买家怎么办？ “块移动”问题解答
相关文章：<ol>
<li><a href='http://blog.programet.org/2008/09/blog-post_6768.html' rel='bookmark' title='趣题：“块移动”排序'>趣题：“块移动”排序</a></li>
<li><a href='http://blog.programet.org/2011/05/%e6%8b%8d%e5%8d%96%ef%bc%8c%e7%a2%b0%e5%88%b0%e9%b8%a1%e8%b4%bc%e7%9a%84%e4%b9%b0%e5%ae%b6%e6%80%8e%e4%b9%88%e5%8a%9e%ef%bc%9f.html' rel='bookmark' title='拍卖，碰到鸡贼的买家怎么办？'>拍卖，碰到鸡贼的买家怎么办？</a></li>
<li><a href='http://blog.programet.org/2008/10/blog-post_02-2.html' rel='bookmark' title='“块移动”问题解答'>“块移动”问题解答</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>有一个监狱里面关押了六个囚犯，一天监狱长对他们说：我给你们一个出狱的机会，不过这要看你们的表现如何了。<span id="more-3664"></span></p>
<blockquote><p>“我每天晚上会抛一个骰子，那个骰子抛到几点就会让几号囚犯出来有一个小时放风的时间。走廊上有一盏灯，每个囚犯都能在出来放风的时候看见它，还能随意操作那盏灯的开关，决定它亮不亮。让你们全部都得到释放的办法就是：某一个囚犯在某次放风的时候和我说自己认为所有的囚犯都已经放风过了——如果他说对了，那么你们六人都能得到释放，不然的话，你们就要被终身监禁。”</p></blockquote>
<p>他们有一段时间进行商量，试图想出一个策略来进行交流，然后就被关押到各自的牢房里面，期望从监狱长的手中夺到自由。</p>
<p>如果你是一个囚犯，你有没有策略能够保证他们能够被释放呢？</p>
<p>在揭开谜底之前，不妨慢慢分析一下这个问题——其实就是一些提示啦。首先要注意到只有一盏灯，而且开关灯的过程别人看不见。只有0和1两种状态显然不能记录六个人（后面会发现其实这个数字只是方便配合抛骰子的选择方式罢了）那么多的信息量，那么每个人除了这一盏灯，还有其他的信息来源么？</p>
<p>其实是有的，那就是上一次出来放风（如果有的话），上上次出来，上上上次出来。。。。的时候，那个灯泡的状态。不得不说，时间在这里起了很关键的作用，整个过程积累的信息往往会很有用，然而要想让历史信息有用，那么就只能约定一个有用的规则，每个人都能利用到。</p>
<p>其次，注意到只需要一个人去和监狱长说，同时注意到只要监狱长是按照游戏规则进行真正的随机抽人，那么每个人都会有机会出去放风，所以说大家肯定有机会被放出去。同时也要想到：去和监狱长说的人一个就够，为什么我们不规定某一个人去说呢？因为每个人都有机会出去放风，那么当每个人都出去放过风之后，那个被确定为通知者的人也有机会被放风——此时他已经通过某种方式得知了所有人都能被放出去，信心满满。所以这样的方法不是不可能的。</p>
<p><strong>于是通过上面的分析，可以得到这样一个方案：</strong></p>
<blockquote><p>约定第一个出去放风的人是通知者——显然对这个身份的理解不会有误。接着便是一个长时间的通过对概率的信任而得到的策略。第一个人将灯泡点亮。从第二次开始，每一个<strong>出去放风并且还没操作过灯泡</strong>的人如果发现灯泡是亮着的，就将它关掉——这时他便算是操作过灯泡的人了。通知者以后某时肯定会有机会出去放风，如果他发现灯泡是灭的，就在计数器上加一，再将灯泡打开。等到他第5次发现灯泡熄灭后，就可以去向监狱长汇报了。</p></blockquote>
<p>这个方法其实可以适用于任意多人的情况——只要你假定监狱长没有邪恶地作弊，而且时间足够长。</p>
<p>这个方法一个显而易见的弊端就是无法在最短的时间里去报告，也就是说第六个出来放风的人看着灯泡便能知道自己是最后一个出来放风的人。但是在人数任意多的一般情况下，只有一个灯泡的话是不可能做到这点的，两个灯泡也不能——至少要三个灯泡才能做到。这是<a href="http://book.douban.com/subject/3522665/">《趣话概率》</a>上面提到的，我暂时还没想到三个灯泡的解法，欢迎各种讨论~</p>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2008/09/blog-post_6768.html' rel='bookmark' title='趣题：“块移动”排序'>趣题：“块移动”排序</a></li>
<li><a href='http://blog.programet.org/2011/05/%e6%8b%8d%e5%8d%96%ef%bc%8c%e7%a2%b0%e5%88%b0%e9%b8%a1%e8%b4%bc%e7%9a%84%e4%b9%b0%e5%ae%b6%e6%80%8e%e4%b9%88%e5%8a%9e%ef%bc%9f.html' rel='bookmark' title='拍卖，碰到鸡贼的买家怎么办？'>拍卖，碰到鸡贼的买家怎么办？</a></li>
<li><a href='http://blog.programet.org/2008/10/blog-post_02-2.html' rel='bookmark' title='“块移动”问题解答'>“块移动”问题解答</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2011/01/%e5%8f%aa%e6%9c%89%e4%b8%80%e7%9b%8f%e7%81%af%e6%80%8e%e4%b9%88%e4%bc%a0%e9%80%92%e4%bf%a1%e6%81%af%e2%80%94%e2%80%94%e5%9b%9a%e7%8a%af%e7%82%b9%e7%81%af%e9%97%ae%e9%a2%98.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>统计与推理(3)：KTV里的骰子游戏</title>
		<link>http://blog.programet.org/2010/08/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%863%ef%bc%9aktv%e9%87%8c%e7%9a%84%e9%aa%b0%e5%ad%90%e6%b8%b8%e6%88%8f.html</link>
		<comments>http://blog.programet.org/2010/08/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%863%ef%bc%9aktv%e9%87%8c%e7%9a%84%e9%aa%b0%e5%ad%90%e6%b8%b8%e6%88%8f.html#comments</comments>
		<pubDate>Wed, 04 Aug 2010 19:03:35 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[应用数学]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[科普]]></category>
		<category><![CDATA[非严肃]]></category>
		<category><![CDATA[KTV]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[概率]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[统计学]]></category>
		<category><![CDATA[酒精]]></category>
		<category><![CDATA[骰子]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=3026</guid>
		<description><![CDATA[不知道大家在KTV除了唱歌还会玩些什么呢？话筒只有两三个，但是人却有十多只，应该有很多人玩三国杀、UNO之类的桌游，不过我想也会有些人玩骰子喝酒的吧。至少在我的朋友圈里面，这些都是KTV里面的主要活动。三国杀什么的我今天就不讨论了，让我琢磨了一番的是那个骰子的小游戏。可能大家玩的规则大同小异，我先向没玩过的读者叙述一下最主要的游戏规则。 一般这个游戏在2~10人之间依次进行（理论上说没有人数的上限，但是我最多好像也没有和超过10人玩这个游戏）。每个人手中都有相同数量的骰子，一般是4~6个，开始之前摇一摇~每个人只能看见自己的骰子点数。接着从某一个人开始——一般是上一局输了的人，第一个人要做的就是叫点数，格式是“X个Y”，意思就是你认为在所有玩家的骰子中至少有X个点数为Y的骰子，比如有人叫“6个3”，那么就是说他相信在这些玩家手中至少有6个骰子滚出了3点，其中X不能小于玩家数。每一个玩家叫完点就轮到下一个，此时下一个玩家有两种选择：继续叫点数或者是选择“开”。继续叫点数的规则如下：X不能小于上家的X；如果X比上家的大，那么Y只要是1~6就行了；如果X与上家的相等，那么Y就要大于上家的Y（规定此时1&#62;6&#62;5&#62;4&#62;3&#62;2）。比如我的上家叫了5个4，那么我就可以叫5个5，5个6，或者6个2之类的。这个规则和升级或是桥牌中的叫主牌规则有点类似吧~如果玩家不继续叫点数，而是选择了“开”，那么他的意思就是不相信上家叫的数量，这时候所有的玩家都展示自己的骰子点数，清点一下现在的情况是否满足上家叫的数量，如果满足了，那么开的人就罚一杯酒，反之被开的人就被罚。 为了游戏的趣味性，规则当中还添加了一条十分重要的内容：点数为1的骰子可以当成任意点数——除非有人叫了“X个1”。这样一来如果我的手中有2个1点，1个3点，2个5点，那么我就相当于有3个3，同时又有4个5！——除非有人叫了“3个1”或者“5个1”之类带1的点数。这样一来变化就丰富了，即使两个人玩，你也不能马上猜到对方手中大概的点数分布情况。 规则就是这样，下文的分析都以没有叫“X个1”的情况为准。先举一个例子来说明一下游戏流程，免得有人看不懂我上面的描述- -同时下文也将以此进行分析。 假设3个玩家A，B，C，每个人手中有5个骰子。A手中是1,1,3,4,6；B手中是1,2,5,5,5；C手中是2,3,3,4,5。从A开始叫点数。 A：（其实3，4，6都可以，随便选了一个）4个3 B：（自己只有1个3，换一个数字探探C的手风如何）4个5 C：（一般犹豫一下）5个3 A：（见C好像也有3）6个3！ B：（见自己手中只有一个3——1此时可以当作3来看，于是一般犹豫一下）开！ （然后一清点，A手中有3个3，B手中有1个，C手中有2个，加起来正好6个，于是B杯具） 这正是比较典型的一局。理解了游戏流程后，我想提出的问题是：我们有哪些对自己有利的策略呢？ 我们把复杂的心理学之类的问题忽略掉，那么这个游戏自然转化成了一个概率问题。假设一共有n个人在玩这个游戏，每个人手中有m只骰子，那么每个点数的平均数量就是m*n/6，再加上点数为1的数量，每个点数的平均数量应该是m*n/3。当我们在玩游戏的时候，自己手中的骰子点数是已知的，那么未知的点数平均数量就应该是m*(n-1)/3。再加上你手中该点数的实际数量，就得到了这个点数的数量期望。 如果假定骰子的点数满足二项分布（即只有是或者不是两种情况），那么可以计算得到：对于m*(n-1)&#60;=61的情况来说，某点数的实际数量更有可能在期望±2个的范围内出现；当m*(n-1)&#60;=22时则更有可能在期望±1个的范围内出现。这个震荡幅度的估计有助于我们进行叫点数时的决策，特别是第一个叫点的人，此时没有其他人的叫点信息，一般也观察不到什么《Lie To Me》等级的暗示，于是他只能通过数学的计算来给自己大概选择一条出路。——不知道有没有人会联想到，其实这个震荡幅度正是一个&#60;50%的置信区间~只不过我们使用的模型改变了，从一个连续的模型（t-分布）转变成了一个离散的模型（二项分布）。通过对这个区间的掌握，我们可以更精确地控制叫点数的范围以及在一定程度上判断继续叫或者开。 在上面所举的例子中，n=3,m=5。对于A来说，3的数量期望应该是3+5*2/3约为6.3，而m*(n-1)=10&#60;22，所以3点的数量更有可能出现在5~7之间，A如果叫5，假如B叫6，C叫7，A就比较难以决策了。所以A选择叫4点，虽然保守，但是不会导致轮一回转到自己的时候出现让自己尴尬的场面。注意到游戏每一次只会有一人受罚，所以说我们为了避免被罚，应该更多地考虑如何让自己叫到一个安全的点数而不是叫到一个正好踩线的点数。 以上便是数学层面的简单分析。但是只要是有人参与的游戏都不可死板地套用公式，人和人的较量总是会让局面变得更加难以控制。比如上例中B如果故意“错叫”了5个3，那么C可能以为A和B都有很多的3点，于是可能跳过6直接叫7个3，那么不是A杯具就是C杯具——如果A不开继续往上叫无疑就中了B的陷阱，B自然不会继续叫下去。也有可能A大胆往上叫第一下就直接开出6个3，B这时候就两难了。站在局外人的角度来看，B根据自己的骰子情况应该选择开，但是如果往上加一个变成7个3，反而会引诱C继续往上叫。恩……博弈论神马的好像准备冒泡了……打住。 我的简单介绍就到这里，任何游戏都还得亲自上阵，纸上谈兵都是没用的~希望大家玩得开心~ P.S:这篇文章中我给出了一个生活中的例子，其中小小地应用了一下置信区间，于是干脆就划分到了这个系列之中。另外我今天下午的6人5骰局就半个小时都没有被罚~当然其实这也和我上下家有点关系……上家是一个永远都8个9个起叫或者6个7个也开的傻孩子，下家是一个无论我叫什么都继续叫的傻孩子……笑~ 本文由 严酷的魔王 创作，转载或引用前请联系我们。相关文章： 统计与推理(2)：置信区间 统计与推理(1)：描述性统计 不可思议的箱子：你的一生就在里面
相关文章：<ol>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html' rel='bookmark' title='统计与推理(2)：置信区间'>统计与推理(2)：置信区间</a></li>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%861%ef%bc%9a%e6%8f%8f%e8%bf%b0%e6%80%a7%e7%bb%9f%e8%ae%a1.html' rel='bookmark' title='统计与推理(1)：描述性统计'>统计与推理(1)：描述性统计</a></li>
<li><a href='http://blog.programet.org/2011/07/%e4%b8%8d%e5%8f%af%e6%80%9d%e8%ae%ae%e7%9a%84%e7%ae%b1%e5%ad%90%ef%bc%9a%e4%bd%a0%e7%9a%84%e4%b8%80%e7%94%9f%e5%b0%b1%e5%9c%a8%e9%87%8c%e9%9d%a2.html' rel='bookmark' title='不可思议的箱子：你的一生就在里面'>不可思议的箱子：你的一生就在里面</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>不知道大家在KTV除了唱歌还会玩些什么呢？话筒只有两三个，但是人却有十多只，应该有很多人玩三国杀、UNO之类的桌游，不过我想也会有些人玩骰子喝酒的吧。至少在我的朋友圈里面，这些都是KTV里面的主要活动。三国杀什么的我今天就不讨论了，让我琢磨了一番的是那个骰子的小游戏。可能大家玩的规则大同小异，我先向没玩过的读者叙述一下最主要的游戏规则。</p>
<p><span id="more-3026"></span></p>
<p>一般这个游戏在2~10人之间依次进行（理论上说没有人数的上限，但是我最多好像也没有和超过10人玩这个游戏）。每个人手中都有相同数量的骰子，一般是4~6个，开始之前摇一摇~每个人只能看见自己的骰子点数。接着从某一个人开始——一般是上一局输了的人，第一个人要做的就是叫点数，格式是“X个Y”，意思就是你认为在所有玩家的骰子中至少有X个点数为Y的骰子，比如有人叫“6个3”，那么就是说他相信在这些玩家手中至少有6个骰子滚出了3点，其中X不能小于玩家数。每一个玩家叫完点就轮到下一个，此时下一个玩家有两种选择：继续叫点数或者是选择“开”。继续叫点数的规则如下：X不能小于上家的X；如果X比上家的大，那么Y只要是1~6就行了；如果X与上家的相等，那么Y就要大于上家的Y（规定此时1&gt;6&gt;5&gt;4&gt;3&gt;2）。比如我的上家叫了5个4，那么我就可以叫5个5，5个6，或者6个2之类的。这个规则和升级或是桥牌中的叫主牌规则有点类似吧~如果玩家不继续叫点数，而是选择了“开”，那么他的意思就是不相信上家叫的数量，这时候所有的玩家都展示自己的骰子点数，清点一下现在的情况是否满足上家叫的数量，如果满足了，那么开的人就罚一杯酒，反之被开的人就被罚。</p>
<p>为了游戏的趣味性，规则当中还添加了一条十分重要的内容：点数为1的骰子可以当成任意点数——除非有人叫了“X个1”。这样一来如果我的手中有2个1点，1个3点，2个5点，那么我就相当于有3个3，同时又有4个5！——除非有人叫了“3个1”或者“5个1”之类带1的点数。这样一来变化就丰富了，即使两个人玩，你也不能马上猜到对方手中大概的点数分布情况。</p>
<p>规则就是这样，下文的分析都以没有叫“X个1”的情况为准。先举一个例子来说明一下游戏流程，免得有人看不懂我上面的描述- -同时下文也将以此进行分析。</p>
<blockquote><p>假设3个玩家A，B，C，每个人手中有5个骰子。A手中是1,1,3,4,6；B手中是1,2,5,5,5；C手中是2,3,3,4,5。从A开始叫点数。</p>
<p>A：（其实3，4，6都可以，随便选了一个）4个3</p>
<p>B：（自己只有1个3，换一个数字探探C的手风如何）4个5</p>
<p>C：（一般犹豫一下）5个3</p>
<p>A：（见C好像也有3）6个3！</p>
<p>B：（见自己手中只有一个3——1此时可以当作3来看，于是一般犹豫一下）开！</p>
<p>（然后一清点，A手中有3个3，B手中有1个，C手中有2个，加起来正好6个，于是B杯具）</p></blockquote>
<p>这正是比较典型的一局。理解了游戏流程后，我想提出的问题是：我们有哪些对自己有利的策略呢？</p>
<p>我们把复杂的心理学之类的问题忽略掉，那么这个游戏自然转化成了一个概率问题。假设一共有n个人在玩这个游戏，每个人手中有m只骰子，那么每个点数的平均数量就是m*n/6，再加上点数为1的数量，每个点数的平均数量应该是m*n/3。当我们在玩游戏的时候，自己手中的骰子点数是已知的，那么未知的点数平均数量就应该是m*(n-1)/3。再加上你手中该点数的实际数量，就得到了这个点数的数量期望。</p>
<p>如果假定骰子的点数满足二项分布（即只有是或者不是两种情况），那么可以计算得到：对于m*(n-1)&lt;=61的情况来说，某点数的实际数量更有可能在期望±2个的范围内出现；当m*(n-1)&lt;=22时则更有可能在期望±1个的范围内出现。这个震荡幅度的估计有助于我们进行叫点数时的决策，特别是第一个叫点的人，此时没有其他人的叫点信息，一般也观察不到什么《Lie To Me》等级的暗示，于是他只能通过数学的计算来给自己大概选择一条出路。——不知道有没有人会联想到，其实这个震荡幅度正是一个<img src='http://s.wordpress.com/latex.php?latex=%5Calpha&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha' title='\alpha' class='latex' />&lt;50%的置信区间~只不过我们使用的模型改变了，从一个连续的模型（t-分布）转变成了一个离散的模型（二项分布）。通过对这个区间的掌握，我们可以更精确地控制叫点数的范围以及在一定程度上判断继续叫或者开。</p>
<p>在上面所举的例子中，n=3,m=5。对于A来说，3的数量期望应该是3+5*2/3约为6.3，而m*(n-1)=10&lt;22，所以3点的数量更有可能出现在5~7之间，A如果叫5，假如B叫6，C叫7，A就比较难以决策了。所以A选择叫4点，虽然保守，但是不会导致轮一回转到自己的时候出现让自己尴尬的场面。注意到游戏每一次只会有一人受罚，所以说我们为了避免被罚，应该更多地考虑如何让自己叫到一个安全的点数而不是叫到一个正好踩线的点数。</p>
<p>以上便是数学层面的简单分析。但是只要是有人参与的游戏都不可死板地套用公式，人和人的较量总是会让局面变得更加难以控制。比如上例中B如果故意“错叫”了5个3，那么C可能以为A和B都有很多的3点，于是可能跳过6直接叫7个3，那么不是A杯具就是C杯具——如果A不开继续往上叫无疑就中了B的陷阱，B自然不会继续叫下去。也有可能A大胆往上叫第一下就直接开出6个3，B这时候就两难了。站在局外人的角度来看，B根据自己的骰子情况应该选择开，但是如果往上加一个变成7个3，反而会引诱C继续往上叫。恩……博弈论神马的好像准备冒泡了……打住。<br />
我的简单介绍就到这里，任何游戏都还得亲自上阵，纸上谈兵都是没用的~希望大家玩得开心~</p>
<blockquote><p>P.S:这篇文章中我给出了一个生活中的例子，其中小小地应用了一下置信区间，于是干脆就划分到了这个系列之中。另外我今天下午的6人5骰局就半个小时都没有被罚~当然其实这也和我上下家有点关系……上家是一个永远都8个9个起叫或者6个7个也开的傻孩子，下家是一个无论我叫什么都继续叫的傻孩子……笑~</p></blockquote>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html' rel='bookmark' title='统计与推理(2)：置信区间'>统计与推理(2)：置信区间</a></li>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%861%ef%bc%9a%e6%8f%8f%e8%bf%b0%e6%80%a7%e7%bb%9f%e8%ae%a1.html' rel='bookmark' title='统计与推理(1)：描述性统计'>统计与推理(1)：描述性统计</a></li>
<li><a href='http://blog.programet.org/2011/07/%e4%b8%8d%e5%8f%af%e6%80%9d%e8%ae%ae%e7%9a%84%e7%ae%b1%e5%ad%90%ef%bc%9a%e4%bd%a0%e7%9a%84%e4%b8%80%e7%94%9f%e5%b0%b1%e5%9c%a8%e9%87%8c%e9%9d%a2.html' rel='bookmark' title='不可思议的箱子：你的一生就在里面'>不可思议的箱子：你的一生就在里面</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/08/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%863%ef%bc%9aktv%e9%87%8c%e7%9a%84%e9%aa%b0%e5%ad%90%e6%b8%b8%e6%88%8f.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<series:name><![CDATA[统计与推理]]></series:name>
	</item>
		<item>
		<title>统计与推理(2)：置信区间</title>
		<link>http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html</link>
		<comments>http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html#comments</comments>
		<pubDate>Wed, 28 Jul 2010 02:29:39 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[应用数学]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[统计学]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2735</guid>
		<description><![CDATA[我们宿舍门背后挂了一块飞镖板，宅得无聊了几个人还可以暴力一下（门上面已经有好多脱靶扎出来的小眼了，不要告诉宿管诶）。由于小时候我家也有一块，所以我有那么一点点的基础，从气氛上来说我比舍友的准度要高那么一些。但是，这个结果到底是我们之间的水平存在客观差距，还是他们的运气比我差了那么一点呢？ 相信很多时候大家都会碰到这样的问题，概括起来说就是：对于两份样本求平均数，一般不会完全相等的，那我们如何得知它们所在的两个总体的均数本身就有差异，还是由于抽样的误差所导致的呢？或者类似的，对于一份样本和一个事先假设的均数，我们如何判定这份样本所在的总体的均数和我们的假设相一致？ 下面先讨论单样本的情况。既然我们认为样本的均数不能代表总体的均数，主要是因为抽样会有误差，很多情况不会恰好等于总体的均数。那么我们不妨换一个角度，从样本的均数出发，估计出总体的均数大概会出现的范围而不是其确切的值。这个范围我们就称作置信区间(Confidential Interval)。 由于我们相信样本均数和总体均数之差是符合无偏分布的——也就是说样本均数减去总体均数得到的差是正数或者负数的情况是一样多的，所以这个从样本估计出来的区间应该是“以样本均数为中心向两边等距散开”的尿性。于是我们只要估计出这个区间的半长就好。说来轻松，其实这个不是一件容易的事情。下面我们先引进几个概念，再依靠他们计算出区间半长。这些概念的原理比较深奥，要真正理解需要的知识太深奥，所以我也没能从数学上严谨地进行推导而得出所需的结论，于是只好描述性地介绍下。 一、标准误(Standard Error) 标准误和标准差名字很像，但是作用很不一样。标准误是衡量均数抽样误差大小的尺度。因为各个样本的均数是有差异的，所以如果我们对所有的样本均数进行考察——也就是考察他们的均数以及标准差/方差，那么就会有一些发现。自然，所有样本均数的均数就是总体均数，而所有样本均数的标准差，就是我们所说的标准误，或者称之为标准误差均值(Standard error of the mean)。标准误的公式是 ，其中s是这份样本的标准差，n是这份样本的容量。标准差用来衡量样本中各个值与均数的平均差值，而我们所求的这个标准误差均值实际上也就是对样本均数与真实均数（即总体均数）的平均差值的估计。这个估计已经跨出了我们求置信区间的第一步。 二、显著性水平 注意前文我们说过了置信区间主要是用来“估计出总体的均数大概会出现的范围而不是其确切的值”，那么为了严谨，我们必须准确地定义这个“大概”到底是什么意思。自然地，我们会想到去定义总体均数会落在这个置信区间内的概率。也就是说，总体均数是有可能落在置信区间外面的，那么这个总体均数落在置信区间外面的概率就称作显著性水平，通常用来表示。一般统计学习惯上令，另外一层含义就是总体均数有95%的可能落在我们求出的置信区间之中。 三、t-分布 前文定义了标准误和显著性水平，可以看出，其中有样本容量n，标准差s以及显著性水平三个主要的参数，那么我们的置信区间就与这三个参数有关。如果我们知道了总体的标准差，那么就会好办很多，但是一般情况是不会知道的，所以我们只能用从样本中估算出来的标准差进行计算。一般来说我们默认总体是符合正态分布的，但是我们要如何描述样本的分布情况呢？一位笔名为Student的数学家提出了一个今日称为“学生t-分布”(Student&#8217;s T-distribution)的统计模型，可以很好地描述样本的分布情况。这个分布可以根据样本大小以及显著性水平得到一个值，一般来说记做。这个值不能准确地表示出来，只能通过查表得到，在维基上面有。 上图(原图在此)是t分布和标准正态分布的概率密度函数图形，v=n-1，可以看出n越大，对应的t-分布就越接近正态分布，实际上标准正态分布是t分布在n趋向于无穷时候的极限。大家都知道，概率密度函数与整条x轴围成的面积是1。一般来说我们使用t-分布来描述的模型是建立在原总体符合正态分布的基础上的，而将一个正态分布转换到标准正态分布的变换公式是，其中是那个事先假设的均数，当我们不知道总体标准差的时候就使用近似的公式，即——使用估计的标准差s代替总体的标准差。 首先我们根据这个公式处理一下样本，将公式变成，也就是将他转化成“标准t-分布”——这个名字是我自己起的，主要是为了让大家和标准正态分布大概联系起来。接着我们就开始考察变换过来之后的这个值是多少，比如是1。接下来就要用到显著性水平的概念了。一般来说我们使用的是Two-Tail模型——Tail指的就是下图黄色的那块，One-Tail还分为Left-Tail和Right-Tail，他们的共同点就是Tail所占的面积就等于。也就是说Two-Tail分布在如下图的白色范围内，其中一般设。 于是，如果我们手上有一个样本，我们知道了s和v=n-1，那么就可以知道这个样本所对应的具体的t-分布了，先将这个样本标准化，接着我们就可以开始求置信区间了。 四、置信区间 铺垫了这么久，终于开始进入正题了。这个区间怎么求，上文其实也说了差不多一半了。梳理一下我们的思路，假设我们手上有一个容量为n的样本，我们求出了他的平均数和标准差。现在我们想估计产生这个样本的总体实际均数的范围，这个范围就称作置信区间。首先我们要确定这个置信区间的值，一般是设为5%，也就是说总体均数有95%的可能落在我们估计的这个区间中。根据之前所说的t-分布，我们就可以开始计算了。 首先我们可以知道一个区间[-c,c]，使得对应样本的t分布在[-c,c]上与x轴围成的面积为0.95（为什么），接着回忆这个公式：。对我们求出的使用这个公式，其中是未知数，于是我们可以得到如下的不等式： 解这个不等式，得到： 那么，这就是我们所求的置信区间。 其中c的值由n和决定，n决定了t分布的形状，决定了这个区间的宽度。和n越大，c越小。然而改变会导致这个区间的“代表性”的降低，所以我们可以通过增大n，也就是增大样本容量的方法来得到一个越来越精确的置信区间。当n趋向于正无穷的时候，也就是t-分布趋向于正态分布的时候，c约为1.96 。 P.S. 这篇文章终于写完了……看了看wp的编辑记录，我是从7月8号开始写的，本来那天准备一鼓作气写完，谁知写了大半断网，服务器只存下了前两段，当时那个泪奔……然后我就开始军训了，没有足够多的整块时间来写完，而时间的推迟导致了思维的断层，只能每天挤一点，有时候干脆打实况去了。终于今早下雨提前收操，绵延了20天的草稿也终于没有变成大坑。 本文由 严酷的魔王 创作，转载或引用前请联系我们。相关文章： 用极限证明伯努利不等式 素数有无穷多个的另类证明（二）：素数的某个求和式 从(0,1]×(0,1]到(0,1]的双射
相关文章：<ol>
<li><a href='http://blog.programet.org/2009/09/%e7%94%a8%e6%9e%81%e9%99%90%e8%af%81%e6%98%8e%e4%bc%af%e5%8a%aa%e5%88%a9%e4%b8%8d%e7%ad%89%e5%bc%8f.html' rel='bookmark' title='用极限证明伯努利不等式'>用极限证明伯努利不等式</a></li>
<li><a href='http://blog.programet.org/2009/11/%e7%b4%a0%e6%95%b0%e6%9c%89%e6%97%a0%e7%a9%b7%e5%a4%9a%e4%b8%aa%e7%9a%84%e5%8f%a6%e7%b1%bb%e8%af%81%e6%98%8e%ef%bc%88%e4%ba%8c%ef%bc%89%ef%bc%9a%e7%b4%a0%e6%95%b0%e7%9a%84%e6%9f%90%e4%b8%aa%e6%b1%82.html' rel='bookmark' title='素数有无穷多个的另类证明（二）：素数的某个求和式'>素数有无穷多个的另类证明（二）：素数的某个求和式</a></li>
<li><a href='http://blog.programet.org/2010/04/%e4%bb%8e01%c3%9701%e5%88%b001%e7%9a%84%e5%8f%8c%e5%b0%84.html' rel='bookmark' title='从(0,1]×(0,1]到(0,1]的双射'>从(0,1]×(0,1]到(0,1]的双射</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>我们宿舍门背后挂了一块飞镖板，宅得无聊了几个人还可以暴力一下（门上面已经有好多脱靶扎出来的小眼了，不要告诉宿管诶）。由于小时候我家也有一块，所以我有那么一点点的基础，从气氛上来说我比舍友的准度要高那么一些。但是，这个结果到底是我们之间的水平存在客观差距，还是他们的运气比我差了那么一点呢？</p>
<p><span id="more-2735"></span></p>
<p>相信很多时候大家都会碰到这样的问题，概括起来说就是：<strong>对于两份样本求平均数，一般不会完全相等的，那我们如何得知它们所在的两个总体的均数本身就有差异，还是由于抽样的误差所导致的呢？或者类似的，对于一份样本和一个事先假设的均数，我们如何判定这份样本所在的总体的均数和我们的假设相一致？</strong></p>
<p>下面先讨论单样本的情况。既然我们认为样本的均数不能代表总体的均数，主要是因为抽样会有误差，很多情况不会恰好等于总体的均数。那么我们不妨换一个角度，从样本的均数出发，估计出总体的均数<strong>大概会出现的范围而不是其确切的值</strong>。这个范围我们就称作<strong>置信区间</strong>(Confidential Interval)。</p>
<p>由于我们相信样本均数和总体均数之差是符合<strong>无偏分布</strong>的——也就是说样本均数减去总体均数得到的差是正数或者负数的情况是一样多的，所以这个从样本估计出来的区间应该是“以样本均数为中心向两边等距散开”的尿性。于是我们只要估计出这个区间的半长就好。说来轻松，其实这个不是一件容易的事情。下面我们先引进几个概念，再依靠他们计算出区间半长。这些概念的原理比较深奥，要真正理解需要的知识太深奥，所以我也没能从数学上严谨地进行推导而得出所需的结论，于是只好描述性地介绍下。</p>
<h3>一、标准误(Standard Error)</h3>
<p>标准误和标准差名字很像，但是作用很不一样。标准误是衡量均数抽样误差大小的尺度。因为各个样本的均数是有差异的，所以如果我们对所有的样本均数进行考察——也就是考察他们的均数以及标准差/方差，那么就会有一些发现。自然，所有样本均数的均数就是总体均数，而所有样本均数的标准差，就是我们所说的标准误，或者称之为<strong>标准误差均值</strong>(Standard error of the mean)。标准误的公式是<img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7Bs%7D%7B%5Csqrt%7Bn%7D%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\frac{s}{\sqrt{n}}' title='\frac{s}{\sqrt{n}}' class='latex' /> ，其中s是这份样本的标准差，n是这份样本的容量。标准差用来衡量样本中各个值与均数的平均差值，而我们所求的这个标准误差均值实际上也就是对样本均数与真实均数（即总体均数）的平均差值的<strong>估计</strong>。这个估计已经跨出了我们求置信区间的第一步。</p>
<h3>二、显著性水平</h3>
<p>注意前文我们说过了置信区间主要是用来“估计出总体的均数<strong>大概会出现的范围而不是其确切的值</strong>”，那么为了严谨，我们必须准确地定义这个“大概”到底是什么意思。自然地，我们会想到去定义总体均数会落在这个置信区间内的概率。也就是说，总体均数是有可能落在置信区间外面的，那么这个总体均数落在置信区间外面的概率就称作<strong>显著性水平</strong>，通常用<img src='http://s.wordpress.com/latex.php?latex=%5Calpha&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha' title='\alpha' class='latex' />来表示。一般统计学<strong>习惯上</strong>令<img src='http://s.wordpress.com/latex.php?latex=%5Calpha%20%3D5%5C%25&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha =5\%' title='\alpha =5\%' class='latex' />，另外一层含义就是总体均数有95%的可能落在我们求出的置信区间之中。</p>
<h3>三、t-分布</h3>
<p>前文定义了标准误和显著性水平，可以看出，其中有样本容量n，标准差s以及显著性水平<img src='http://s.wordpress.com/latex.php?latex=%5Calpha&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha' title='\alpha' class='latex' />三个主要的参数，那么我们的置信区间就与这三个参数有关。如果我们知道了总体的标准差，那么就会好办很多，但是一般情况是不会知道的，所以我们只能用从样本中估算出来的标准差进行计算。一般来说我们默认总体是符合正态分布的，但是我们要如何描述样本的分布情况呢？一位笔名为Student的数学家提出了一个今日称为<strong>“学生t-分布”(Student&#8217;s T-distribution)</strong>的统计模型，可以很好地描述样本的分布情况。这个分布可以根据样本大小以及显著性水平得到一个值，一般来说记做<img src='http://s.wordpress.com/latex.php?latex=t_%7Bn-1%2C%5Calpha%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='t_{n-1,\alpha}' title='t_{n-1,\alpha}' class='latex' />。这个值不能准确地表示出来，只能通过查表得到，在维基上面有。</p>
<p style="text-align: center;"><a href="http://blog.programet.org/wp-content/uploads/未命名4.png"><img class="aligncenter size-full wp-image-4449" title="未命名" src="http://blog.programet.org/wp-content/uploads/未命名4.png" alt="" width="427" height="351" /></a></p>
<p>上图(<a href="http://upload.wikimedia.org/wikipedia/commons/2/26/TStudent.png">原图在此</a>)是t分布和标准正态分布的概率密度函数图形，v=n-1，可以看出n越大，对应的t-分布就越接近正态分布，实际上标准正态分布是t分布在n趋向于无穷时候的极限。大家都知道，概率密度函数与整条x轴围成的面积是1。一般来说我们使用t-分布来描述的模型是建立在原总体符合正态分布的基础上的，而将一个正态分布转换到标准正态分布的变换公式是<img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7Bx-%5Cmu%7D%7B%5Cfrac%7B%5Csigma%7D%7B%5Csqrt%7Bn%7D%7D%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\frac{x-\mu}{\frac{\sigma}{\sqrt{n}}}' title='\frac{x-\mu}{\frac{\sigma}{\sqrt{n}}}' class='latex' />，其中<img src='http://s.wordpress.com/latex.php?latex=%5Cmu&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\mu' title='\mu' class='latex' />是那个事先假设的均数，当我们不知道总体标准差的时候就使用近似的公式，即<img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7Bx-%5Cmu%7D%7B%5Cfrac%7Bs%7D%7B%5Csqrt%7Bn%7D%7D%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\frac{x-\mu}{\frac{s}{\sqrt{n}}}' title='\frac{x-\mu}{\frac{s}{\sqrt{n}}}' class='latex' />——使用估计的标准差s代替总体的标准差<img src='http://s.wordpress.com/latex.php?latex=%5Csigma&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\sigma' title='\sigma' class='latex' />。</p>
<p>首先我们根据这个公式处理一下样本，将公式变成<img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7B%5Cbar%7Bx%7D-%5Cmu%7D%7B%5Cfrac%7Bs%7D%7B%5Csqrt%7Bn%7D%7D%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\frac{\bar{x}-\mu}{\frac{s}{\sqrt{n}}}' title='\frac{\bar{x}-\mu}{\frac{s}{\sqrt{n}}}' class='latex' />，也就是将他转化成“标准t-分布”——这个名字是我自己起的，主要是为了让大家和标准正态分布大概联系起来。接着我们就开始考察变换过来之后的这个值是多少，比如是1。接下来就要用到显著性水平的概念了。一般来说我们使用的是Two-Tail模型——Tail指的就是下图黄色的那块，One-Tail还分为Left-Tail和Right-Tail，他们的共同点就是Tail所占的面积就等于<img src='http://s.wordpress.com/latex.php?latex=%5Calpha&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha' title='\alpha' class='latex' />。也就是说Two-Tail分布在如下图的白色范围内，其中一般设<img src='http://s.wordpress.com/latex.php?latex=%5Calpha%20%3D5%5C%25&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha =5\%' title='\alpha =5\%' class='latex' />。</p>
<p style="text-align: center;"><a href="http://blog.programet.org/wp-content/uploads/未命名5.png"><img class="aligncenter size-medium wp-image-4450" title="未命名" src="http://blog.programet.org/wp-content/uploads/未命名5-300x123.png" alt="" width="338" height="138" /></a></p>
<p>于是，如果我们手上有一个样本，我们知道了s和v=n-1，那么就可以知道这个样本所对应的具体的t-分布了，先将这个样本标准化，接着我们就可以开始求置信区间了。</p>
<h3>四、置信区间</h3>
<p>铺垫了这么久，终于开始进入正题了。这个区间怎么求，上文其实也说了差不多一半了。梳理一下我们的思路，假设我们手上有一个容量为n的样本，我们求出了他的平均数<img src='http://s.wordpress.com/latex.php?latex=%5Cbar%7Bx%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\bar{x}' title='\bar{x}' class='latex' />和标准差<img src='http://s.wordpress.com/latex.php?latex=s&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='s' title='s' class='latex' />。现在我们想估计产生这个样本的总体实际均数<img src='http://s.wordpress.com/latex.php?latex=%5Cmu&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\mu' title='\mu' class='latex' />的范围，这个范围就称作置信区间。首先我们要确定这个置信区间的<img src='http://s.wordpress.com/latex.php?latex=%5Calpha&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha' title='\alpha' class='latex' />值，一般是设为5%，也就是说总体均数有95%的可能落在我们估计的这个区间中。根据之前所说的t-分布，我们就可以开始计算了。</p>
<p>首先我们可以知道一个区间[-c,c]，使得对应样本的t分布在[-c,c]上与x轴围成的面积为0.95（为什么），接着回忆这个公式：<img src='http://s.wordpress.com/latex.php?latex=%5Cfrac%7B%5Cbar%7Bx%7D-%5Cmu%7D%7B%5Cfrac%7Bs%7D%7B%5Csqrt%7Bn%7D%7D%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\frac{\bar{x}-\mu}{\frac{s}{\sqrt{n}}}' title='\frac{\bar{x}-\mu}{\frac{s}{\sqrt{n}}}' class='latex' />。对我们求出的<img src='http://s.wordpress.com/latex.php?latex=%5Cbar%7Bx%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\bar{x}' title='\bar{x}' class='latex' />使用这个公式，其中<img src='http://s.wordpress.com/latex.php?latex=%5Cmu&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\mu' title='\mu' class='latex' />是未知数，于是我们可以得到如下的不等式：</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=-c%5Cleq%20%5Cfrac%7B%5Cbar%7Bx%7D-%5Cmu%7D%7B%5Cfrac%7Bs%7D%7B%5Csqrt%7Bn%7D%7D%7D%5Cleq%20c&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='-c\leq \frac{\bar{x}-\mu}{\frac{s}{\sqrt{n}}}\leq c' title='-c\leq \frac{\bar{x}-\mu}{\frac{s}{\sqrt{n}}}\leq c' class='latex' /></p>
<p>解这个不等式，得到：</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=%5Cbar%7Bx%7D-c%20%5Ctimes%20%5Cfrac%7Bs%7D%7B%5Csqrt%7Bn%7D%7D%5Cleq%20%5Cmu%20%5Cleq%20%5Cbar%7Bx%7D%2Bc%20%5Ctimes%20%5Cfrac%7Bs%7D%7B%5Csqrt%7Bn%7D%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\bar{x}-c \times \frac{s}{\sqrt{n}}\leq \mu \leq \bar{x}+c \times \frac{s}{\sqrt{n}}' title='\bar{x}-c \times \frac{s}{\sqrt{n}}\leq \mu \leq \bar{x}+c \times \frac{s}{\sqrt{n}}' class='latex' /></p>
<p>那么，这就是我们所求的置信区间。</p>
<p>其中c的值由n和<img src='http://s.wordpress.com/latex.php?latex=%5Calpha&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha' title='\alpha' class='latex' />决定，n决定了t分布的形状，<img src='http://s.wordpress.com/latex.php?latex=%5Calpha&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha' title='\alpha' class='latex' />决定了这个区间的宽度。<img src='http://s.wordpress.com/latex.php?latex=%5Calpha&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha' title='\alpha' class='latex' />和n越大，c越小。然而改变<img src='http://s.wordpress.com/latex.php?latex=%5Calpha&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='\alpha' title='\alpha' class='latex' />会导致这个区间的“代表性”的降低，所以我们可以通过增大n，也就是<strong>增大样本容量</strong>的方法来得到一个越来越精确的置信区间。当n趋向于正无穷的时候，也就是t-分布趋向于正态分布的时候，c约为1.96 。</p>
<blockquote><p>P.S. 这篇文章终于写完了……看了看wp的编辑记录，我是从7月8号开始写的，本来那天准备一鼓作气写完，谁知写了大半断网，服务器只存下了前两段，当时那个泪奔……然后我就开始军训了，没有足够多的整块时间来写完，而时间的推迟导致了思维的断层，只能每天挤一点，有时候干脆打实况去了。终于今早下雨提前收操，绵延了20天的草稿也终于没有变成大坑。</p></blockquote>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2009/09/%e7%94%a8%e6%9e%81%e9%99%90%e8%af%81%e6%98%8e%e4%bc%af%e5%8a%aa%e5%88%a9%e4%b8%8d%e7%ad%89%e5%bc%8f.html' rel='bookmark' title='用极限证明伯努利不等式'>用极限证明伯努利不等式</a></li>
<li><a href='http://blog.programet.org/2009/11/%e7%b4%a0%e6%95%b0%e6%9c%89%e6%97%a0%e7%a9%b7%e5%a4%9a%e4%b8%aa%e7%9a%84%e5%8f%a6%e7%b1%bb%e8%af%81%e6%98%8e%ef%bc%88%e4%ba%8c%ef%bc%89%ef%bc%9a%e7%b4%a0%e6%95%b0%e7%9a%84%e6%9f%90%e4%b8%aa%e6%b1%82.html' rel='bookmark' title='素数有无穷多个的另类证明（二）：素数的某个求和式'>素数有无穷多个的另类证明（二）：素数的某个求和式</a></li>
<li><a href='http://blog.programet.org/2010/04/%e4%bb%8e01%c3%9701%e5%88%b001%e7%9a%84%e5%8f%8c%e5%b0%84.html' rel='bookmark' title='从(0,1]×(0,1]到(0,1]的双射'>从(0,1]×(0,1]到(0,1]的双射</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<series:name><![CDATA[统计与推理]]></series:name>
	</item>
		<item>
		<title>统计与推理(1)：描述性统计</title>
		<link>http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%861%ef%bc%9a%e6%8f%8f%e8%bf%b0%e6%80%a7%e7%bb%9f%e8%ae%a1.html</link>
		<comments>http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%861%ef%bc%9a%e6%8f%8f%e8%bf%b0%e6%80%a7%e7%bb%9f%e8%ae%a1.html#comments</comments>
		<pubDate>Sun, 04 Jul 2010 07:59:50 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[应用数学]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[统计学]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2672</guid>
		<description><![CDATA[2011-7-19 Update:居然被一些同学发现了……不过本文的图片在blog进行服务器转移的时候没有备份好……所幸这些概念性的图片可以使用Google，Wikipedia来找到类似的进行理解。然后已经修改了从Matrix67的Blog引用的文章图片也未能显示的问题。 虽然说我是一个统计系的学生，但是大一行将结束的时候，我只学了一门与其他数计院专业不同的课程：统计推理(statistical reasoning)。 我很喜欢这门课，因为它在不涉及概率统计深奥原理的前提下向我们很好地展示了统计学的基本思想方法。统计学作为一门有力的工具，已经成为了各个科学领域都必须运用的（特别是生物）数据分析方法。当初我填报中大的统计学主要是因为数学与应用数学不在广西招生(- -&#124;&#124;)，但是学了这个之后，我倒也没了什么转专业的念头了。 估计我会把这个学期的这门课按照我的理解写成一个小系列，大概四五篇文章的样子，和大家交流一下统计学的思想方法。 统计学中最基础的应该就是描述性统计了。这是一个基本上人人都知道的内容——计算平均数，求方差什么的。不过这里面其实也大有文章。 首先我们要明确样本的概念。在我们的研究中，实际观测或调查的一部分个体称为样本，所研究对象的全部称为总体。所以说样本能够从某种程度上代表总体，但是基本上不会表现得和总体一样。统计学要做的事就是从样本中分析出总体，一般人是“管中窥豹”，而我们希望做到“一叶知秋”。在描述性统计当中，我们的方法是通过计算几个统计量，得到对数据的初等认识。 一、集中趋势 说到对样本的计算，可能大部分人的第一反应就是计算平均数。平均数确实是一个最常用的统计量，但是这还不够。教材上都会给出这样的例子：一个工厂平均月薪是￥3000，看上去非常高，但是实际上是工人20名，每人月薪￥1000，中层干部3名，每人月薪￥6000，一名老总，月薪34000。之所以会出现这种情况，就是因为多了“老总”的存在，我们称之为“偏值”(Outlier)。这样的数据对于平均数来说一般是致命的。所以为了描述这样的数据，我们不得不引入另外两个描述的方法：众数和中位数。 顾名思义，众数就是出现次数最多的数，中位数就是整个样本中大小中等的数。他们对样本的解读起到了很重要的作用。比如上面举的例子更适合使用中位数和众数。它们的出现很大程度上弥补了平均数受偏值影响严重这一事实。这三个指标也是各有优劣，平均数对于样本来说是很稳定的，意即不同的样本平均数差别不是很大，而中位数和众数对样本就不是很稳定了。中位数的好处就是不容易受到偏值的影响，而众数的好处就是便于计算，也更方便数据的分类。这三个统计量互相弥补，我们将这三个指标称为集中趋势(Central Intendency)。 二、离散程度 可能还有很多人记得另外两个学过的指标：方差和标准差。这两个指标描述的是整个样本是如何偏离于平均数的，这两个指标在描述性统计之外也大有用途，以后会谈到。除了这两个指标以外，我们还有很多的统计量，比如四分位数（四分之三位数），极差等。四分位数就是处于整个数据四分之一和四分之三位置的数，与中位数一起基本将整个样本分割成了4块。极差(range)便是最大数和最小数的差。这些指标构成了样本的离散程度。 三、分布特征与图表 其实说了这么多，还有一个很重要的东西没有涉及到，那就是样本的“形状”——也就是它的分布特征。一般我们要讨论这个数据是否符合正态分布，是否偏斜——上面的那个例子就是严重地向左偏斜（因为在数轴上从左到右数据是增大的，所以习惯上“左倾”就是向小数据倾斜）。 讨论样本形状的时候，更方便地便是画出样本的图示。有时候图示会给我们带来意想不到的结果。最常用的一般是直方图或是折线图，这样的图示很明确地展示了每一段样本的分布情况。不过他们并不是唯一的，有一种叫做盒须图(box-and-whisker plot)的图示从另一个角度向我们展示了样本的分布情况。 上面就是一幅盒须图，我们可以看出中位数，四分位数，极值等指标。是不是比纯粹的数据描述的离散程度更加直观呢？ 以上便是描述性统计的大概内容了。描述性统计是对样本以及总体的一个初等认识，也是传媒对大众进行宣传的时候常用的方法。 最后我们来看一个Matrix67在他的blog上给过的一个例子。 1973年，统计学家F.J. Anscombe构造出了四组奇特的数据。它告诉人们，在分析数据之前，描绘数据所对应的图像有多么的重要。 Anscombe&#8217;s Quartet I II III IV x y x y x y x y 10.0 8.04 10.0 9.14 10.0 7.46 8.0 6.58 8.0 6.95 8.0 8.14 8.0 6.77 8.0 5.76 13.0 [...]
相关文章：<ol>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html' rel='bookmark' title='统计与推理(2)：置信区间'>统计与推理(2)：置信区间</a></li>
<li><a href='http://blog.programet.org/2010/08/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%863%ef%bc%9aktv%e9%87%8c%e7%9a%84%e9%aa%b0%e5%ad%90%e6%b8%b8%e6%88%8f.html' rel='bookmark' title='统计与推理(3)：KTV里的骰子游戏'>统计与推理(3)：KTV里的骰子游戏</a></li>
<li><a href='http://blog.programet.org/2008/08/blog-post_23.html' rel='bookmark' title='关于游客困境的见解'>关于游客困境的见解</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;">2011-7-19 Update:居然被一些同学发现了……不过本文的图片在blog进行服务器转移的时候没有备份好……所幸这些概念性的图片可以使用Google，Wikipedia来找到类似的进行理解。然后已经修改了从Matrix67的Blog引用的文章图片也未能显示的问题。</span></p>
<p><span id="more-2672"></span></p>
<p>虽然说我是一个统计系的学生，但是大一行将结束的时候，我只学了一门与其他数计院专业不同的课程：统计推理(statistical reasoning)。</p>
<p>我很喜欢这门课，因为它在不涉及概率统计深奥原理的前提下向我们很好地展示了统计学的基本思想方法。统计学作为一门有力的工具，已经成为了各个科学领域都必须运用的（特别是生物）数据分析方法。当初我填报中大的统计学主要是因为数学与应用数学不在广西招生(- -||)，但是学了这个之后，我倒也没了什么转专业的念头了。</p>
<p>估计我会把这个学期的这门课按照我的理解写成一个小系列，大概四五篇文章的样子，和大家交流一下统计学的思想方法。</p>
<p>统计学中最基础的应该就是<strong>描述性统计</strong>了。这是一个基本上人人都知道的内容——计算平均数，求方差什么的。不过这里面其实也大有文章。</p>
<p>首先我们要明确样本的概念。在我们的研究中，实际观测或调查的一部分个体称为样本，所研究对象的全部称为总体。所以说样本能够从某种程度上代表总体，但是基本上不会表现得和总体一样。统计学要做的事就是从样本中分析出总体，一般人是“管中窥豹”，而我们希望做到“一叶知秋”。在描述性统计当中，我们的方法是通过计算几个统计量，得到对数据的初等认识。</p>
<h3>一、集中趋势</h3>
<p>说到对样本的计算，可能大部分人的第一反应就是计算平均数。平均数确实是一个最常用的统计量，但是这还不够。教材上都会给出这样的例子：一个工厂平均月薪是￥3000，看上去非常高，但是实际上是工人20名，每人月薪￥1000，中层干部3名，每人月薪￥6000，一名老总，月薪34000。之所以会出现这种情况，就是因为多了“老总”的存在，我们称之为“偏值”(Outlier)。这样的数据对于平均数来说一般是致命的。所以为了描述这样的数据，我们不得不引入另外两个描述的方法：众数和中位数。</p>
<p>顾名思义，众数就是出现次数最多的数，中位数就是整个样本中大小中等的数。他们对样本的解读起到了很重要的作用。比如上面举的例子更适合使用中位数和众数。它们的出现很大程度上弥补了平均数受偏值影响严重这一事实。这三个指标也是各有优劣，平均数对于样本来说是很稳定的，意即不同的样本平均数差别不是很大，而中位数和众数对样本就不是很稳定了。中位数的好处就是不容易受到偏值的影响，而众数的好处就是便于计算，也更方便数据的分类。这三个统计量互相弥补，我们将这三个指标称为<strong>集中趋势(Central Intendency)</strong>。</p>
<h3>二、离散程度</h3>
<p>可能还有很多人记得另外两个学过的指标：方差和标准差。这两个指标描述的是整个样本是如何偏离于平均数的，这两个指标在描述性统计之外也大有用途，以后会谈到。除了这两个指标以外，我们还有很多的统计量，比如四分位数（四分之三位数），极差等。四分位数就是处于整个数据四分之一和四分之三位置的数，与中位数一起基本将整个样本分割成了4块。极差(range)便是最大数和最小数的差。这些指标构成了样本的<strong>离散程度</strong>。</p>
<h3>三、分布特征与图表</h3>
<p>其实说了这么多，还有一个很重要的东西没有涉及到，那就是样本的“形状”——也就是它的分布特征。一般我们要讨论这个数据是否符合正态分布，是否偏斜——上面的那个例子就是严重地向左偏斜（因为在数轴上从左到右数据是增大的，所以习惯上“左倾”就是向小数据倾斜）。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-4447" title="未命名" src="http://blog.programet.org/wp-content/uploads/未命名3.png" alt="" width="446" height="159" /></p>
<p>讨论样本形状的时候，更方便地便是画出样本的图示。有时候图示会给我们带来意想不到的结果。最常用的一般是直方图或是折线图，这样的图示很明确地展示了每一段样本的分布情况。不过他们并不是唯一的，有一种叫做<strong>盒须图</strong>(box-and-whisker plot)的图示从另一个角度向我们展示了样本的分布情况。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-4445" title="盒须图" src="http://blog.programet.org/wp-content/uploads/未命名2.png" alt="" width="367" height="367" /></p>
<p>上面就是一幅盒须图，我们可以看出中位数，四分位数，极值等指标。是不是比纯粹的数据描述的离散程度更加直观呢？</p>
<p>以上便是描述性统计的大概内容了。描述性统计是对样本以及总体的一个初等认识，也是传媒对大众进行宣传的时候常用的方法。</p>
<p>最后我们来看一个Matrix67在<a href="http://www.matrix67.com/blog/archives/2308">他的blog上给过的一个例子</a>。</p>
<blockquote><p>1973年，统计学家F.J. Anscombe构造出了四组奇特的数据。它告诉人们，在分析数据之前，描绘数据所对应的图像有多么的重要。</p>
<table border="1">
<caption>Anscombe&#8217;s Quartet</caption>
<tbody>
<tr>
<th colspan="2">I</th>
<th colspan="2">II</th>
<th colspan="2">III</th>
<th colspan="2">IV</th>
</tr>
<tr>
<td>x</td>
<td>y</td>
<td>x</td>
<td>y</td>
<td>x</td>
<td>y</td>
<td>x</td>
<td>y</td>
</tr>
<tr>
<td>10.0</td>
<td>8.04</td>
<td>10.0</td>
<td>9.14</td>
<td>10.0</td>
<td>7.46</td>
<td>8.0</td>
<td>6.58</td>
</tr>
<tr>
<td>8.0</td>
<td>6.95</td>
<td>8.0</td>
<td>8.14</td>
<td>8.0</td>
<td>6.77</td>
<td>8.0</td>
<td>5.76</td>
</tr>
<tr>
<td>13.0</td>
<td>7.58</td>
<td>13.0</td>
<td>8.74</td>
<td>13.0</td>
<td>12.74</td>
<td>8.0</td>
<td>7.71</td>
</tr>
<tr>
<td>9.0</td>
<td>8.81</td>
<td>9.0</td>
<td>8.77</td>
<td>9.0</td>
<td>7.11</td>
<td>8.0</td>
<td>8.84</td>
</tr>
<tr>
<td>11.0</td>
<td>8.33</td>
<td>11.0</td>
<td>9.26</td>
<td>11.0</td>
<td>7.81</td>
<td>8.0</td>
<td>8.47</td>
</tr>
<tr>
<td>14.0</td>
<td>9.96</td>
<td>14.0</td>
<td>8.10</td>
<td>14.0</td>
<td>8.84</td>
<td>8.0</td>
<td>7.04</td>
</tr>
<tr>
<td>6.0</td>
<td>7.24</td>
<td>6.0</td>
<td>6.13</td>
<td>6.0</td>
<td>6.08</td>
<td>8.0</td>
<td>5.25</td>
</tr>
<tr>
<td>4.0</td>
<td>4.26</td>
<td>4.0</td>
<td>3.10</td>
<td>4.0</td>
<td>5.39</td>
<td>19.0</td>
<td>12.50</td>
</tr>
<tr>
<td>12.0</td>
<td>10.84</td>
<td>12.0</td>
<td>9.13</td>
<td>12.0</td>
<td>8.15</td>
<td>8.0</td>
<td>5.56</td>
</tr>
<tr>
<td>7.0</td>
<td>4.82</td>
<td>7.0</td>
<td>7.26</td>
<td>7.0</td>
<td>6.42</td>
<td>8.0</td>
<td>7.91</td>
</tr>
<tr>
<td>5.0</td>
<td>5.68</td>
<td>5.0</td>
<td>4.74</td>
<td>5.0</td>
<td>5.73</td>
<td>8.0</td>
<td>6.89</td>
</tr>
</tbody>
</table>
<p>这四组数据中，x值的平均数都是9.0，y值的平均数都是7.5；x值的方差都是10.0，y值的方差都是3.75；它们的相关度都是0.816，线性回 归线都是y=3+0.5x。单从这些统计数字上看来，四组数据所反映出的实际情况非常相近，而事实上，这四组数据有着天壤之别。</p>
<p style="text-align: center;"><a href="http://blog.programet.org/wp-content/uploads/未命名1.png"><img class="aligncenter size-full wp-image-4443" title="描述性统计" src="http://blog.programet.org/wp-content/uploads/未命名1.png" alt="" width="353" height="241" /></a></p>
<p>把它们描绘在图表中，你会发现这四组数据是四种完全不同的情况。第一组数据是大多人看到上述统计数字的第一反应，是最“正常”的一组数据；第二组数据所反 映的事实上是一个精确的二次函数关系，只是在错误地应用了线性模型后，各项统计数字与第一组数据恰好都相同；第三组数据描述的是一个精确的线性关系，只是 这里面有一个异常值，它导致了上述各个统计数字，尤其是相关度值的偏差；第四组数据则是一个更极端的例子，其异常值导致了平均数、方差、相关度、线性回归 线等所有统计数字全部发生偏差。</p></blockquote>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html' rel='bookmark' title='统计与推理(2)：置信区间'>统计与推理(2)：置信区间</a></li>
<li><a href='http://blog.programet.org/2010/08/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%863%ef%bc%9aktv%e9%87%8c%e7%9a%84%e9%aa%b0%e5%ad%90%e6%b8%b8%e6%88%8f.html' rel='bookmark' title='统计与推理(3)：KTV里的骰子游戏'>统计与推理(3)：KTV里的骰子游戏</a></li>
<li><a href='http://blog.programet.org/2008/08/blog-post_23.html' rel='bookmark' title='关于游客困境的见解'>关于游客困境的见解</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%861%ef%bc%9a%e6%8f%8f%e8%bf%b0%e6%80%a7%e7%bb%9f%e8%ae%a1.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<series:name><![CDATA[统计与推理]]></series:name>
	</item>
		<item>
		<title>晒：统计推理读书报告——关于概率的思考</title>
		<link>http://blog.programet.org/2010/06/%e6%99%92%ef%bc%9a%e7%bb%9f%e8%ae%a1%e6%8e%a8%e7%90%86%e8%af%bb%e4%b9%a6%e6%8a%a5%e5%91%8a%e2%80%94%e2%80%94%e5%85%b3%e4%ba%8e%e6%a6%82%e7%8e%87%e7%9a%84%e6%80%9d%e8%80%83.html</link>
		<comments>http://blog.programet.org/2010/06/%e6%99%92%ef%bc%9a%e7%bb%9f%e8%ae%a1%e6%8e%a8%e7%90%86%e8%af%bb%e4%b9%a6%e6%8a%a5%e5%91%8a%e2%80%94%e2%80%94%e5%85%b3%e4%ba%8e%e6%a6%82%e7%8e%87%e7%9a%84%e6%80%9d%e8%80%83.html#comments</comments>
		<pubDate>Sun, 13 Jun 2010 12:47:05 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[应用数学]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[概率]]></category>
		<category><![CDATA[笔记]]></category>
		<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2554</guid>
		<description><![CDATA[统计推理是我们院统计专业新开的一门课，主要讲授一些统计学方面的知识，我非常喜欢这门学科，觉得其分析事物的角度非常有趣。目前我对统计学的认识还有局限，以后一定会写一些关于统计学的文章。我选的书是《女士品茶》，它是一本介绍统计学史以及大概思想的科普类书籍。下面贴出的这篇读书报告其实没有涉及多少书中的内容，主要是我自己的一些杂碎的思考。对于下文涉及到的任何物理类陈述，我绝对不保证其正确性…… 《女士品茶》读书报告 ——关于概率的思考 《女士品茶》这本书按照作者的说法，是一本适合于不懂得或者略懂数学的人进行阅读的书。全书以“女士品茶”这一个早期的统计学实验开始，详细地叙述了一个多世纪以来统计学的诞生和发展的历史，在一个个精彩的人物和故事中将统计学各个领域的思想向读者进行了简明扼要的介绍。 在我看来，这本书的内容从学术的角度来说写得比较软，但是让这本书成为经典的不是其中的学术分析，而是其视野的独特和广阔。全书用了一百多页的篇幅将统计学历史以及现在的整个统计学发展轮廓涵盖其中，确实是让人入门统计的一本好读物。 这本书还有另一个让我觉得提升了其自身价值的地方，那就是它毫不避讳地指出了当下统计学中遇到的困境。比如现在统计学遇到的哲学困境：概率是什么？书中列举了三个尚未有定论的问题： 1.可以同统计模型来做决策吗？ 2.当概率应用于现实生活中时其含义是什么？ 3.人们真的懂得什么是概率吗？ 书中已经写到，数学家们已经通过公理化的方法稳固了概率论在数学上的地位，但是当下数学和生活密不可分，统计学更是在各个领域皆有用武之地。所以我们应该仔细地想想上面的三个问题。 一、可以用统计模型来做决策吗？ 按照最标准的数学史，概率论是从费马和帕斯卡研究一个赌徒所提出的问题而产生的。所以应该看出，概率论能够发展到今天，其实是由于大家需要进行决策所带来的动力。这门学科本身就是为了指导人类行为而产生的。但是这里问到的统计模型却又是另一回事。为了说明在这里遇到的困难，书上提到了一个显著性检验的悖论。假设显著性水平设定为0.0001，那么我们可以组织一次公正的10000张彩票的抽奖活动，其中只有一张只中奖券。按照这个假设，第一张彩票中奖的概率为0.0001，于是我们拒绝这个假设，依此类推，我们可以拒绝任何一张彩票中奖这个假设——但是，这些彩票中必然有一张会中奖。矛盾就在这里。 在我个人看来，其实这并不是矛盾。假设检验是有检验效能的，每一个断言都有错误的概率，对10000张彩票进行检验，要想不犯错的概率是非常低的。所以说我们可以同统计模型来做决策，但是不要将其结果当成断言，而是当成一种可能性分析，即这件事情发生的概率是多少。如果接受了概率，那么自然统计模型能够对我们做决策进行指导。 现在的问题转移到概率了。 二、当概率应用于现实生活中时其含义是什么？ 我准备在这里对概率在实际生活中进行一种比较科幻的解释，先说说物理学。 当科学家们开始研究量子力学的时候，发现对实验现象的描述不可避免地要使用概率论。双缝实验，不确定性原理，电子云等量子力学中出现的违反直觉的现象让大家开始思考，什么才是真实。爱因斯坦说过：上帝不玩骰子。但是物理学的发展似乎正在推翻这个结论。下面说一个物理学中的假想实验。在一个内部真空的盒子中放入一个电子，我们不去观测它。量子力学说，我们无法知道它究竟在哪。如果我们某一时刻用一块板子插进盒子将其分成两部分，那么电子必然在某一边——可是我们无法预测在哪一边！如果两部分体积相等，那么电子出现在某一边的概率就是50%。只有当我们实实在在地进行观测时才能够知道那个电子究竟被分到了哪一边。根据量子力学理论，观测之前这个电子既在这边又在那边！整个物理学以前从来没有接受过概率理论，那么显然，就算是为了爱因斯坦的那句话，物理学家中也必须有人做些什么。 于是有人在1957年革命性地提出了一个观点。这个人就是休·艾弗雷特三世，他的理论叫做“多世界诠释”。多世界诠释认为，观测时分离出多个平行宇宙，每个宇宙都有一个确定的状态，而我们只是在其中的一个特定宇宙。根据这个理论，我们观测上述的电子实验时，已经分离出了两个平行宇宙，一个是在左边，另一个是在右边。这两个宇宙会互不干扰地存在着。甚至可以这样理解，我每抛一次硬币，就会分离出一些平行宇宙，其中一些宇宙中的“我”得到了正面，另一些宇宙中的“我”得到了反面。于是我得到正面还是反面的概率实质上就等同于这一次抛掷硬币分离出的“正反宇宙”数量之比。 这个理论的一个优点在于，我们无需对概率进行更多的解释，物理学家已经帮我们避开了现实世界中所谓的“概率”。既然不存在概率，那么我们就不需要讨论概率在实际生活中代表什么了。 这个理论看上去有其很明显的缺陷。平行宇宙是一个一个的，也就是说最多分离出可数个。但是概率常常与无理数结合紧密，例如布丰的投针实验的概率就涉及到了圆周率。这种情况下无法使用“平行宇宙数量之比”进行研究。但是物理学家声称，宇宙中有最小的长度单位：普朗克长度。也就是说，我们的世界其实是离散的，由很微小的点“逼近”出一个连续的世界的模样。所以，数学上对连续空间中的概率分析恐怕在这里就不适用了，因此也不会出现无理数。至少在这一点上，使用平行宇宙来解释实际生活中的概率论没有什么问题。 三、人们真的懂得什么是概率吗？ 这是作者列出来的最后一个问题。看上去我对上一个问题的回答改变一下也可以套用在这里，但是鉴于作者的这个问题主要侧重于人们对概率的心理认知，于是我也从这个角度说说我的想法。 对于作者这一段的论述，我基本赞同苏佩斯那个简单的概率模型。人类的心理是模糊的，对概率这样尚未有正确认识的事物更是无法如手术刀般精准地划出上百个等级，只能分出一个大概。如同作者所说的：“天气预报员尽力想区分降雨概率90%和75%间的不同，但实际上他们根本不可能说清楚。” 不过话说回来，这些在概率上的精确有用吗？在赌博上，在经济运行上，概率应该确实是有用的。但是，就比如天气预报中的90%和75%，我会为了这两个概率没有到达100%而出门赌一把不带伞吗？当这些概率不能通过明白直接的计算得到一个期望，而我们却希望从中得到一些指导性意见时，人脑只能将其分成几个大类，有点类似“全部，大部分，一半，小部分，没有”这样的比例描述。这样的分类对于绝大部分情况都够用了，一般人心里都会这样做：把“大部分”当作“全部”，把“小部分”当成“没有”。至于“一半”的情况，我们常常会听到“我有硬币，你要不要抛一抛”之类的言论，也就是说其实我们对这种情况无法进行简单的优劣判断，需要外界来帮忙。 人类进行决策的时候更多依靠直觉而不是理性，所以说，是否对概率有了精确的理解对于人们的日常决策并没有多大的帮助。 小结 以上便是我在读完了《女士品茶》这本书后对概率的思考。统计学作为一门应用性学科，我们必须要对其理论与生活的结合有深刻的了解。我认为，在概率上进行的深刻思考对统计学的发展会有很大的作用。因此我对作者提出的几个概率论的问题进行了简单的思考。 书中所描述的20世纪是一个统计学蓬勃发展的世纪。我认为，21世纪是一个概率统计能够被每一个人所接受的世纪，概率将会成为每一个人的生活基本常识。这，大概需要一位书中时常提到的“还未出现的天才”来带领吧。 本文由 严酷的魔王 创作，转载或引用前请联系我们。相关文章： 统计与推理(3)：KTV里的骰子游戏 统计与推理(2)：置信区间 关于游客困境的见解
相关文章：<ol>
<li><a href='http://blog.programet.org/2010/08/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%863%ef%bc%9aktv%e9%87%8c%e7%9a%84%e9%aa%b0%e5%ad%90%e6%b8%b8%e6%88%8f.html' rel='bookmark' title='统计与推理(3)：KTV里的骰子游戏'>统计与推理(3)：KTV里的骰子游戏</a></li>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html' rel='bookmark' title='统计与推理(2)：置信区间'>统计与推理(2)：置信区间</a></li>
<li><a href='http://blog.programet.org/2008/08/blog-post_23.html' rel='bookmark' title='关于游客困境的见解'>关于游客困境的见解</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>统计推理是我们院统计专业新开的一门课，主要讲授一些统计学方面的知识，我非常喜欢这门学科，觉得其分析事物的角度非常有趣。目前我对统计学的认识还有局限，以后一定会写一些关于统计学的文章。我选的书是<a href="http://book.douban.com/subject/1626392/">《女士品茶》</a>，它是一本介绍统计学史以及大概思想的科普类书籍。下面贴出的这篇读书报告其实没有涉及多少书中的内容，主要是我自己的一些杂碎的思考。对于下文涉及到的任何物理类陈述，我绝对不保证其正确性……<span id="more-2554"></span></p>
<blockquote>
<p style="text-align: center;"><strong>《女士品茶》读书报告</strong></p>
<p style="text-align: right;">——关于概率的思考</p>
<p>《女士品茶》这本书按照作者的说法，是一本适合于不懂得或者略懂数学的人进行阅读的书。全书以“女士品茶”这一个早期的统计学实验开始，详细地叙述了一个多世纪以来统计学的诞生和发展的历史，在一个个精彩的人物和故事中将统计学各个领域的思想向读者进行了简明扼要的介绍。</p>
<p>在我看来，这本书的内容从学术的角度来说写得比较软，但是让这本书成为经典的不是其中的学术分析，而是其视野的独特和广阔。全书用了一百多页的篇幅将统计学历史以及现在的整个统计学发展轮廓涵盖其中，确实是让人入门统计的一本好读物。</p>
<p>这本书还有另一个让我觉得提升了其自身价值的地方，那就是它毫不避讳地指出了当下统计学中遇到的困境。比如现在统计学遇到的哲学困境：概率是什么？书中列举了三个尚未有定论的问题：</p>
<p>1.可以同统计模型来做决策吗？</p>
<p>2.当概率应用于现实生活中时其含义是什么？</p>
<p>3.人们真的懂得什么是概率吗？</p>
<p>书中已经写到，数学家们已经通过公理化的方法稳固了概率论在数学上的地位，但是当下数学和生活密不可分，统计学更是在各个领域皆有用武之地。所以我们应该仔细地想想上面的三个问题。</p>
<p><strong>一、可以用统计模型来做决策吗？</strong></p>
<p>按照最标准的数学史，概率论是从费马和帕斯卡研究一个赌徒所提出的问题而产生的。所以应该看出，概率论能够发展到今天，其实是由于大家需要进行决策所带来的动力。这门学科本身就是为了指导人类行为而产生的。但是这里问到的统计模型却又是另一回事。为了说明在这里遇到的困难，书上提到了一个显著性检验的悖论。假设显著性水平设定为0.0001，那么我们可以组织一次公正的10000张彩票的抽奖活动，其中只有一张只中奖券。按照这个假设，第一张彩票中奖的概率为0.0001，于是我们拒绝这个假设，依此类推，我们可以拒绝任何一张彩票中奖这个假设——但是，这些彩票中必然有一张会中奖。矛盾就在这里。</p>
<p>在我个人看来，其实这并不是矛盾。假设检验是有检验效能的，每一个断言都有错误的概率，对10000张彩票进行检验，要想不犯错的概率是非常低的。所以说我们可以同统计模型来做决策，但是不要将其结果当成断言，而是当成一种可能性分析，即这件事情发生的概率是多少。如果接受了概率，那么自然统计模型能够对我们做决策进行指导。</p>
<p>现在的问题转移到概率了。</p>
<p><strong>二、当概率应用于现实生活中时其含义是什么？</strong></p>
<p>我准备在这里对概率在实际生活中进行一种比较科幻的解释，先说说物理学。</p>
<p>当科学家们开始研究量子力学的时候，发现对实验现象的描述不可避免地要使用概率论。双缝实验，不确定性原理，电子云等量子力学中出现的违反直觉的现象让大家开始思考，什么才是真实。爱因斯坦说过：上帝不玩骰子。但是物理学的发展似乎正在推翻这个结论。下面说一个物理学中的假想实验。在一个内部真空的盒子中放入一个电子，我们不去观测它。量子力学说，我们无法知道它究竟在哪。如果我们某一时刻用一块板子插进盒子将其分成两部分，那么电子必然在某一边——可是我们无法预测在哪一边！如果两部分体积相等，那么电子出现在某一边的概率就是50%。只有当我们实实在在地进行观测时才能够知道那个电子究竟被分到了哪一边。根据量子力学理论，观测之前这个电子既在这边又在那边！整个物理学以前从来没有接受过概率理论，那么显然，就算是为了爱因斯坦的那句话，物理学家中也必须有人做些什么。</p>
<p>于是有人在1957年革命性地提出了一个观点。这个人就是休·艾弗雷特三世，他的理论叫做“多世界诠释”。多世界诠释认为，观测时分离出多个平行宇宙，每个宇宙都有一个确定的状态，而我们只是在其中的一个特定宇宙。根据这个理论，我们观测上述的电子实验时，已经分离出了两个平行宇宙，一个是在左边，另一个是在右边。这两个宇宙会互不干扰地存在着。甚至可以这样理解，我每抛一次硬币，就会分离出一些平行宇宙，其中一些宇宙中的“我”得到了正面，另一些宇宙中的“我”得到了反面。于是我得到正面还是反面的概率实质上就等同于这一次抛掷硬币分离出的“正反宇宙”数量之比。</p>
<p>这个理论的一个优点在于，我们无需对概率进行更多的解释，物理学家已经帮我们避开了现实世界中所谓的“概率”。既然不存在概率，那么我们就不需要讨论概率在实际生活中代表什么了。</p>
<p>这个理论看上去有其很明显的缺陷。平行宇宙是一个一个的，也就是说最多分离出可数个。但是概率常常与无理数结合紧密，例如布丰的投针实验的概率就涉及到了圆周率。这种情况下无法使用“平行宇宙数量之比”进行研究。但是物理学家声称，宇宙中有最小的长度单位：普朗克长度。也就是说，我们的世界其实是离散的，由很微小的点“逼近”出一个连续的世界的模样。所以，数学上对连续空间中的概率分析恐怕在这里就不适用了，因此也不会出现无理数。至少在这一点上，使用平行宇宙来解释实际生活中的概率论没有什么问题。</p>
<p><strong>三、人们真的懂得什么是概率吗？</strong></p>
<p>这是作者列出来的最后一个问题。看上去我对上一个问题的回答改变一下也可以套用在这里，但是鉴于作者的这个问题主要侧重于人们对概率的心理认知，于是我也从这个角度说说我的想法。</p>
<p>对于作者这一段的论述，我基本赞同苏佩斯那个简单的概率模型。人类的心理是模糊的，对概率这样尚未有正确认识的事物更是无法如手术刀般精准地划出上百个等级，只能分出一个大概。如同作者所说的：“天气预报员尽力想区分降雨概率90%和75%间的不同，但实际上他们根本不可能说清楚。”</p>
<p>不过话说回来，这些在概率上的精确有用吗？在赌博上，在经济运行上，概率应该确实是有用的。但是，就比如天气预报中的90%和75%，我会为了这两个概率没有到达100%而出门赌一把不带伞吗？当这些概率不能通过明白直接的计算得到一个期望，而我们却希望从中得到一些指导性意见时，人脑只能将其分成几个大类，有点类似“全部，大部分，一半，小部分，没有”这样的比例描述。这样的分类对于绝大部分情况都够用了，一般人心里都会这样做：把“大部分”当作“全部”，把“小部分”当成“没有”。至于“一半”的情况，我们常常会听到“我有硬币，你要不要抛一抛”之类的言论，也就是说其实我们对这种情况无法进行简单的优劣判断，需要外界来帮忙。</p>
<p>人类进行决策的时候更多依靠直觉而不是理性，所以说，是否对概率有了精确的理解对于人们的日常决策并没有多大的帮助。</p>
<p><strong>小结</strong></p>
<p>以上便是我在读完了《女士品茶》这本书后对概率的思考。统计学作为一门应用性学科，我们必须要对其理论与生活的结合有深刻的了解。我认为，在概率上进行的深刻思考对统计学的发展会有很大的作用。因此我对作者提出的几个概率论的问题进行了简单的思考。</p>
<p>书中所描述的20世纪是一个统计学蓬勃发展的世纪。我认为，21世纪是一个概率统计能够被每一个人所接受的世纪，概率将会成为每一个人的生活基本常识。这，大概需要一位书中时常提到的“还未出现的天才”来带领吧。</p></blockquote>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2010/08/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%863%ef%bc%9aktv%e9%87%8c%e7%9a%84%e9%aa%b0%e5%ad%90%e6%b8%b8%e6%88%8f.html' rel='bookmark' title='统计与推理(3)：KTV里的骰子游戏'>统计与推理(3)：KTV里的骰子游戏</a></li>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html' rel='bookmark' title='统计与推理(2)：置信区间'>统计与推理(2)：置信区间</a></li>
<li><a href='http://blog.programet.org/2008/08/blog-post_23.html' rel='bookmark' title='关于游客困境的见解'>关于游客困境的见解</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/06/%e6%99%92%ef%bc%9a%e7%bb%9f%e8%ae%a1%e6%8e%a8%e7%90%86%e8%af%bb%e4%b9%a6%e6%8a%a5%e5%91%8a%e2%80%94%e2%80%94%e5%85%b3%e4%ba%8e%e6%a6%82%e7%8e%87%e7%9a%84%e6%80%9d%e8%80%83.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>从(0,1]×(0,1]到(0,1]的双射</title>
		<link>http://blog.programet.org/2010/04/%e4%bb%8e01%c3%9701%e5%88%b001%e7%9a%84%e5%8f%8c%e5%b0%84.html</link>
		<comments>http://blog.programet.org/2010/04/%e4%bb%8e01%c3%9701%e5%88%b001%e7%9a%84%e5%8f%8c%e5%b0%84.html#comments</comments>
		<pubDate>Wed, 28 Apr 2010 16:28:37 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[无穷]]></category>
		<category><![CDATA[证明]]></category>
		<category><![CDATA[趣题]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2358</guid>
		<description><![CDATA[离散上集合论终于上到激动人心的时刻了：无限集合。想当年我比现在还稚嫩的时候，第一次觉得数学神奇就是在领略无穷的时候。其实我蛮喜欢这个离散老师的，因为他还保持着对数学的一点点激动，说到选择公理和罗素悖论的时候显得蛮兴奋的~不过有很多东西在课上不能展开来说。今天他在作业里面加了一道附加题，意思就是让我们证明和是等势的，也就是说我们能找到一个从到的双射。这个直观上还是有些难以想象：一块面和一条线段会相等吗？我上课的时候就在思考这个问题，想了挺久，然后得到了一个比较复杂的方法。 这个双射的难点就在于，我必须要有办法从z还原出两个不重复的值。可惜我十几分钟都没有想到怎么使用初等函数够造出这样的函数(- -&#124;&#124;&#124;)，于是我决定换一个角度来思考这个问题。 受到经典的对角线法的启发，我突然想到可以尝试逐位讨论小数点后的数字。于是，一个大概的雏形就出来了：记 。 那么我令 ， 这样我们就可以从z还原出x和y了。不过现在多了一个问题：如果 ， 那么我们就还原出了 ， 那这个实质上就是而不是上的点了。那么我们索性定义x,y是属于，这样映射出来的z就属于。如果我们能够再找到一个双射从到，另一个双射从到，那么我们就可以传递式地得到一个从到的双射。 这两个双射都是比较好构造的。先看一维的那个吧，因为二维的要用到它。这个双射可以定义为一个分段函数: 。 这样就ok了。那么二维的双射呢？只需要将映射到就好了，定义这个映射为。再令之前的二维到一维的函数为，则我们所要求的映射 ， 意即 显然这是一个双射。终于达成~ 其实我觉得这个是不是复杂了？感觉一定会存在一个很巧妙的分段函数……应用到了z的某一个性质，能够分解成两个唯一的数的关系。可能是在一个方程中设立两个参数，让参数与方程的解对应起来……恩，坐等老师的想法，估计半个月后更新。读者有什么想法也在下面留言吧~ 本文由 严酷的魔王 创作，转载或引用前请联系我们。相关文章： 素数有无穷多个的另类证明（一）：两两互素的无穷序列 素数有无穷多个的另类证明（三）：被遗忘的证明 用极限证明伯努利不等式
相关文章：<ol>
<li><a href='http://blog.programet.org/2009/11/%e7%b4%a0%e6%95%b0%e6%9c%89%e6%97%a0%e7%a9%b7%e5%a4%9a%e4%b8%aa%e7%9a%84%e5%8f%a6%e7%b1%bb%e8%af%81%e6%98%8e%ef%bc%88%e4%b8%80%ef%bc%89%ef%bc%9a%e4%b8%a4%e4%b8%a4%e4%ba%92%e7%b4%a0%e7%9a%84%e6%97%a0.html' rel='bookmark' title='素数有无穷多个的另类证明（一）：两两互素的无穷序列'>素数有无穷多个的另类证明（一）：两两互素的无穷序列</a></li>
<li><a href='http://blog.programet.org/2009/12/%e7%b4%a0%e6%95%b0%e6%9c%89%e6%97%a0%e7%a9%b7%e5%a4%9a%e4%b8%aa%e7%9a%84%e5%8f%a6%e7%b1%bb%e8%af%81%e6%98%8e%ef%bc%88%e4%b8%89%ef%bc%89%ef%bc%9a%e8%a2%ab%e9%81%97%e5%bf%98%e7%9a%84%e8%af%81%e6%98%8e.html' rel='bookmark' title='素数有无穷多个的另类证明（三）：被遗忘的证明'>素数有无穷多个的另类证明（三）：被遗忘的证明</a></li>
<li><a href='http://blog.programet.org/2009/09/%e7%94%a8%e6%9e%81%e9%99%90%e8%af%81%e6%98%8e%e4%bc%af%e5%8a%aa%e5%88%a9%e4%b8%8d%e7%ad%89%e5%bc%8f.html' rel='bookmark' title='用极限证明伯努利不等式'>用极限证明伯努利不等式</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>离散上集合论终于上到激动人心的时刻了：无限集合。想当年我<a href="http://blog.programet.org/2008/10/mo.html">比现在还稚嫩</a>的时候，第一次觉得数学神奇就是在领略无穷的时候。其实我蛮喜欢这个离散老师的，因为他还保持着对数学的一点点激动，说到选择公理和罗素悖论的时候显得蛮兴奋的~不过有很多东西在课上不能展开来说。今天他在作业里面加了一道附加题，意思就是让我们证明<img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D%5Ctimes%20%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]\times (0,1]' title='(0,1]\times (0,1]' class='latex' />和<img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]' title='(0,1]' class='latex' />是等势的，也就是说我们能找到一个从<img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D%5Ctimes%20%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]\times (0,1]' title='(0,1]\times (0,1]' class='latex' />到<img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]' title='(0,1]' class='latex' />的双射。这个直观上还是有些难以想象：一块面和一条线段会相等吗？我上课的时候就在思考这个问题，想了挺久，然后得到了一个比较复杂的方法。</p>
<p><span id="more-2358"></span></p>
<p>这个双射的难点就在于，我必须要有办法从z还原出两个不重复的值。可惜我十几分钟都没有想到怎么使用初等函数够造出这样的函数(- -|||)，于是我决定换一个角度来思考这个问题。</p>
<p style="text-align: left;">受到经典的对角线法的启发，我突然想到可以尝试逐位讨论小数点后的数字。于是，一个大概的雏形就出来了：记</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=x%3D0.x_1%20x_2%20x_3%20%5Ccdots%2Cy%3D0.y_1%20y_2%20y_3%20%5Ccdots%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='x=0.x_1 x_2 x_3 \cdots,y=0.y_1 y_2 y_3 \cdots ' title='x=0.x_1 x_2 x_3 \cdots,y=0.y_1 y_2 y_3 \cdots ' class='latex' />。</p>
<p>那么我令</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=z%3D0.x_1%20y_1%20x_2%20y_2%5Ccdots&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='z=0.x_1 y_1 x_2 y_2\cdots' title='z=0.x_1 y_1 x_2 y_2\cdots' class='latex' />，</p>
<p>这样我们就可以从z还原出x和y了。不过现在多了一个问题：如果</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=z%3D0.x_1%200%20x_2%200%20x_3%200%5Ccdots&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='z=0.x_1 0 x_2 0 x_3 0\cdots' title='z=0.x_1 0 x_2 0 x_3 0\cdots' class='latex' />，</p>
<p>那么我们就还原出了</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=y%3D0.000000%3D0&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='y=0.000000=0' title='y=0.000000=0' class='latex' />，</p>
<p>那这个实质上就是<img src='http://s.wordpress.com/latex.php?latex=%20%5B0%2C1%5D%20%5Ctimes%20%5B0%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' [0,1] \times [0,1]' title=' [0,1] \times [0,1]' class='latex' />而不是<img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D%5Ctimes%20%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]\times (0,1]' title='(0,1]\times (0,1]' class='latex' />上的点了。那么我们索性定义x,y是属于<img src='http://s.wordpress.com/latex.php?latex=%5B0%2C1%5D%5Ctimes%20%5B0%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='[0,1]\times [0,1]' title='[0,1]\times [0,1]' class='latex' />，这样映射出来的z就属于<img src='http://s.wordpress.com/latex.php?latex=%5B0%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='[0,1]' title='[0,1]' class='latex' />。如果我们能够再找到一个双射从<img src='http://s.wordpress.com/latex.php?latex=%20%5B0%2C1%5D%20%5Ctimes%20%5B0%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' [0,1] \times [0,1]' title=' [0,1] \times [0,1]' class='latex' />到<img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D%5Ctimes%20%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]\times (0,1]' title='(0,1]\times (0,1]' class='latex' />，另一个双射从<img src='http://s.wordpress.com/latex.php?latex=%5B0%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='[0,1]' title='[0,1]' class='latex' />到<img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]' title='(0,1]' class='latex' />，那么我们就可以传递式地得到一个从<img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D%5Ctimes%20%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]\times (0,1]' title='(0,1]\times (0,1]' class='latex' />到<img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]' title='(0,1]' class='latex' />的双射。</p>
<p>这两个双射都是比较好构造的。先看一维的那个吧，因为二维的要用到它。这个双射可以定义为一个分段函数:</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=%20f%280%29%20%3D%5Cfrac%7B1%7D%7B2%7D%2Cf%28%5Cfrac%7B1%7D%7Bn%7D%29%3D%5Cfrac%7B1%7D%7Bn%2B1%7D%2C%28n%5Cgeq%202%29%2Cf%28x%29%3Dx&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' f(0) =\frac{1}{2},f(\frac{1}{n})=\frac{1}{n+1},(n\geq 2),f(x)=x' title=' f(0) =\frac{1}{2},f(\frac{1}{n})=\frac{1}{n+1},(n\geq 2),f(x)=x' class='latex' />。</p>
<p>这样就ok了。那么二维的双射呢？只需要将<img src='http://s.wordpress.com/latex.php?latex=%28x%2Cy%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(x,y)' title='(x,y)' class='latex' />映射到<img src='http://s.wordpress.com/latex.php?latex=%28f%28x%29%2Cf%28y%29%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(f(x),f(y))' title='(f(x),f(y))' class='latex' />就好了，定义这个映射为<img src='http://s.wordpress.com/latex.php?latex=F%28x%2Cy%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='F(x,y)' title='F(x,y)' class='latex' />。再令之前的二维到一维的函数为<img src='http://s.wordpress.com/latex.php?latex=G%28x%2Cy%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='G(x,y)' title='G(x,y)' class='latex' />，则我们所要求的映射</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=M%28x%2Cy%29%3Df%28G%28F%5E%7B-1%7D%28x%2Cy%29%29%29%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='M(x,y)=f(G(F^{-1}(x,y))))' title='M(x,y)=f(G(F^{-1}(x,y))))' class='latex' />，</p>
<p>意即</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=%280%2C1%5D%5Ctimes%20%280%2C1%5D%5Cleftrightarrow%20%5B0%2C1%5D%5Ctimes%20%5B0%2C1%5D%5Cleftrightarrow%20%5B0%2C1%5D%5Cleftrightarrow%20%280%2C1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='(0,1]\times (0,1]\leftrightarrow [0,1]\times [0,1]\leftrightarrow [0,1]\leftrightarrow (0,1]' title='(0,1]\times (0,1]\leftrightarrow [0,1]\times [0,1]\leftrightarrow [0,1]\leftrightarrow (0,1]' class='latex' /></p>
<p>显然这是一个双射。终于达成~</p>
<p>其实我觉得这个是不是复杂了？感觉一定会存在一个很巧妙的分段函数……应用到了z的某一个性质，能够分解成两个唯一的数的关系。可能是在一个方程中设立两个参数，让参数与方程的解对应起来……恩，坐等老师的想法，估计半个月后更新。读者有什么想法也在下面留言吧~</p>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2009/11/%e7%b4%a0%e6%95%b0%e6%9c%89%e6%97%a0%e7%a9%b7%e5%a4%9a%e4%b8%aa%e7%9a%84%e5%8f%a6%e7%b1%bb%e8%af%81%e6%98%8e%ef%bc%88%e4%b8%80%ef%bc%89%ef%bc%9a%e4%b8%a4%e4%b8%a4%e4%ba%92%e7%b4%a0%e7%9a%84%e6%97%a0.html' rel='bookmark' title='素数有无穷多个的另类证明（一）：两两互素的无穷序列'>素数有无穷多个的另类证明（一）：两两互素的无穷序列</a></li>
<li><a href='http://blog.programet.org/2009/12/%e7%b4%a0%e6%95%b0%e6%9c%89%e6%97%a0%e7%a9%b7%e5%a4%9a%e4%b8%aa%e7%9a%84%e5%8f%a6%e7%b1%bb%e8%af%81%e6%98%8e%ef%bc%88%e4%b8%89%ef%bc%89%ef%bc%9a%e8%a2%ab%e9%81%97%e5%bf%98%e7%9a%84%e8%af%81%e6%98%8e.html' rel='bookmark' title='素数有无穷多个的另类证明（三）：被遗忘的证明'>素数有无穷多个的另类证明（三）：被遗忘的证明</a></li>
<li><a href='http://blog.programet.org/2009/09/%e7%94%a8%e6%9e%81%e9%99%90%e8%af%81%e6%98%8e%e4%bc%af%e5%8a%aa%e5%88%a9%e4%b8%8d%e7%ad%89%e5%bc%8f.html' rel='bookmark' title='用极限证明伯努利不等式'>用极限证明伯努利不等式</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/04/%e4%bb%8e01%c3%9701%e5%88%b001%e7%9a%84%e5%8f%8c%e5%b0%84.html/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>推荐时间：初探思维导图</title>
		<link>http://blog.programet.org/2010/04/%e6%8e%a8%e8%8d%90%e6%97%b6%e9%97%b4%ef%bc%9a%e5%88%9d%e6%8e%a2%e6%80%9d%e7%bb%b4%e5%af%bc%e5%9b%be.html</link>
		<comments>http://blog.programet.org/2010/04/%e6%8e%a8%e8%8d%90%e6%97%b6%e9%97%b4%ef%bc%9a%e5%88%9d%e6%8e%a2%e6%80%9d%e7%bb%b4%e5%af%bc%e5%9b%be.html#comments</comments>
		<pubDate>Sat, 17 Apr 2010 18:36:54 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[科普]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[智慧]]></category>
		<category><![CDATA[策略]]></category>
		<category><![CDATA[自由]]></category>

		<guid isPermaLink="false">http://blog.programet.org/?p=2327</guid>
		<description><![CDATA[（准确地说应该是）昨天，xxy发给我一个软件Mindjet MindManager Pro 6——是一个帮助制作思维导图的软件。思维导图我以前就听说过了，但是一直都没有认真地去研究和使用这个东西。不过昨天我确实是意识到了这个玩意的强大之处。 华东数模邀请赛17号开始，于是我和zxy以及wzq开始了青涩的数模之路的第一天——杯具的是题目前一天晚上就发布了……不过对于我们这种大一的来说，选题其实是一个很简单的事情。于是我们断断续续地开始了讨论。下午和wzq在宿舍讨论了一个多小时，他就有事闪人了（一个星期的数模比赛时间真是……轻松啊）。我留在宿舍又无所事事，正好xxy把这个东西（- -附带了keygen的）丢给了我。 这个软件还挺和谐的，有着比较详细的上手动画教程，令我等新手马上就可以知道用法与最基本的快捷键。之前我和wzq讨论时将东西都列在草稿纸上，感觉很散乱。所以我尝试了一下用思维导图的方式来表达我们的讨论结果。感想就是：虽然思维导图本身的想法简单，但是却与按行文格式来思考的传统方式有着很大的区别。思维导图最大的优点就是他的散射状。一旦所有的句子与陈述都铺排在一张大大的纸上，我就突然感觉到了各个东西之间的关联。估计还是因为普通列表的结构本质上是一维的，所以各个部分之间如果有着复杂的联系难以关联起来，只能像代码缩进一样标示某一块相关联内容的层级。而思维导图本身是二维的，同时长得有点像多叉树，无论是视觉上还是逻辑上都有很清晰的层次结构。个人认为二维结构带来的最大好处就是对内容的变化可以很好的控制，比如我在使用传统列表的方式进行记录整理，突然间想加入一个关键的二级内容，突然发现该插入的地方已经写下了其他的东西，怎么办？只能加个插入号然后往旁边挤着塞进去，这样一来既不美观又破坏了原有的代码缩进式的层次表示。用思维导图就不会遇到这样的问题，直接画一条线延伸到空地，然后该写啥写啥。下面这图就是一个纯粹展示结构的例子，topic部分没有作修改——有没有很直观很清晰的感觉？ 我鼓捣完这些东西就去排球队训练了（果然一个星期很闲……）。晚上三个人终于一起凑在我宿舍，开始头脑风暴——这种信息量暴涨的思维模式，使用思维导图来管理自然比在纸上列表要清晰很多。不知不觉中，我们的导图已经丰满出了各种的枝条——想想要是我们的草稿已经列了3张纸，那整理思维的时候应该是多么的悲剧！ 所以我推荐给每一个要进行创作的童鞋尝试一下思维导图这种帮助自己管理杂乱思绪的有趣方式。虽然最开始的导图都是用手绘的，但是为了方便起见我还是推荐使用电脑上的软件来制作管理。我使用的MindManager功能还不错，除了本身的默认编辑格式外，这个软件还能够将自己的导图保存成pdf,png,bmp,jpg等各种格式，方便随处研究与转移。在上面给出的维基词条里也附了一串软件，其中也不乏优秀的开源软件。这里是Tony Buzan——导图的发明人所写的六本关于使用导图的书，大家也可以去进阶地学习一下。希望我的推荐对各位读者的学习工作有所帮助。 P.S:我好像很久没有写blog了~主要是最近忙乱不堪，而且疲于作业，没有碰见什么让我眼前一亮的东西……前两天叶子还警告我我的文章已经退出首页了，大惊——我千万不要变成Malloc。正好今日有感于导图，遂夜中写下此文。 本文由 严酷的魔王 创作，转载或引用前请联系我们。相关文章： 推荐时间：与机器人对话 推荐时间：Bugbrain 推荐时间：把多米诺放平来玩
相关文章：<ol>
<li><a href='http://blog.programet.org/2009/01/blog-post_01.html' rel='bookmark' title='推荐时间：与机器人对话'>推荐时间：与机器人对话</a></li>
<li><a href='http://blog.programet.org/2009/01/bugbrain.html' rel='bookmark' title='推荐时间：Bugbrain'>推荐时间：Bugbrain</a></li>
<li><a href='http://blog.programet.org/2008/08/blog-post_27-2.html' rel='bookmark' title='推荐时间：把多米诺放平来玩'>推荐时间：把多米诺放平来玩</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>（准确地说应该是）昨天，xxy发给我一个软件Mindjet MindManager Pro 6——是一个帮助制作<a href="http://zh.wikipedia.org/zh-cn/%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE">思维导图</a>的软件。思维导图我以前就听说过了，但是一直都没有认真地去研究和使用这个东西。不过昨天我确实是意识到了这个玩意的强大之处。</p>
<p><span id="more-2327"></span></p>
<p>华东数模邀请赛17号开始，于是我和zxy以及wzq开始了青涩的数模之路的第一天——杯具的是题目前一天晚上就发布了……不过对于我们这种大一的来说，选题其实是一个很简单的事情。于是我们断断续续地开始了讨论。下午和wzq在宿舍讨论了一个多小时，他就有事闪人了（一个星期的数模比赛时间真是……轻松啊）。我留在宿舍又无所事事，正好xxy把这个东西（- -附带了keygen的）丢给了我。</p>
<p>这个软件还挺和谐的，有着比较详细的上手动画教程，令我等新手马上就可以知道用法与最基本的快捷键。之前我和wzq讨论时将东西都列在草稿纸上，感觉很散乱。所以我尝试了一下用思维导图的方式来表达我们的讨论结果。感想就是：虽然思维导图本身的想法简单，但是却与按行文格式来思考的传统方式有着很大的区别。思维导图最大的优点就是他的散射状。一旦所有的句子与陈述都铺排在一张大大的纸上，我就突然感觉到了各个东西之间的关联。估计还是因为普通列表的结构本质上是一维的，所以各个部分之间如果有着复杂的联系难以关联起来，只能像代码缩进一样标示某一块相关联内容的层级。而思维导图本身是二维的，同时长得有点像多叉树，无论是视觉上还是逻辑上都有很清晰的层次结构。个人认为二维结构带来的最大好处就是对内容的变化可以很好的控制，比如我在使用传统列表的方式进行记录整理，突然间想加入一个关键的二级内容，突然发现该插入的地方已经写下了其他的东西，怎么办？只能加个插入号然后往旁边挤着塞进去，这样一来既不美观又破坏了原有的代码缩进式的层次表示。用思维导图就不会遇到这样的问题，直接画一条线延伸到空地，然后该写啥写啥。下面这图就是一个纯粹展示结构的例子，topic部分没有作修改——有没有很直观很清晰的感觉？<img class="alignleft size-full wp-image-2333" title="思维导图样例" src="http://blog.programet.org/wp-content/uploads/Map2.gif" alt="" width="444" height="240" /></p>
<p>我鼓捣完这些东西就去排球队训练了（果然一个星期很闲……）。晚上三个人终于一起凑在我宿舍，开始头脑风暴——这种信息量暴涨的思维模式，使用思维导图来管理自然比在纸上列表要清晰很多。不知不觉中，我们的导图已经丰满出了各种的枝条——想想要是我们的草稿已经列了3张纸，那整理思维的时候应该是多么的悲剧！</p>
<p>所以我推荐给每一个要进行创作的童鞋尝试一下思维导图这种帮助自己管理杂乱思绪的有趣方式。虽然最开始的导图都是用手绘的，但是为了方便起见我还是推荐使用电脑上的软件来制作管理。我使用的MindManager功能还不错，除了本身的默认编辑格式外，这个软件还能够将自己的导图保存成pdf,png,bmp,jpg等各种格式，方便随处研究与转移。在上面给出的维基词条里也附了一串软件，其中也不乏优秀的开源软件。<a href="ed2k://|file|%E3%80%90%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE%E4%B8%9B%E4%B9%A6(%E5%85%A8%E5%85%AD%E5%86%8C)(PDF)%E3%80%91.rar|35558169|FF9235CDD566854EA16B2A7A1C5A8A57|/">这里</a>是Tony Buzan——导图的发明人所写的六本关于使用导图的书，大家也可以去进阶地学习一下。希望我的推荐对各位读者的学习工作有所帮助。</p>
<p>P.S:我好像很久没有写blog了~主要是最近忙乱不堪，而且疲于作业，没有碰见什么让我眼前一亮的东西……前两天叶子还警告我我的文章已经退出首页了，大惊——我千万不要变成Malloc。正好今日有感于导图，遂夜中写下此文。</p>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2009/01/blog-post_01.html' rel='bookmark' title='推荐时间：与机器人对话'>推荐时间：与机器人对话</a></li>
<li><a href='http://blog.programet.org/2009/01/bugbrain.html' rel='bookmark' title='推荐时间：Bugbrain'>推荐时间：Bugbrain</a></li>
<li><a href='http://blog.programet.org/2008/08/blog-post_27-2.html' rel='bookmark' title='推荐时间：把多米诺放平来玩'>推荐时间：把多米诺放平来玩</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2010/04/%e6%8e%a8%e8%8d%90%e6%97%b6%e9%97%b4%ef%bc%9a%e5%88%9d%e6%8e%a2%e6%80%9d%e7%bb%b4%e5%af%bc%e5%9b%be.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>译：ACM中队员的合作策略</title>
		<link>http://blog.programet.org/2009/12/%e8%af%91%ef%bc%9aacm%e4%b8%ad%e9%98%9f%e5%91%98%e7%9a%84%e5%90%88%e4%bd%9c%e7%ad%96%e7%95%a5.html</link>
		<comments>http://blog.programet.org/2009/12/%e8%af%91%ef%bc%9aacm%e4%b8%ad%e9%98%9f%e5%91%98%e7%9a%84%e5%90%88%e4%bd%9c%e7%ad%96%e7%95%a5.html#comments</comments>
		<pubDate>Tue, 15 Dec 2009 06:15:50 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[计算机]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[智慧]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://blog.programet.cn/?p=1781</guid>
		<description><![CDATA[最近刚刚开始认真的ACM…于是去网上找了找关于合作方面的内容，找到一篇E文的，不知道作者是谁。我看了看，感觉还不错，准备收藏。但是一想总觉得看E文的水平毕竟欠佳，没有中文一目十行的那种快感。于是我将其简单地翻译了一下，懒得润色了，还是贴了出来，方便大家的阅读与交流。因为翻译上的缺陷在所难免，所以我已经做好了被拍砖的准备TT……原文的txt版点击这里下载。 简介 自1977以来就有了ACM。这项由资格赛和决赛逐级递进的竞赛为大学生提供了磨砺自己的机会。三个学生要在5小时内用一台电脑解出尽可能多的问题。解出最多问题的队伍就是冠军——解出问题指的是对每个输入都给出了正确的输出。虽然说队员的个人能力很重要，但是如果想要登峰造极，队员们之间还需要有效地配合。我们作为1995年世界决赛的参赛者（我们仨中的两人还参加了1994年的），倒是总结出了不少团队合作的策略。 我们准备在这篇文章里总结我们这么多场比赛的经验，希望这对想参加ACM（或者其他比赛）的你有用。 最基础的东西：练习，练习，练习！！ 因为三个人手头只有一台电脑，所以良好的合作是非常必要的。当然，为了让策略更有效，你首先必须尽力提高自己的能力。你不一定要是一个天才，因为勤奋与刻苦也可以让你走得很远。我们认为，一个队伍是否出色取决于下面三点： 对经典算法的了解以及找到每一个问题的算法的能力； 编码实现算法的能力； 队友之间有效的沟通策略。 这篇文章将重点阐述第三点。不过仍然会有一些提高个人能力的建议。 我们分析了以前的比赛题目，发现同类型的题目不断地出现——可以分类为以下五个类型： 搜索类题目。这些题目需要对很多的情况进行考察以找出最佳的一种。因为搜索最头疼的是时间限制，所以说你应该多注意算法的时间复杂度。 图论问题。这些问题有特殊的可以转化为一个图的性质，所以可以用经典算法来解决。 几何问题。主要是形状，线段以及角度的问题。 模拟题。这些题目的算法很容易想到，但是细致的编码则常常需要很长的时间。 杂题。 你可以在各种资料里面找到前三类问题的算法，你要做的就是事先编好他们的代码然后带到赛场。这样你就可以避免总是犯下同样的（小）错误，然后集中精力对付问题真正困难的那部分。 练习的另一个目的是高效地编程。这并不意味着你要飞速地敲打键盘然后花上海量时间进行调试。相反，应该把问题想清楚，考虑每一种有可能出现的情况，然后开始编码，要保证你的编码能够将调试的时间减少至最低——通常调试都会用掉大量的宝贵时间。 为了磨合一个队伍，做大量的仿真练习是必要的：5小时，一台机器，三个人以及一个评测系统。 团队合作策略的理论 当你的算法和编码水平到了一个难以进一步提高的境界时，改善你们的合作策略会在你冲顶的助你一臂之力。我们和很多不同的队友使用不同的策略练习比赛很多年了，同时发现很多其他队伍也这样做。从中我们归纳出了一套如何让一个队伍最优化的理论。不过，改良策略不一定是必要的：1995年的世界冠军弗赖堡大学只是一支新手队，1994年的西北欧冠军华沙大学的队员们在赛前2个星期才互相认识。 为什么合作策略这么重要？比赛的时候只有一台电脑，所以大家要共用它。问题要被分成几块。为什么不让全队人共同参与呢？“各有所长”(Specialization)是一个很好的分工合作的依据。如果每一个队员都是解决某一类问题的专家，那么他们自然对这类问题的编码更确定，也有可能实现的动作更迅速。对于其他方面，“各有所长”也是很有用的。比如某一个队员是击打键盘的好手但是对设计算法不是很擅长，而另一个队员是算法专家但是不能很流畅地实现算法——他们合作的成果就是能够流畅解决复杂问题的代码！ 另一个分工合作的办法就是让两个人分析所有的问题。两双眼睛看得更清楚，也能更准确地判断一道题目的难度。在早期形成一个“思维坦克”(Think Tank)对找到最合适的题目以及对应的算法非常有帮助。不过，一旦把算法分析透彻了，就只能让一个人进行编码。 经验告诉我们，最有效的编码方式就是一个人完成。这样可以避免相互交流的时候由编程风格的差异造成的混乱——即使你们尽量使用相同的变量名和函数风格，这样的差异仍然是不可避免的。一个人编码能让3*1等于4. 其他的注意事项 因为最后的排名是根据AC的题目数量以及（如果数量相等）运行所有程序花去的时间之和。所以一支队伍应该在5小时里面尽可能地AC，将耗时视为其次的目标。每一次比赛都有队伍在前三个小时内都处在前六名的位置上，但是最后连前十都没有进，相反的过程也经常发生。因此一个长期的策略非常重要：尽量最优化15个人力小时以及5小时的计算机时间，而不要去担心如何最快AC前两题。 为了珍惜宝贵的时间，尽量完成每一个已经动手了的问题。一个已经解决了99%的问题对你们来说没有任何意义。一开始就应该分析清楚题目难易（比如使用“思维坦克”策略）以避免你本就无法完成的题目，或者是防止放过一道伪装得很好的水题。你需要对问题的难度有一个很好的嗅觉，这是选出5小时内你能完成的问题的唯一方法。 因为永远不可能得到最准确的信息，所以你必须冒险。如果你采取了高风险的策略——准备着手解决大量的问题，可能最后你的排名位于后半区，同时电脑上有一堆解决了90%的题目——或者你会笑到最后。反过来，选择比较平稳的策略——选择少量问题，一般就会让你在前4个半小时内完美地AC他们，但是剩下的时间对于一个新问题来说又太短了，这样就浪费了10%的比赛时间。 时间规划应该成为你的策略的一部分。如果你准备对一个难题问题下手，那么请立刻动手，否则你难以完成它。虽然这听起来没什么，但是有很多队伍刚开始选择了小问题，迅速切掉，然后比赛结束时一共也就AC了三题——因为他们没有解决难题。我们认为最后的一个半小时内应该最优先考虑调试而不是新题。如果你在比赛的晚期又开始了一题，那么比赛的最后时刻（最后一个半小时）将成为一个瓶颈。 显然，对最后时刻的安排是决定性的。虽然绝大部分的程序都比较小（不超过100行），最后时刻仍然是一个瓶颈：三个人都想好好利用电脑来做自己的程序。怎么样解决这个问题？首先要记住：坐在电脑前永远只能打字，而不能思考。将你的程序写在纸上，一直到最后一个分号。这样一来你通常都会有一个更好的全局观念，同时你可以仔细考虑每一种特殊情况而不必担心旁边有人虎视眈眈你掌控着的电脑。一旦你写完了整个程序，录入进电脑就不会超过15分钟。虽然你应该避免调试（如果你在纸上写得很认真，那么这是有可能的），但你真正调试的时候应该这样做：从你的程序中收集尽可能多的数据然后和你的代码一起打印出来，然后进行分析。动态跟踪调试是无比罪恶的事情。 一些策略样例： 1.最简单的策略 这条策略对于新手或者是不想沉沦于题海中的人来说非常实用，当然这条策略基本没有什么很好的效果。基本思想就是各做个的题目然后将交流的时间降至最低。每一个人都读一道题，然后挑出一个进行编码。完成一个之后就接着下一个。 这种方法的好处就在于基本上不用练习，程序运行耗时被降到最低——因为最简单的问题最先被解决。但是有几个缺点很明显：因为最早被解决的问题通常都是一样水的题目，那么三个人都会在差不多的时间内完成他的程序，所以在最后，电脑的使用权就会引起冲突。另外，只有最简单的程序被解决因为没有时间剩给难题了。最后可以得出这样的结论：假设你的编程水平不算差，那么你们队就应该能解决三到四题。这会使你的耗时很少，可能进入前十，但是不太可能进入前三。 2.终结者策略 在终结者策略中，只有一位队员T在使用电脑。另外两位则负责分析问题，将算法和代码的关键部分写下，然这时后T应该要完成必要的输入输出部分。当算法完成时，T就开始打字，如果必要还应该简单调试一下。如果bug难以发现那么这题算法的设计者就过来一起调试。 这种方法的好处在于最后时刻不再是瓶颈，同时解决问题的不同过程交给了不同的人。这个方法的一个缺点就是T在打字之外没能发挥任何的作用，只是像一个秘书一样。如果你是唯一一个比较熟悉编程环境的人，那么这可能是一个好方法。你可以一开始在队友思考的时候打出大段大段的基础代码作为热身。是否选择这个方法与你在这支队伍中的地位关系密切。 3.思维坦克 我们自己赛前练习以及在1995年总决赛上使用的策略就是前文提到的“思维坦克”策略（Think Tank,TT——套套？）。我们感觉在早期选择和分析问题是一个决定性的步骤，所以不能只让一个人来完成。队内两名最擅长问题分析的人组成了套套，同时开始读题，同时第三个人就在电脑上面打一些常用的程序段以及所有的测试数据，并且要确定准确无误。15分钟过后，套套简单地讨论了一下问题同时选出最适合第三个人的题目。交流过核心思想之后他们就可以开始工作了。然后套套将所有的问题都彻底讨论一遍，并将主要思想写下来。我们发现两个人讨论一道难题经常会出现富有创造性的方法。估计一个小时后，套套对整个问题都有了了解，同时找到了所有的算法。接下来的关键就是你想解决多少问题。最短或者最容易的问题通常都交给第三个人，然后套套就瓜分了剩下的问题。 最后时刻只是用来将纸上的代码誊到电脑上，或者是解决一个有bug的程序。如果一个程序没有AC却又找不到错误，那么就将其放到一边直至最后一个小时。原则上最后一个半小时都不应该再输入新代码了。此时整个队伍应该简短地讨论一下当下情况，然后对剩下的代码制定一个调试方案。 这个策略的优点就在于：基本上每一题都可以被解决，因为套套在早期就开始考虑难题。一个明显的缺点就是你们的开头会比较落后，同时耗时不一定最少，所以你们要比其他组多AC一题才能获胜。我们觉得对于一个队员水平相对均衡的队伍来说，这套策略能够帮助你们解决尽可能多的问题。 本文由 严酷的魔王 创作，转载或引用前请联系我们。相关文章： 推荐时间：与机器人对话 关于《生命游戏》和细胞自动机 推荐时间：maTHmU
相关文章：<ol>
<li><a href='http://blog.programet.org/2009/01/blog-post_01.html' rel='bookmark' title='推荐时间：与机器人对话'>推荐时间：与机器人对话</a></li>
<li><a href='http://blog.programet.org/2008/08/blog-post_28.html' rel='bookmark' title='关于《生命游戏》和细胞自动机'>关于《生命游戏》和细胞自动机</a></li>
<li><a href='http://blog.programet.org/2009/09/%e6%8e%a8%e8%8d%90%e6%97%b6%e9%97%b4%ef%bc%9amathmu.html' rel='bookmark' title='推荐时间：maTHmU'>推荐时间：maTHmU</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>最近刚刚开始认真的ACM…于是去网上找了找关于合作方面的内容，找到<a href="http://bbs.oursdu.com/thread-139802-1-1.html">一篇E文的</a>，不知道作者是谁。我看了看，感觉还不错，准备收藏。但是一想总觉得看E文的水平毕竟欠佳，没有中文一目十行的那种快感。于是我将其简单地翻译了一下，懒得润色了，还是贴了出来，方便大家的阅读与交流。因为翻译上的缺陷在所难免，所以我已经做好了被拍砖的准备TT……原文的txt版<a href="http://blog.programet.cn/wp-content/uploads/ACM.txt">点击这里下载</a>。<span id="more-1781"></span></p>
<blockquote>
<h4><strong>简介</strong></h4>
<p>自1977以来就有了ACM。这项由资格赛和决赛逐级递进的竞赛为大学生提供了磨砺自己的机会。三个学生要在5小时内用一台电脑解出尽可能多的问题。解出最多问题的队伍就是冠军——解出问题指的是对每个输入都给出了正确的输出。虽然说队员的个人能力很重要，但是如果想要登峰造极，队员们之间还需要有效地配合。我们作为1995年世界决赛的参赛者（我们仨中的两人还参加了1994年的），倒是总结出了不少团队合作的策略。<br />
我们准备在这篇文章里总结我们这么多场比赛的经验，希望这对想参加ACM（或者其他比赛）的你有用。</p>
<h4><strong>最基础的东西：练习，练习，练习！！</strong></h4>
<p>因为三个人手头只有一台电脑，所以良好的合作是非常必要的。当然，为了让策略更有效，你首先必须尽力提高自己的能力。你不一定要是一个天才，因为勤奋与刻苦也可以让你走得很远。我们认为，一个队伍是否出色取决于下面三点：</p>
<ul>
<li> 对经典算法的了解以及找到每一个问题的算法的能力；</li>
<li> 编码实现算法的能力；</li>
<li> 队友之间有效的沟通策略。</li>
</ul>
<p>这篇文章将重点阐述第三点。不过仍然会有一些提高个人能力的建议。<br />
我们分析了以前的比赛题目，发现同类型的题目不断地出现——可以分类为以下五个类型：</p>
<ol>
<li> 搜索类题目。这些题目需要对很多的情况进行考察以找出最佳的一种。因为搜索最头疼的是时间限制，所以说你应该多注意算法的时间复杂度。</li>
<li> 图论问题。这些问题有特殊的可以转化为一个图的性质，所以可以用经典算法来解决。</li>
<li> 几何问题。主要是形状，线段以及角度的问题。</li>
<li> 模拟题。这些题目的算法很容易想到，但是细致的编码则常常需要很长的时间。</li>
<li> 杂题。</li>
</ol>
<p>你可以在各种资料里面找到前三类问题的算法，你要做的就是事先编好他们的代码然后带到赛场。这样你就可以避免总是犯下同样的（小）错误，然后集中精力对付问题真正困难的那部分。<br />
练习的另一个目的是高效地编程。这并不意味着你要飞速地敲打键盘然后花上海量时间进行调试。相反，应该把问题想清楚，考虑每一种有可能出现的情况，然后开始编码，要保证你的编码能够将调试的时间减少至最低——通常调试都会用掉大量的宝贵时间。<br />
为了磨合一个队伍，做大量的仿真练习是必要的：5小时，一台机器，三个人以及一个评测系统。</p>
<h4><strong>团队合作策略的理论</strong></h4>
<p>当你的算法和编码水平到了一个难以进一步提高的境界时，改善你们的合作策略会在你冲顶的助你一臂之力。我们和很多不同的队友使用不同的策略练习比赛很多年了，同时发现很多其他队伍也这样做。从中我们归纳出了一套如何让一个队伍最优化的理论。不过，改良策略不一定是必要的：1995年的世界冠军弗赖堡大学只是一支新手队，1994年的西北欧冠军华沙大学的队员们在赛前2个星期才互相认识。<br />
为什么合作策略这么重要？比赛的时候只有一台电脑，所以大家要共用它。问题要被分成几块。为什么不让全队人共同参与呢？“各有所长”(Specialization)是一个很好的分工合作的依据。如果每一个队员都是解决某一类问题的专家，那么他们自然对这类问题的编码更确定，也有可能实现的动作更迅速。对于其他方面，“各有所长”也是很有用的。比如某一个队员是击打键盘的好手但是对设计算法不是很擅长，而另一个队员是算法专家但是不能很流畅地实现算法——他们合作的成果就是能够流畅解决复杂问题的代码！<br />
另一个分工合作的办法就是让两个人分析所有的问题。两双眼睛看得更清楚，也能更准确地判断一道题目的难度。在早期形成一个“思维坦克”(Think Tank)对找到最合适的题目以及对应的算法非常有帮助。不过，一旦把算法分析透彻了，就只能让一个人进行编码。<br />
经验告诉我们，最有效的编码方式就是一个人完成。这样可以避免相互交流的时候由编程风格的差异造成的混乱——即使你们尽量使用相同的变量名和函数风格，这样的差异仍然是不可避免的。一个人编码能让3*1等于4.</p>
<h4><strong>其他的注意事项</strong></h4>
<p>因为最后的排名是根据AC的题目数量以及（如果数量相等）运行所有程序花去的时间之和。所以一支队伍应该在5小时里面尽可能地AC，将耗时视为其次的目标。每一次比赛都有队伍在前三个小时内都处在前六名的位置上，但是最后连前十都没有进，相反的过程也经常发生。因此一个长期的策略非常重要：尽量最优化15个人力小时以及5小时的计算机时间，而不要去担心如何最快AC前两题。<br />
为了珍惜宝贵的时间，尽量完成每一个已经动手了的问题。一个已经解决了99%的问题对你们来说没有任何意义。一开始就应该分析清楚题目难易（比如使用“思维坦克”策略）以避免你本就无法完成的题目，或者是防止放过一道伪装得很好的水题。你需要对问题的难度有一个很好的嗅觉，这是选出5小时内你能完成的问题的唯一方法。<br />
因为永远不可能得到最准确的信息，所以你必须冒险。如果你采取了高风险的策略——准备着手解决大量的问题，可能最后你的排名位于后半区，同时电脑上有一堆解决了90%的题目——或者你会笑到最后。反过来，选择比较平稳的策略——选择少量问题，一般就会让你在前4个半小时内完美地AC他们，但是剩下的时间对于一个新问题来说又太短了，这样就浪费了10%的比赛时间。<br />
时间规划应该成为你的策略的一部分。如果你准备对一个难题问题下手，那么请立刻动手，否则你难以完成它。虽然这听起来没什么，但是有很多队伍刚开始选择了小问题，迅速切掉，然后比赛结束时一共也就AC了三题——因为他们没有解决难题。我们认为最后的一个半小时内应该最优先考虑调试而不是新题。如果你在比赛的晚期又开始了一题，那么比赛的最后时刻（最后一个半小时）将成为一个瓶颈。<br />
显然，对最后时刻的安排是决定性的。虽然绝大部分的程序都比较小（不超过100行），最后时刻仍然是一个瓶颈：三个人都想好好利用电脑来做自己的程序。怎么样解决这个问题？首先要记住：坐在电脑前永远只能打字，而不能思考。将你的程序写在纸上，一直到最后一个分号。这样一来你通常都会有一个更好的全局观念，同时你可以仔细考虑每一种特殊情况而不必担心旁边有人虎视眈眈你掌控着的电脑。一旦你写完了整个程序，录入进电脑就不会超过15分钟。虽然你应该避免调试（如果你在纸上写得很认真，那么这是有可能的），但你真正调试的时候应该这样做：从你的程序中收集尽可能多的数据然后和你的代码一起打印出来，然后进行分析。动态跟踪调试是无比罪恶的事情。</p>
<h4><strong>一些策略样例：</strong></h4>
<p><strong>1.最简单的策略</strong><br />
这条策略对于新手或者是不想沉沦于题海中的人来说非常实用，当然这条策略基本没有什么很好的效果。基本思想就是各做个的题目然后将交流的时间降至最低。每一个人都读一道题，然后挑出一个进行编码。完成一个之后就接着下一个。<br />
这种方法的好处就在于基本上不用练习，程序运行耗时被降到最低——因为最简单的问题最先被解决。但是有几个缺点很明显：因为最早被解决的问题通常都是一样水的题目，那么三个人都会在差不多的时间内完成他的程序，所以在最后，电脑的使用权就会引起冲突。另外，只有最简单的程序被解决因为没有时间剩给难题了。最后可以得出这样的结论：假设你的编程水平不算差，那么你们队就应该能解决三到四题。这会使你的耗时很少，可能进入前十，但是不太可能进入前三。<br />
<strong>2.终结者策略</strong><br />
在终结者策略中，只有一位队员T在使用电脑。另外两位则负责分析问题，将算法和代码的关键部分写下，然这时后T应该要完成必要的输入输出部分。当算法完成时，T就开始打字，如果必要还应该简单调试一下。如果bug难以发现那么这题算法的设计者就过来一起调试。<br />
这种方法的好处在于最后时刻不再是瓶颈，同时解决问题的不同过程交给了不同的人。这个方法的一个缺点就是T在打字之外没能发挥任何的作用，只是像一个秘书一样。如果你是唯一一个比较熟悉编程环境的人，那么这可能是一个好方法。你可以一开始在队友思考的时候打出大段大段的基础代码作为热身。是否选择这个方法与你在这支队伍中的地位关系密切。<br />
<strong>3.思维坦克</strong><br />
我们自己赛前练习以及在1995年总决赛上使用的策略就是前文提到的“思维坦克”策略（Think Tank,TT——套套？）。我们感觉在早期选择和分析问题是一个决定性的步骤，所以不能只让一个人来完成。队内两名最擅长问题分析的人组成了套套，同时开始读题，同时第三个人就在电脑上面打一些常用的程序段以及所有的测试数据，并且要确定准确无误。15分钟过后，套套简单地讨论了一下问题同时选出最适合第三个人的题目。交流过核心思想之后他们就可以开始工作了。然后套套将所有的问题都彻底讨论一遍，并将主要思想写下来。我们发现两个人讨论一道难题经常会出现富有创造性的方法。估计一个小时后，套套对整个问题都有了了解，同时找到了所有的算法。接下来的关键就是你想解决多少问题。最短或者最容易的问题通常都交给第三个人，然后套套就瓜分了剩下的问题。<br />
最后时刻只是用来将纸上的代码誊到电脑上，或者是解决一个有bug的程序。如果一个程序没有AC却又找不到错误，那么就将其放到一边直至最后一个小时。原则上最后一个半小时都不应该再输入新代码了。此时整个队伍应该简短地讨论一下当下情况，然后对剩下的代码制定一个调试方案。<br />
这个策略的优点就在于：基本上每一题都可以被解决，因为套套在早期就开始考虑难题。一个明显的缺点就是你们的开头会比较落后，同时耗时不一定最少，所以你们要比其他组多AC一题才能获胜。我们觉得对于一个队员水平相对均衡的队伍来说，这套策略能够帮助你们解决尽可能多的问题。</p></blockquote>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2009/01/blog-post_01.html' rel='bookmark' title='推荐时间：与机器人对话'>推荐时间：与机器人对话</a></li>
<li><a href='http://blog.programet.org/2008/08/blog-post_28.html' rel='bookmark' title='关于《生命游戏》和细胞自动机'>关于《生命游戏》和细胞自动机</a></li>
<li><a href='http://blog.programet.org/2009/09/%e6%8e%a8%e8%8d%90%e6%97%b6%e9%97%b4%ef%bc%9amathmu.html' rel='bookmark' title='推荐时间：maTHmU'>推荐时间：maTHmU</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2009/12/%e8%af%91%ef%bc%9aacm%e4%b8%ad%e9%98%9f%e5%91%98%e7%9a%84%e5%90%88%e4%bd%9c%e7%ad%96%e7%95%a5.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>晒：C语言期中实验报告</title>
		<link>http://blog.programet.org/2009/12/%e6%99%92%ef%bc%9ac%e8%af%ad%e8%a8%80%e6%9c%9f%e4%b8%ad%e5%ae%9e%e9%aa%8c%e6%8a%a5%e5%91%8a.html</link>
		<comments>http://blog.programet.org/2009/12/%e6%99%92%ef%bc%9ac%e8%af%ad%e8%a8%80%e6%9c%9f%e4%b8%ad%e5%ae%9e%e9%aa%8c%e6%8a%a5%e5%91%8a.html#comments</comments>
		<pubDate>Fri, 11 Dec 2009 09:03:20 +0000</pubDate>
		<dc:creator>严酷的魔王</dc:creator>
				<category><![CDATA[原创博文]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[计算机]]></category>
		<category><![CDATA[严肃]]></category>
		<category><![CDATA[思维]]></category>
		<category><![CDATA[算法]]></category>
		<category><![CDATA[自由]]></category>
		<category><![CDATA[随笔]]></category>

		<guid isPermaLink="false">http://blog.programet.cn/?p=1742</guid>
		<description><![CDATA[其实这是一份比较无聊的东西……因为民意表决掉了期中考试，于是C语言老师znm便换了法子，要我们写一个实验报告出来，其中重点是结构化程序设计。本来嘛，搜索类题目是可以很好地表现出结构化程序设计的优点的（比如递归……），但是我决定写另外一个题目，而把搜索类题目推荐给其他同学~（比如八皇后啊，骑士游历啊这种网上能找到一沓代码的题目）。我选择了素性测试这个问题。当然不需要太难，为了体现结构化，我觉得将不同的方法分别写一个函数然后比较一下就可以了。在下面贴出来的文字中不免有很多装13的地方，同时估计会有说得不严谨的地方…砖不要拍得太狠了…以及有些东西我很懒，就没有真正地完成所有的函数，同时找了一个理由。另：请尽量不要转载，免得老师以为我抄袭——即便我在报告末尾声明过了…… 关于检验素数的算法的探究 素数是数论中最重要的概念，同时在实际中也有着广泛的应用。比如RSA公钥加密系统就利用了大数不好分解成素因数的乘积这一特点——其中就包括了如何判定一个数字是素数这一问题。那么我们就来探究一下如何判定素数。 首先应该想到一个最最简单的方法：即对于整数n，如果我们发现(n%i!=0)对于i属于[2,n-1]时恒成立，那么就可以说n是一个素数了，即用小于n大于1的整数来除n看看能否整除。这个方法实现起来也很简单，效率是O(n)。对应代码中的函数 int method1(int n){}。 但是难道不能优化么？很容易发现，n-1永远都不会整除n——其实，大于[n/2]（此处[x]为高斯取整函数）小于n的整数都不能整除n。那么显然，我们只需要查看2到[n/2]的整数来除n得到的结果就行了。从时间上来说比第一种方法快了一倍，仍然是O(n)。对应代码中的函数int method2(int n){}。 又仔细想了一下，会发现其实第二种方法还是有一点点缺陷。比如我判断25是不是素数的时候，发现2无法除尽25，那么此时所有的偶数都无法除尽25，发现3也无法除尽25，那么所有的3的倍数都无法除尽25。所以，这时发现只要有一个数无法除尽n，则这个数的倍数都无法除尽n。反过来，如果一个数能除尽n，那么它的各个因数也能够除尽。此时不难得到，如果所有小于[n/2]的素数都不能整除n，那么n肯定是一个素数。对这个思路进一步提炼，就可以知道因为素数是递增的，所以用反证法易得当i&#62;sqrt(n)仍然不能整除n时，那么n就是一个素数——此时极大地减少了需要判断的次数。由素数定理可知，小于整数x的素数个数约为x/lnx，则需要列举的素数约等于2*sqrt(n)/ln(n)，算法效率为O(sqrt(n)/ln(n))，效率在此时被极大提高了。不过这时就牵涉到了一个问题：如何找到所有小于n的素数？待会再来讨论这个问题。 检验素数的方法除了确定性的，还有不确定性的——由费马小定理开创的素性检验的概率算法。费马小定理是说假如a是一个整数，p是一个素数，那么。那么，反过来，如果a是一个整数同时有上式成立，那么p是不是素数呢？很遗憾，答案是否定的。但是我们可以通过更换a的值来进行多次检验，减小判断错误的概率。理论上只需要将a取遍所有小于p的素数即可给出答案，但是这样会让效率变得很低。这个方法的缺点有两个：一是计算a^p会比较缓慢，二是即使优化了乘方的写法也会很有可能需要为了非高精度的a和p专门进行高精度处理，减慢了速度。对应代码中的int Fermat(int n,int t){}，其中调用了另外一个求幂次的函数 int power(int a,int p){}。 另外一个著名的素性检验的概率算法就是Miller-Rabin算法。要测试N是否为质数，首先将N − 1分解为d*2^s。在每次测试开始时，先随机选一个介于 [1,N − 1]的整数 a，之后如果对所有的，若且，则N是合数。否则，N有3/4的机率为质数。Miller-Rabin检验的好处在于你可以估计出错的概率是多少，我重复m次那么最后出错的概率就是1/(4^m)。如果将费马小定理和MR检验结合起来，那么准确率将会大大提高。 由于之前说到了使用“小于n的所有素数”之类的方法，那么我们就应该来考虑一下如何求出一张素数表。最容易想到的方法就是先检验出2到n-1的素数。但是这样的话效率就变成了O(n^2)。换一种思路：所有素数的倍数都不是素数，那么好办啦，我们每发现一个素数p，就将2到n-1中的p的倍数给找出来，标记为合数，而这个过程中始终没有被标记过的数自然就是素数了。这个方法其实称为埃拉托斯特尼筛法，是古希腊数学家埃拉托斯特尼所提出的。其实可以知道，我们只需要筛到[n/2]即可。更进一步的，如果使用一个数组prime[i]存储得到的第i个素数，那么和前面类似的理由，我们筛到sqrt(n)就可以了。对应代码中的int Eratosthenes1(int n){}。 接下来大概可以给出两种改进算法。第一种是这样的：考虑到2和3的倍数都不是合数，那么显然，素数只可能是6n±1的形式。我们循环的时候可以直接考虑所有的6n±1形式的数字。其实这样以来还可以再考虑5，7，11，……但这样就没有一个终止的时候了。6n±1比较简洁同时没有增加太多中间运算步骤，可以接受。对应代码中的int Eratosthenes2(int n){}。 另一种优化方法则巧妙很多。考虑到最原始的筛法中6会被2和3筛两次，60就会被2，3，5筛3次。那么我们就想办法让每一个合数都被筛一次。结合代码加以说明。 void makeprime&#40;&#41; &#123; for &#40;i=0;i&#60;=n;i++&#41; isprime&#91;i&#93;=1; len=0; isprime&#91;1&#93;=0; for &#40;i=2;i&#60;=n;i++&#41; &#123; if &#40;isprime&#91;i&#93;&#41; prime&#91;len++&#93;=i; for &#40;j=0;j&#60;=n;j++&#41;//标记一 &#123; isprime&#91;prime&#91;j&#93;*i&#93;=0; if &#40;i%prime&#91;j&#93;==0&#41;//标记二 break; &#125; [...]
相关文章：<ol>
<li><a href='http://blog.programet.org/2011/02/%e8%b0%9c%e4%b9%8b%e7%b3%bb%e5%88%970%e7%ba%bf%e6%80%a7%e8%a7%84%e5%88%92.html' rel='bookmark' title='谜之系列(0):线性规划'>谜之系列(0):线性规划</a></li>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html' rel='bookmark' title='统计与推理(2)：置信区间'>统计与推理(2)：置信区间</a></li>
<li><a href='http://blog.programet.org/2009/10/%e6%97%a0%e7%a9%b7%e4%b8%ad%e7%9a%84%e4%ba%8c%e5%88%86%ef%bc%88%e4%b8%80%ef%bc%89.html' rel='bookmark' title='无穷中的二分（一）'>无穷中的二分（一）</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>其实这是一份比较无聊的东西……因为民意表决掉了期中考试，于是C语言老师znm便换了法子，要我们写一个实验报告出来，其中重点是结构化程序设计。本来嘛，搜索类题目是可以很好地表现出结构化程序设计的优点的（比如递归……），但是我决定写另外一个题目，而把搜索类题目推荐给其他同学~（比如八皇后啊，骑士游历啊这种网上能找到一沓代码的题目）。我选择了素性测试这个问题。当然不需要太难，为了体现结构化，我觉得将不同的方法分别写一个函数然后比较一下就可以了。在下面贴出来的文字中不免有很多装13的地方，同时估计会有说得不严谨的地方…砖不要拍得太狠了…以及有些东西我很懒，就没有真正地完成所有的函数，同时找了一个理由。<span style="color: #ff0000;">另：请尽量不要转载，免得老师以为我抄袭——即便我在报告末尾声明过了……</span><span id="more-1742"></span></p>
<blockquote><p><strong>关于检验素数的算法的探究</strong></p>
<p>素数是数论中最重要的概念，同时在实际中也有着广泛的应用。比如RSA公钥加密系统就利用了大数不好分解成素因数的乘积这一特点——其中就包括了如何判定一个数字是素数这一问题。那么我们就来探究一下如何判定素数。</p>
<p>首先应该想到一个最最简单的方法：即对于整数n，如果我们发现(n%i!=0)对于i属于[2,n-1]时恒成立，那么就可以说n是一个素数了，即用小于n大于1的整数来除n看看能否整除。这个方法实现起来也很简单，效率是O(n)。对应代码中的函数 int method1(int n){}。</p>
<p>但是难道不能优化么？很容易发现，n-1永远都不会整除n——其实，大于[n/2]（此处[x]为高斯取整函数）小于n的整数都不能整除n。那么显然，我们只需要查看2到[n/2]的整数来除n得到的结果就行了。从时间上来说比第一种方法快了一倍，仍然是O(n)。对应代码中的函数int method2(int n){}。</p>
<p>又仔细想了一下，会发现其实第二种方法还是有一点点缺陷。比如我判断25是不是素数的时候，发现2无法除尽25，那么此时所有的偶数都无法除尽25，发现3也无法除尽25，那么所有的3的倍数都无法除尽25。所以，这时发现只要有一个数无法除尽n，则这个数的倍数都无法除尽n。反过来，如果一个数能除尽n，那么它的各个因数也能够除尽。此时不难得到，如果所有小于[n/2]的素数都不能整除n，那么n肯定是一个素数。对这个思路进一步提炼，就可以知道因为素数是递增的，所以用反证法易得当i&gt;sqrt(n)仍然不能整除n时，那么n就是一个素数——此时极大地减少了需要判断的次数。由素数定理可知，小于整数x的素数个数约为x/lnx，则需要列举的素数约等于2*sqrt(n)/ln(n)，算法效率为O(sqrt(n)/ln(n))，效率在此时被极大提高了。不过这时就牵涉到了一个问题：如何找到所有小于n的素数？待会再来讨论这个问题。</p>
<p>检验素数的方法除了确定性的，还有不确定性的——由费马小定理开创的素性检验的概率算法。费马小定理是说假如a是一个整数，p是一个素数，那么<img src='http://s.wordpress.com/latex.php?latex=a%5Ep%20%5Cequiv%20a%20%28mod%20p%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='a^p \equiv a (mod p)' title='a^p \equiv a (mod p)' class='latex' />。那么，反过来，如果a是一个整数同时有上式成立，那么p是不是素数呢？很遗憾，答案是否定的。但是我们可以通过更换a的值来进行多次检验，减小判断错误的概率。理论上只需要将a取遍所有小于p的素数即可给出答案，但是这样会让效率变得很低。这个方法的缺点有两个：一是计算a^p会比较缓慢，二是即使优化了乘方的写法也会很有可能需要为了非高精度的a和p专门进行高精度处理，减慢了速度。对应代码中的int Fermat(int n,int t){}，其中调用了另外一个求幂次的函数 int power(int a,int p){}。</p>
<p>另外一个著名的素性检验的概率算法就是Miller-Rabin算法。要测试N是否为质数，首先将N − 1分解为d*2^s。在每次测试开始时，先随机选一个介于 [1,N − 1]的整数 a，之后如果对所有的<img src='http://s.wordpress.com/latex.php?latex=r%5Cin%20%5B0%2Cs-1%5D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='r\in [0,s-1]' title='r\in [0,s-1]' class='latex' />，若<img src='http://s.wordpress.com/latex.php?latex=a%5Ed%20mod%20N%20%5Cneq%201&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='a^d mod N \neq 1' title='a^d mod N \neq 1' class='latex' />且<img src='http://s.wordpress.com/latex.php?latex=a%5E%7B2%5Erd%7D%20mod%20N%20%5Cneq%20-1&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='a^{2^rd} mod N \neq -1' title='a^{2^rd} mod N \neq -1' class='latex' />，则N是合数。否则，N有3/4的机率为质数。Miller-Rabin检验的好处在于你可以估计出错的概率是多少，我重复m次那么最后出错的概率就是1/(4^m)。如果将费马小定理和MR检验结合起来，那么准确率将会大大提高。</p>
<p>由于之前说到了使用“小于n的所有素数”之类的方法，那么我们就应该来考虑一下如何求出一张素数表。最容易想到的方法就是先检验出2到n-1的素数。但是这样的话效率就变成了O(n^2)。换一种思路：所有素数的倍数都不是素数，那么好办啦，我们每发现一个素数p，就将2到n-1中的p的倍数给找出来，标记为合数，而这个过程中始终没有被标记过的数自然就是素数了。这个方法其实称为<strong>埃拉托斯特尼筛法</strong>，是古希腊数学家埃拉托斯特尼所提出的。其实可以知道，我们只需要筛到[n/2]即可。更进一步的，如果使用一个数组prime[i]存储得到的第i个素数，那么和前面类似的理由，我们筛到sqrt(n)就可以了。对应代码中的int Eratosthenes1(int n){}。</p>
<p>接下来大概可以给出两种改进算法。第一种是这样的：考虑到2和3的倍数都不是合数，那么显然，素数只可能是6n±1的形式。我们循环的时候可以直接考虑所有的6n±1形式的数字。其实这样以来还可以再考虑5，7，11，……但这样就没有一个终止的时候了。6n±1比较简洁同时没有增加太多中间运算步骤，可以接受。对应代码中的int Eratosthenes2(int n){}。</p>
<p>另一种优化方法则巧妙很多。考虑到最原始的筛法中6会被2和3筛两次，60就会被2，3，5筛3次。那么我们就想办法让每一个合数都被筛一次。结合代码加以说明。</p>

<div class="wp_codebox"><table><tr id="p17423"><td class="code" id="p1742code3"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> makeprime<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;=</span>n<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
        isprime<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    len<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    isprime<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;=</span>n<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>isprime<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
            prime<span style="color: #009900;">&#91;</span>len<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span>i<span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>j<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>j<span style="color: #339933;">&lt;=</span>n<span style="color: #339933;">;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #666666; font-style: italic;">//标记一</span>
        <span style="color: #009900;">&#123;</span>
            isprime<span style="color: #009900;">&#91;</span>prime<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">%</span>prime<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #666666; font-style: italic;">//标记二</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>以上便是生成素数的函数的主体代码。</p>
<p>利用了每个合数必有一个最小素因子。每个合数仅被它的最小素因子筛去正好一次。所以为线性时间。代码中体现在：</p>

<div class="wp_codebox"><table><tr id="p17424"><td class="code" id="p1742code4"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">%</span>prime<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>prime[]数组中的素数是递增的,当i能整除prime[j]，那么i*prime[j+1]这个合数肯定被prime[j]乘以某个数筛掉。因为i中含有prime[j],prime[j]比prime[j+1]小，即i=k*prime[j]，那么i*prime[j+1]=(k*prime[j])*prime[j+1]=k’*prime[j]，接下去的素数同理。所以不用筛下去了。因此，在满足i%prime[j]==0这个条件之前以及第一次满足改条件时,prime[j]必定是prime[j]*i的最小因子。这个方法改良后的时间效率是O(n)！int Eratosthenes3(int n){}，其中因为是一旦判定了n是合数那么就退出，如果设n的最小质因数是p，那么时间效率应该是O(p+n/p)。</p>
<p>但是到这里还没完，我在维基百科上找到了一个更厉害的算法，它的时间效率是<img src='http://s.wordpress.com/latex.php?latex=O%28%5Cfrac%7Bn%7D%7Bloglogn%7D%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='O(\frac{n}{loglogn})' title='O(\frac{n}{loglogn})' class='latex' />。这个算法的名字叫做Sieve of Atkin，大概能够翻译为“阿特金筛法”，是埃氏筛法的极大改良版。我还没能证明这个算法，只能将步骤写下了：</p>
<p>首先定义r(n)=n%60，再定义反转筛中某数的状态就是让它从是素数到不是素数或相反。</p>
<p>预处理：素数表中有2，3，5三个元素，其余的元素一直在筛子中。</p>
<ul>
<li>如果r(n) 是 1, 13, 17, 29, 37, 41, 49 或53之一，反转方程4x<sup>2</sup> + y<sup>2</sup> = n所有的正整数解的状态；</li>
<li>如果r(n) 是 7, 19, 31 或 43 之一，反转方程3x<sup>2</sup> + y<sup>2</sup> = n. 所有的正整数解的状态；</li>
<li>如果 r(n) 是 11, 23, 47 或 59 之一，反转方程{3x<sup>2</sup> − y<sup>2</sup> = n;x &gt; y.} 所有的正整数解的状态；</li>
<li>对于其他的r(n)可以不予理睬。</li>
</ul>
<p>将筛子中的最小的标记为“是素数”的数字添加到素数表中，同时将其平方以及平方的倍数都标记为非素数。</p>
<p>经过以上的步骤，就可以得到n以内的素数表。但是由于<img src='http://s.wordpress.com/latex.php?latex=O%28%5Cfrac%7Bn%7D%7Bloglogn%7D%29&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='O(\frac{n}{loglogn})' title='O(\frac{n}{loglogn})' class='latex' />与O(n)实际上相差无几，所以这个方法的理论意义大于实际意义。维基这个词条的英文链接：<a href="http://en.wikipedia.org/wiki/Sieve_of_atkin">http://en.wikipedia.org/wiki/Sieve_of_atkin</a> 。我上面的文字来自那些文字的我的翻译。</p>
<p>在实际的测试中，由于数据范围较小，所以说每一种算法的时间都是一瞬间。不过在实际的应用中，还需要结合高精度运算，滚动数组等方法扩展数据的计算与存储范围。如果前文所讨论的问题要想运用到实际的RSA等应用方面，算法的效率以及复杂而高性能的编码就更为重要了。</p>
<p>通过上文的分析可以发现，想要优化一个算法，那么最重要的就是减少冗余运算（比如第一到第三种方法的优化），或者是做足够多的预处理(生成素数表)，甚至是放弃准确度以求得一个概率上的解。这两种思想可以非常广泛地应用到搜索剪枝、动态规划、记忆化搜索等更高级的方法中去。因此，这个关于检验素数的算法的讨论更重要的是优化算法的思想以及对时间复杂度、实际代码复杂度的权衡。</p>
<p>以上是算法分析，下面是对代码的简要说明：</p>
<ol>
<li>所有的求解函数中都以返回1表示所求的n是素数，返回0则表示不是素数。</li>
<li>每一个函数都记录了这个函数运行始末使用的时间。</li>
<li>代码中为了让各个函数之间的停顿不至于太短，因此使用了#include&lt;windows.h&gt;，调用了其中的Sleep函数，让程序暂停运行。</li>
<li>费马小定理无法在简单的编码下发挥实际的检验作用，因此只是作为一个概率算法的展示，Miller-Rabin因为同样的原因，便不再进行编码。</li>
<li>SieveOfAtkin在编码上较为困难，且我暂时不明白其机理，因此不准备进行编码，以免程序运行结果不良好的时候难以查找错误。</li>
<li>代码基本上由我独立完成，能够成功编译并成功运行。</li>
<li>由于数据范围所限，各个算法之间的比较还不能凸现出来。因此其实还可以对代码进行如下变换进行比较：即使用判定某一个数是否为素数的程序来生成素数表，即可大致看出其与专门生成素数表的程序的效率高低。或者还有另外一个更简单的思路：将每一个程序运行10000遍，也可以得到比较明显的时间差别。</li>
</ol>
<p>本文可能会在实验报告提交之后放到我的博客上去：<a href="../../../../../">http://blog.programet.cn/</a>，所以如果在网上的其他地方出现，日期不可能早于12月11日——而且应该都是转载。</p></blockquote>
<p>这里说一下，O(n)的筛法来自于以前我在<a href="http://www.cnblogs.com/suno/articles/1064368.html">这里</a>看到的代码。</p>
<p>与此报告配套的代码请<a href="http://blog.programet.cn/wp-content/uploads/期中实验报告.cpp">点击下载</a>，因为老师要求使用VS编译，所以请大家自行更改一些细节后再使用gcc编译。</p>
<p><small>本文由 严酷的魔王 创作，转载或引用前请<a href="mailto:programet.org@gmail.com">联系我们</a>。</small></p><p>相关文章：<ol>
<li><a href='http://blog.programet.org/2011/02/%e8%b0%9c%e4%b9%8b%e7%b3%bb%e5%88%970%e7%ba%bf%e6%80%a7%e8%a7%84%e5%88%92.html' rel='bookmark' title='谜之系列(0):线性规划'>谜之系列(0):线性规划</a></li>
<li><a href='http://blog.programet.org/2010/07/%e7%bb%9f%e8%ae%a1%e4%b8%8e%e6%8e%a8%e7%90%862%ef%bc%9a%e7%bd%ae%e4%bf%a1%e5%8c%ba%e9%97%b4.html' rel='bookmark' title='统计与推理(2)：置信区间'>统计与推理(2)：置信区间</a></li>
<li><a href='http://blog.programet.org/2009/10/%e6%97%a0%e7%a9%b7%e4%b8%ad%e7%9a%84%e4%ba%8c%e5%88%86%ef%bc%88%e4%b8%80%ef%bc%89.html' rel='bookmark' title='无穷中的二分（一）'>无穷中的二分（一）</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.programet.org/2009/12/%e6%99%92%ef%bc%9ac%e8%af%ad%e8%a8%80%e6%9c%9f%e4%b8%ad%e5%ae%9e%e9%aa%8c%e6%8a%a5%e5%91%8a.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

