ibanana

箭厂胡同文创空间/META-PROJECT​(13张)

辛几何&李代数

BloomFilter——大规模数据处理利器

BloomFilter——大规模数据处理利器

  BloomFilter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。 一.实例   为了说明BloomFilter存在的重要意义,举一个实例:   假设要你写一个网络蜘蛛(web crawler)。由于网络间的链接错综复杂,蜘蛛在网络... 阅读全文

 

  Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。

 

实例 

  为了说明Bloom Filter存在的重要意义,举一个实例:

  假设要你写一个网络蜘蛛(web crawler)。由于网络间的链接错综复杂,蜘蛛在网络间爬行很可能会形成“环”。为了避免形成“环”,就需要知道蜘蛛已经访问过那些URL。给一个URL,怎样知道蜘蛛是否已经访问过呢?稍微想想,就会有如下几种方案:

  1. 将访问过的URL保存到数据库。

  2. 用HashSet将访问过的URL保存起来。那只需接近O(1)的代价就可以查到一个URL是否被访问过了。

  3. URL经过MD5或SHA-1等单向哈希后再保存到HashSet或数据库。

  4. Bit-Map方法。建立一个BitSet,将每个URL经过一个哈希函数映射到某一位。

  方法1~3都是将访问过的URL完整保存,方法4则只标记URL的一个映射位。

 

  以上方法在数据量较小的情况下都能完美解决问题,但是当数据量变得非常庞大时问题就来了。

  方法1的缺点:数据量变得非常庞大后关系型数据库查询的效率会变得很低。而且每来一个URL就启动一次数据库查询是不是太小题大做了?

  方法2的缺点:太消耗内存。随着URL的增多,占用的内存会越来越多。就算只有1亿个URL,每个URL只算50个字符,就需要5GB内存。

  方法3:由于字符串经过MD5处理后的信息摘要长度只有128Bit,SHA-1处理后也只有160Bit,因此方法3比方法2节省了好几倍的内存。

  方法4消耗内存是相对较少的,但缺点是单一哈希函数发生冲突的概率太高。还记得数据结构课上学过的Hash表冲突的各种解决方法么?若要降低冲突发生的概率到1%,就要将BitSet的长度设置为URL个数的100倍。

 

  实质上上面的算法都忽略了一个重要的隐含条件:允许小概率的出错,不一定要100%准确!也就是说少量url实际上没有没网络蜘蛛访问,而将它们错判为已访问的代价是很小的——大不了少抓几个网页呗。 

 

Bloom Filter的算法 

 

  废话说到这里,下面引入本篇的主角——Bloom Filter。其实上面方法4的思想已经很接近Bloom Filter了。方法四的致命缺点是冲突概率高,为了降低冲突的概念,Bloom Filter使用了多个哈希函数,而不是一个。

    Bloom Filter算法如下:

    创建一个m位BitSet,先将所有位初始化为0,然后选择k个不同的哈希函数。第i个哈希函数对字符串str哈希的结果记为h(i,str),且h(i,str)的范围是0到m-1 。

 

(1) 加入字符串过程 

 

  下面是每个字符串处理的过程,首先是将字符串str“记录”到BitSet中的过程:

  对于字符串str,分别计算h(1,str),h(2,str)…… h(k,str)。然后将BitSet的第h(1,str)、h(2,str)…… h(k,str)位设为1。

 BloomFilter——大规模数据处理利器

  图1.Bloom Filter加入字符串过程

  很简单吧?这样就将字符串str映射到BitSet中的k个二进制位了。

 

(2) 检查字符串是否存在的过程 

 

  下面是检查字符串str是否被BitSet记录过的过程:

  对于字符串str,分别计算h(1,str),h(2,str)…… h(k,str)。然后检查BitSet的第h(1,str)、h(2,str)…… h(k,str)位是否为1,若其中任何一位不为1则可以判定str一定没有被记录过。若全部位都是1,则“认为”字符串str存在。

 

  若一个字符串对应的Bit不全为1,则可以肯定该字符串一定没有被Bloom Filter记录过。(这是显然的,因为字符串被记录过,其对应的二进制位肯定全部被设为1了)

  但是若一个字符串对应的Bit全为1,实际上是不能100%的肯定该字符串被Bloom Filter记录过的。(因为有可能该字符串的所有位都刚好是被其他字符串所对应)这种将该字符串划分错的情况,称为false positive 。

 

(3) 删除字符串过程 

   字符串加入了就被不能删除了,因为删除会影响到其他字符串。实在需要删除字符串的可以使用Counting bloomfilter(CBF),这是一种基本Bloom Filter的变体,CBF将基本Bloom Filter每一个Bit改为一个计数器,这样就可以实现删除字符串的功能了。

 

  Bloom Filter跟单哈希函数Bit-Map不同之处在于:Bloom Filter使用了k个哈希函数,每个字符串跟k个bit对应。从而降低了冲突的概率。

 

Bloom Filter参数选择 

 

   (1)哈希函数选择

     哈希函数的选择对性能的影响应该是很大的,一个好的哈希函数要能近似等概率的将字符串映射到各个Bit。选择k个不同的哈希函数比较麻烦,一种简单的方法是选择一个哈希函数,然后送入k个不同的参数。

   (2)Bit数组大小选择 

     哈希函数个数k、位数组大小m、加入的字符串数量n的关系可以参考参考文献1。该文献证明了对于给定的m、n,当 k = ln(2)* m/n 时出错的概率是最小的。

     同时该文献还给出特定的k,m,n的出错概率。例如:根据参考文献1,哈希函数个数k取10,位数组大小m设为字符串个数n的20倍时,false positive发生的概率是0.0000889 ,这个概率基本能满足网络爬虫的需求了。  

 

Bloom Filter实现代码 

    下面给出一个简单的Bloom Filter的Java实现代码:

 

import java.util.BitSet;

publicclass BloomFilter 
{
/* BitSet初始分配2^24个bit */ 
privatestaticfinalint DEFAULT_SIZE =1<<25
/* 不同哈希函数的种子,一般应取质数 */
privatestaticfinalint[] seeds =newint[] { 571113313761 };
private BitSet bits =new BitSet(DEFAULT_SIZE);
/* 哈希函数对象 */ 
private SimpleHash[] func =new SimpleHash[seeds.length];

public BloomFilter() 
{
for (int i =0; i < seeds.length; i++)
{
func[i] 
=new SimpleHash(DEFAULT_SIZE, seeds[i]);
}
}

// 将字符串标记到bits中
publicvoid add(String value) 
{
for (SimpleHash f : func) 
{
bits.set(f.hash(value), 
true);
}
}

//判断字符串是否已经被bits标记
publicboolean contains(String value) 
{
if (value ==null
{
returnfalse;
}
boolean ret =true;
for (SimpleHash f : func) 
{
ret 
= ret && bits.get(f.hash(value));
}
return ret;
}

/* 哈希函数类 */
publicstaticclass SimpleHash 
{
privateint cap;
privateint seed;

public SimpleHash(int cap, int seed) 
{
this.cap = cap;
this.seed = seed;
}

//hash函数,采用简单的加权和hash
publicint hash(String value) 
{
int result =0;
int len = value.length();
for (int i =0; i < len; i++
{
result 
= seed * result + value.charAt(i);
}
return (cap -1& result;
}
}
}

收起全文

辛几何&李代数

近场光学原理简介

近场光学原理简介

所谓近场光学,是相对于远场光学而言。传统的光学理论,如几何光学、物理光学等,通常只研究远离光源或者远离物体的光场分布,一般统称为远场光学。远场光学在原理上存在着一个远场衍射极限,限制了利用远场光学原理进行显微和其它光学应用时的最小分辨尺寸和最小标记尺寸。而近场光学则研究距离光源或物体一个波长范围内的光场分布。在近场光学研究领域,远场衍射极限被打破,分辨率极限... 阅读全文

 

   

    所谓近场光学,是相对于远场光学而言。传统的光学理论,如几何光学、物理光学等,通常只研究远离光源或者远离物体的光场分布,一般统称为远场光学。远场光学在原理上存在着一个远场衍射极限,限制了利用远场光学原理进行显微和其它光学应用时的最小分辨尺寸和最小标记尺寸。而近场光学则研究距离光源或物体一个波长范围内的光场分布。在近场光学研究领域,远场衍射极限被打破,分辨率极限在原理上不再受到任何限制,可以无限地小,从而基于近场光学原理可以提高显微成像与其它光学应用时的光学分辨率。

 

1. 远场光学的衍射分辨极限

远场光学的分辨率受到衍射效应的限制。1873年,德国科学家阿贝(Abbe)根据衍射理论首次推导出衍射分辨极限,即能够被光学分辨的两点间的距离总是大于波长的一半。后来,瑞利(Rayleigh)将阿贝衍射理论归纳为一个公式:

 

 

1-1

这就是人们所熟知的瑞利判据。该判据表明,当且仅当物体上两点之间的距离d大于或等于不等式右边所规定的量时,才被看作是分开的两点。这个量与入射光在真空中的波长l、物方折射率n以及显微物镜在物方的半孔径角q有关。nsin(q)通常也被称作数值孔径(Numerical ApertureN.A.)。

由瑞利判据可知,提高分辨率包括两种方法:其一,尽可能选择短的辐射波长,如利用蓝光、紫外光、x射线、电子等;其二,提高数值孔径,但若不考虑较少和较难使用的油浸物镜(N.A. = 1.5左右)与固体浸没透镜,数值孔径的最大值不超过1,因此远场光学的分辨极限最高只能达到l/2

 

2. 近场光学的超衍射极限分辨率

当光和物体发生相互作用后,在物体表面(xy面)形成携带物体信息的光场分布,可以使用该场(即z = 0平面上的场)的复振幅的分布特性来表示样品。与空间频谱的关系由傅立叶变换确定:

 

 

1-2

fxfy分别为沿xy方向的空间频率分量,反比于物体的结构尺寸。当光传播到探测平面z时,复振幅和空间频谱满足同样的关系:

 

 

1-3

光场分布满足标量亥姆霍兹方程:

 

 

1-4

其中,为总空间频率。将式1-3代入式1-4得:

 

 

1-5

为待定系数,由初始条件确定。z = 0处为物平面,其空间频谱为,因此有:

 

 

1-6

将上式代入式1-3得:

 

 

 

1-7

可见,探测面z上的光场分布是z = 0平面上的平面波乘以传播因子后的线性叠加,波的性质和传播方向取决于fxfy的大小。

当时,式1-6的指数部分为虚宗量,此时在z = 0平面上形成空间频率满足的平面波,即空间频率的每一分量都可以向前传播形成辐射波或传播波,为波的相位变化因子。

当时,对应于光场分布的高空间频率fxfy,即物体上的小尺寸结构,式1-6变成:

 

 

1-8

指数部分的宗量为实数,表明振幅随z的增加呈指数规律衰减,即该波只局域在物体表面而不能向远处传播,形成局域在物体表面的近场隐失波。而式1-7则表示以光波频率振荡的波在xy方向可以传播,沿z方向衰减。

从以上分析可以看到,在物体表面的近场光包含两种成分,一种是可以向远处传播的传播场;另一种是被局域在物体表面,在物体之外迅速衰减的非辐射隐失场。隐失场是非均匀场,其性质与样品的性质和结构有密切关系。这种场因物质的存在而存在,不能在自由空间独立地存在。

物体亚波长结构的信息隐藏在隐失场中。隐失场的强度随着离物体距离的增大而迅速衰减,衰减的速度与空间频率成正比,所以结构越是精细,场就越被强烈地束缚在物体表面。而远场只有传播波,仅包含电磁场的低空间频率部分,不包含样品的亚波长结构信息。瑞利判剧建立在远场探测传播场的基础之上,仅在远场成立,而近场的隐失场并不受它的约束。因而,若想获得超衍射极限的分辨率,必须利用近场隐失场。

 

3. 隐失波场的探测

    近场探测的原理是:(1)无论用传播场还是隐失场照明,高频物体均产生隐失场;(2)所产生的隐失场不服从瑞利判据,它们能够在远小于波长的距离上显示局部的强烈变化;(3)通过采用一个小的有限物体(如孔径或者无孔径探针)将隐失场转换成传播场和隐失场的方法,这种不可探测的高频局部场可以反过来转换成传播场;(4)将后者导向合适的远端探测器。注意,隐失场—传播场的转换是线性的:被探测到的场正比于给定点的隐失场的坡印廷矢量。那么传播场将忠实地复制隐失场局域的剧烈变化。因此,用探测器探测到的传播场中包含物体的高频信息。为了产生二维图象,使这个小的有限物体沿物体表面进行扫描,由所得到的探测数据重构图象。

 

 

 

             近场探测原理

近场光学原理简介

 

 

镀金属膜纳米光纤探针截面图(SII

4.近场光学/纳米光学的应用

基于近场光学技术的光学分辨率可以达到纳米量级,突破了传统光学的分辨率衍射极限,这将为科学研究的诸多领域,尤其是纳米科技的发展提供有力的操作、测量方法和仪器系统。目前,基于隐失场探测的近场扫描光学显微镜、纳米局域测量表征的近场拉曼光谱仪已经成为纳米物理、纳米生物学、纳米化学、纳米材料科学等领域中的重要工具,并且应用范围正在不断地扩大。而基于近场光学/纳米光学的其它应用,如纳米光刻和超高密度近场光存储、纳米结构表面等离子光学元器件、纳米尺度粒子的捕获与操纵等等,也吸引了众多科学工作者的注意。

收起全文

辛几何&李代数

康威常数

康威常数

一、无聊的序列,奇特的理论在介绍主题以前,我们先来做一件看似无聊的事情。我写下一个数:1然后问你看见了什么。你回答道:&1个1。&我把你的回答中的数字依次写下:11然后问你看见了什么。你回答道:&2个1。&我把你的回答中的数字依次写下:21然后问你看见了什么。你回答道:&1个2,1个1。&我把你的回答中的数字依次写下:1211然后问你看见了什么。你回答道:&... 阅读全文

一、无聊的序列,奇特的理论

在介绍主题以前,我们先来做一件看似无聊的事情。我写下一个数:

1

然后问你看见了什么。你回答道:“11。”我把你的回答中的数字依次写下:

11

然后问你看见了什么。你回答道:“21。”我把你的回答中的数字依次写下:

21

然后问你看见了什么。你回答道:“1211。”我把你的回答中的数字依次写下:

1211

然后问你看见了什么。你回答道:“111221。”我把你的回答中的数字依次写下:

111221

然后问你看见了什么。你回答道:“312211。”我把你的回答中的数字依次写下:

312211

我们可以一直这样下去,得到一个序列,序列里的每一项都是一个数字串。这个数字串序列被称为“边看边说序列”(Look-and-say sequence),也有人翻译成“外观数列”。注意到其实这并不是一个数列,因为其中的每一项并不是一个数,比如第三项21并不代表数字二十一,而是2和1这两个数字构成的字符串(本文称之为数字串)。

咋一看这个序列很枯燥,生成的过程一点技术含量都没有,大概只适合做脑筋急转弯的素材:“请问:1, 11, 21, 1211, 111221, 312211接下去一项是什么?”

1977年在贝尔格莱德举行国际奥林匹克数学竞赛的闲暇时刻,荷兰队向英国队提出的挑战,似乎是这道脑筋急转弯题的最初记载,不过也许它还有更早的历史。赛后,英国参赛队员将它带回英国,辗转相传。到了1983年11月,轮到在英国剑桥大学教书的著名数学家J·H·康威(John Horton Conway)做这道题了。

康威是一位在代数、几何、数论等领域都有相当大贡献的数学家。群论中的魔群月光猜想(一种拥有极其众多元素的被称作“怪兽”的群和模形式之间有意想不到的联系,猜想名字中的“月光”是“疯狂”的意思)由他和Simon P. Norton提出和命名;1998年英国数学家Richard Borcherds因证明此猜想而获菲尔兹奖。康威最为数学爱好者们乐道的则是他在组合游戏理论中的巨大成就,以一系列奇思妙想而闻名。他建立了超实数理论(这是一个把游戏和数结合在一起的理论,其中每个数都是一个游戏局面),并创作了以此理论为基础来分析大量经典(以及自创的)游戏的数学科普书籍《稳操胜劵》。他提出的“生命游戏”更是脍炙人口,让元胞自动机理论广为人知。科普大师马丁·加德纳将《数学嘉年华》一书题辞献给康威,感谢他在趣味数学领域作出了“深刻、优雅和幽默相结合的独特贡献”。

不过要比脑筋急转弯,象康威这样出色的数学家似乎也不比一个小学生更厉害。当他的学生抱着点恶作剧的心理拿这题给他做时,康威平时智计百出的脑子不好使了,阴沟里翻船,最终无奈地让学生告知他答案。

但和一般人听到答案后呵呵一笑了之不同,直到那年的圣诞节期间,康威还在不断研究——按照他的说法,是“把玩”——这个序列,并从中发展出一个怪异而美妙的理论来。在这个理论中有一个小小的宇宙,这个宇宙由92或94种元素组成。这些元素在衰变中互相演化,让这个小小宇宙以每天增长大约30%的速度膨胀。

 

二、分割、元素、化学定理和算术定理

在具体介绍这个理论的内容以前,先让我们也来把玩一番前面这个序列,以便对它的演化有一些直观的了解。

把这个序列多写出几项来:

康威常数

注意到从第8项起在数字串中多写了一个“.”,它将数字串分成了前后两个子串,而这两部分接下去在互不影响地独立演化:

康威常数

 

前子串总是以2结束;这是一个很容易证明的一般规律的特例:如果一个序列以某数字x结尾,那么它的所有后代也总以x结尾。而后子串的开头则以
1321…… →1113……→3113……→1321……
的形式循环,所以永远不可能以2开始。于是前后这两部分不会再交缠在一起。

另一个简单的例子是,如果一个数字串恰好以两个2结尾:……s22(其中s是不为2的数字),那么它可以分割成……s.22的形式。因为如上所说,前子串的后代总以s结尾,而后子串的后代永远是它本身:22。

从上面的例子里我们看到了这个理论中最重要的现象——数字串的分割:一个数字串可以分割成若干子串,使得它的演化结果是由这些子串的独立演化结果拼接而成。这样,对一个数字串的演化的研究可以转化成对它的子串的演化的研究。可以把这个现象和正整数的乘法分解作对比。我们知道,每一个大于1的正整数都可以唯一地分解成素数的乘积。素数犹如构建正整数的基本砖块,这个结论因极其重要而被称为算术基本定理,它确定了素数在数论研究中的核心地位。在康威的边看边说序列理论中,和素数的地位相当的是无法再分割得更小的数字串,康威称之为元素原子。比如说从1开始演化的这个序列的前七项,都是无法分割的元素,而它的第8项则可分割成两个元素:11132和13211。这些不可分割的元素就是构建数字串的基本砖块。由元素拼接起来的数字串则被称为化合物

毫无疑问,这种命名方式是一种暗喻,将边看边说序列理论中的对象和化学理论联系起来(当然这绝不是在暗示边看边说序列理论真的是研究现实世界中化学元素和化合物的理论)。在后面大家会看到这种暗喻是相当巧妙和贴切的。因此我们也将相当自由地使用一些很容易直观理解的术语,比如前面谈论数字串的“演化”以及它的“后代”。我们会谈论元素的“衰变”,也就是它的演化过程。数字串每演化一项,我们会说“一天后”数字串如何如何。康威把序列的第一项称为“第0天”,然后依次为“第1天”、“第2天”等等,在本文后续章节中我们甚至会看到“一天引理”和“两天引理”。

边看边说序列理论中的元素有许多种,确切地说,有无数种。比如将“13”重复n次的数字串1313……13就是无法分割的:假设它在某个1和3之间可以分割:

……1.3……

下一步是

……11.13……

出现了跨越分割号的连续三个1,这就是说前面假设中的分割是错误的。假设它在某个3和1之间可以分割:

……13.13……

下面两步是

……1113.1113……

……3113.3113……

出现了跨越分割号的连续两个3,这同样是错误的分割。

 

康威的重要发现是:存在着一族共有92种特殊的元素,它们之间会互相演化。这92种元素被他称为“普通元素”,并分别以化学元素表中1号(氢)到92号(铀)元素命名。对于普通元素,有如下的结论:

  • 存在92种普通元素(具体的元素列表和它们的性质将在稍后给出)。可以分割成普通元素的化合物称为“普通化合物”(为了简化叙述起见,我们也把普通元素看作是仅由一个元素组成的普通化合物)。
  • 化学定理)任何一种普通元素的后代都是普通化合物。普通化合物的后代也是普通化合物。除了第1号元素氢(即数字串22)外,从任意一种普通化合物开始,演化足够多天后,得到的化合物将由所有92种元素组成。
  • 算术定理)从任何一个普通化合物开始,每一步演化得到的数字串的长度和上一步相比,越来越趋近于一个固定常数λ。在此过程中,每种元素在这些数字串中的比例越来越趋近一个(仅和此元素本身相关,而与初始普通化合物的选择无关的)大于0的常数值,称为这种元素的丰度。上述固定常数λ是以下71次多项式的唯一的正实数根(也是所有根中模最大的):

康威常数

它约等于1.303577269034,称作康威常数

 

在整个边看边说序列理论中,最令人吃惊的大概就是上面这个多项式了,乍一看真可谓从天而降,莫名其妙。欲知其妙,则需懂得一些线性代数的知识。我们将在本文后续章节中比较详细地讨论这件事情,并通过在康威发表论文之后线性代数的新成果,得到比以上算术定理中叙述的更好的结果。

化学定理指出,普通化合物是一个封闭的圈子,普通化合物只能演化成普通化合物。但是还有一些本不是普通化合物的数字串,它们可以在若干天内演化成普通化合物,掉进这个圈子里去。对这样的数字串来说,上面的结论绝大部分也同样成立,因为考虑的是“演化足够多天后”的事情。比如本文最开始讲到的从1开始的序列,数字串1本身不是普通化合物,但在第八天演化成可以分割为72号元素铪(11132)和50号元素锡(13211)的普通化合物。所以演化足够多天后,得到的化合物也将由所有92种元素组成,数字串的长度和前一天长度之比也将越来越接近康威常数,每种元素在化合物中的比例也越来越接近于此元素的丰度。

下面是完整的92种普通元素列表。本文中元素名称前通常以前下标形式注明相应的原子序数以便查询,毕竟不是每个人都能熟练地说出某元素的原子序数;笔者就无法做到这点,所以阅读康威的论文时对此有痛苦感。如果不是要自己动手验证的话,读者大可不必仔细阅读这个表格。这个表里值得注意的有几点:

  • 1号元素氢所代表的数字串22是唯一的衰变到自己的元素。
  • 92号元素铀所代表的数字串3是最短的元素。
  • 除氢外,第n号元素“一天后衰变物”一栏中都有一个加粗的第n-1号元素成份。康威基于这个性质给这92种元素排序,此性质将在后面的论证中用到。这个“第n号元素一天后会衰变出第n-1号元素”的次序并不是唯一的,康威只是挑选了其中一种。
  • 两种元素并不是可以随意拼合在一起的。比如92号元素铀(3)和20号元素钙(12)顺次拼合在一起的结果“312”应看作是另一种元素——30号元素锌,而非可分割的。而铀(3)和91号元素镤(13)顺次拼合在一起的结果“313”既不是普通化合物,又不可分割,是一种不稳定的元素。判定一个数字串是否可被分割和如何分割的准则,称为“分割定理”,是比较技术性的内容,留在本文下篇介绍。
  • 一个31号元素镓会在下一天衰变出两个20号元素钙。这是唯一的某个元素会在下一天衰变出超过一个的同一种元素的情况。

康威常数

下面是元素的丰度表,和康威的原始论文中一样,数据被乘以了一百万,以使长度固定;也就是说,一个普通化合物演化足够长时间后得到的数字串被分割成普通元素后,每一百万个元素里大约会有91790个1号元素氢,3237个2号元素氦,4220个3号元素锂等等。注重细节和有耐心的读者可以将下表这些数据和康威论文中的数据相对比,就会发现小数最后一位往往会有一点不同,比如2号元素氦的丰度是3237.2968587而原始论文中是3237.2968588。下表的数据我使用了两种不同的计算软件库得到,结果相同,所以应该没有错误。原始论文数据的差异应当是上世纪80年代时康威使用的计算软件的浮点精度不够的缘故,当然这完全没有什么大碍。有兴趣和能力的朋友也可自行计算验证,计算方法将在本文后续章节中介绍。

康威常数

我们讨论了普通元素(以及普通化合物)的性质。但我们知道,存在着无数不同于普通元素的元素,这些元素的演化结果会是什么?象1这样的元素,最终会演化成普通化合物,从而掉进普通化合物的圈子,那么有不同于普通化合物的封闭圈子吗?这是上节中的化学定理和算术定理没有回答的问题。

作为数学家,把理论推广是一种本能。康威也考虑以其他的有限数字串作为起始的演化序列的情况。比如从55555开始,然后得到

55

25

1215

11121115

等等;字符串中也可以含有其他不是十进制数字的符号(但为了方便我们仍称之为数字串),比如从%5##开始,得到

1%152#

111%1115121#

311%31151112111#

13211%1321153112311#

等等。对这样的边看边说序列,它们又会有什么样的演化性质?

 

这里有一个技术细节要处理。如果我们从1000个1组成的数字串出发,序列的第二项是1000 1(我特意在1000和1中间加了一个空格),问题是第三项应该是什么?第一种选择是,把前面这个1000看作是1130,那么第三项就是113011。而第二种选择是,把前面这个1000看作是一整个不可分割的符号,那么此时我们看第二项时会说那是1100011,那么第三项就应该是1(1000)11,这里1000被括号括起,表示这是整一个不可分割的符号。我们完全可以为1000引入一个特别的符号,比如“M”,那么就没有歧义了:看见第一项1000个1组成的数字串,我们会说那是M1,于是第二项是M1,第三项则是1M11,等等。这种另引入符号的方法其实早就有了,十六进制里我们为了表示十进制的10,11,12,13,14,15,往往用“A”,“B”,“C”,“D”,“E”,“F”来表示它们。上面的第二种选择无非就是使用了“无穷进制”,为每一个自然数单独引入一个不同的符号。

 

其实采用第一种选择还是第二种选择,对于下面要叙述的结论影响并不大。只是采取第二种选择能够让我们在演化时间上得到一个更为精细的结论,这也是康威原始论文中的选择,所以我们也同样采取这个选择。而对于不愿意在细节方面纠缠的读者来说,完全可以把初始的数字串限定为只由0-9这十个符号组成,而且其中没有超过九个连续的相同数字。你不会因此少欣赏到多少这个理论的有趣之处。

对于这样的推广情况,前面针对普通化合物的结论显然需要修改,因为那些不是“1”、“2”、“3”的符号在演化过程中永远也不会消失,所以演化过程再长,演化结果也不会仅由普通元素组成。但是令人吃惊的是,前面第二节中的结论并不需要修改很多:

  • 除了92种普通元素外,还有两类被称为“超铀元素”的镎和钚的同位素(具体形式在后面给出);
  • 从任意数字串(可以包括除“1”、“2”、“3”以外的符号)出发,在有限天内它就会演化成为普通元素和超铀元素拼接而成的化合物。如果对个数的解释采用前面的第二种选择的话,则我们可以找到这个“有限天”的上限:在24天后(也即从第25项起),任意数字串都会演化成为普通元素和超铀元素拼接而成的化合物;
  • 除了1号元素氢(即数字串22)外,从任意数字串出发,演化足够多天后,得到的化合物将由所有92种普通元素和一些超铀元素组成。每种普通元素在这些化合物中的比例越来越趋近于它的丰度,而超铀元素的比例则趋近于0;
  • 从任意数字串出发,每一步演化得到的数字串的长度和上一步相比,越来越趋近于前面所说的康威常数。

上面关于任意数字串的结论被称为“宇宙学定理”,是本理论中的基本定理。宇宙学定理要比化学定理强得多,它说明了普通元素加上超铀元素组成的化合物是终极圈子,无论从什么数字串出发,最多过24天,都会掉进这个圈子中。尽管元素有无穷多种,但是能够长期存在的,却只有普通元素和超铀元素,它们被称为稳定元素。所有其他的元素都是不稳定的。

两类超铀元素如下,其中n是任何一个除“1”、“2”、“3”以外的符号:

康威常数

 

每选取一个不同的n,就会有相应的不同的93号元素镎和94号元素钚,它们被称作镎和钚的同位素。注意到两类超铀元素是彼此的衰变产物。

“24天”这个下限不可能再缩短了,因为我们可以找到寿命恰为24天的不稳定元素2233322211n,其中n是不为“1”的数字(可以是“2”或“3”或其他符号)。下面是它的衰变过程(为了简短起见,一旦产生了稳定元素,我们就在后续项中忽略掉这一部分的后代):

康威常数

康威将这种寿命最长的达到24天的形如2233322211n的不稳定元素命名为鎷(Methuselum)。这用的是《旧约》中玛土撒拉的典故,因为传说他活了969年,是活得最长的人。

在后续章节中我们将讨论一些技术性比较强的问题,如化学定理、算术定理和宇宙学定理的证明,以及关于元素丰度的计算,和那个神秘的多项式的来历,并利用这些定理做一些具体的计算。

为后面的定理证明作技术性的准备,大概是本文最没有意思的一节。因为它的内容从难度来说,可能高年级的小学生也能理解,但却相当琐碎,都是些考虑各种可能性的叙述和论证。一般的读者大可只阅读几个命题的内容而跳过论证。对于想自己编程验证的读者,则请特别注意分割引理的内容和我在后面的算法建议。

在康威的论文中,所有单独列出来的命题都叫“定理”。下面将介绍的“一天引理”、“分割引理”等等在他的论文中叫“一天定理”和“分割定理”等等。但是这些命题基本上用来证明过其他结论后就可以丢在一边,或展示的是技术性细节,所以我改称“引理”以示它们和在上篇里介绍的三个主要定理在重要性上有区别。

我们最终要考虑以任意数字串开始的边看边说序列,故本节中提到的数字串都不排除含有除了“1”“2”和“3”以外的符号——我们也称其为“数字”,并把它们称为“大于3的数字”(如果其中选用了符号“0”,那么它在上述意义下也是个大于3的数字)。对个数的解释我们则采用上篇中提到的第二种选择,也就是说,如果有连续1000个1的话,我们就替1000引入一个新的符号如“M”,称这是M个1。

下面的“一天引理”说,其实你只需在第一天里为引入新符号头痛一下。

 

一天引理)任何一个年纪至少为1天的数字串里,不可能含有这样的子串:

1) 从奇数位置开始的baca,其中a,b,c是相同或不同的数字;

2) aaaa,或aaabbb,其中a,b是相同或不同的数字。

这个引理的证明可以用“显而易见”来形容。所谓的“年纪至少为1天的数字串”无非是说,它不是任意给出的,而是对着某个数字串边看边说出来的。要是在奇数位置开始出现了baca这样的子串,相当于在说看到的那个数字串里有“baca”,这是不允许的,令d=b+c,你得说是“da”。不允许出现aaaa也一样,因为即便它在偶数位置开始,那也是在说“……个aaaa个……”。aaabbb形式的子串也一样证明。

因为连续4个相同的字符不可能出现在一个年纪至少为1天的数字串里,那么连续4个以上相同的字符也不可能。所以所有大于3的数字,要么是最初(第0天)就有的,要么是第1天产生的(比如最初字符串里有连续1000个1,会在第1天被描述成M个1,从而引入数字M),从第2天开始就不会再有新的了。而对年纪至少为2天的数字串,我们还可以排除掉更多的子串的可能性:

 

两天引理)在第2天和以后都不可能产生新的除了“1”“2”和“3”以外的符号。任何一个年纪至少为2天的数字串里,不可能含有这样的子串:

1) 3a3(特别地,不可能有333这样的子串);

2) ab,其中a和b都是大于3的数字。

3a3这样的子串如果是在奇数位置开始出现的,那是边看前一天的数字串边说“3a3个……”,也就是aaabbb这样的子串,可根据一天引理这是不可能的;如果是在偶数位置开始出现的,那则是在讲“……个3a3”,这是不允许的。

如果有ab这样的子串,其中a和b都是大于3的数字,那么意味着前一天有“ab”或是“b个……”形式的子串,一天引理也排除了这种可能性。

顺便说一句,从第3天起,数字串中大于3的数字的数量当然不会增加,但也不会再减少了,它们最终会产生出超铀元素的同位素。比如第0天的数字串如果是4444,第1天变成44,第2天变成24,“4”的数目一直在减少,但从第3天起,序列中的每个数字串都有且仅有一个4。

一个数字串中如果没有一天引理中的2)和两天引理中1)和2)提到的那些子串,它就是个好数字串。一天引理和两天引理说的就是,如果一个数字串是一个年纪至少2天的数字串的子串,它一定是个好数字串。好数字串总是演化出好数字串来。我们接下来要考虑的数字串都是好数字串。

下面介绍三种数字串模式,都是规定它是怎么开始的。这些模式在后面的引理中很重要:

  • A型:1a……的形式,其中a是不同于1的数字,而省略号部分或者是空的(也就是整个数字串就是1a),或者是一个不以a开头的数字串。
  • B型:111……的形式,其中省略号部分或者是空的(也就是整个数字串就是111),或者是一个不以1开头的数字串。
  • C型:3……的形式,其中省略号部分或者是空的(也就是整个数字串就是3),或者是一个不以3开头的数字串,而且前3个数字不都相同(如果这部分的长度至少是3的话)。

容易证明,任何A型好数字串过一天会变B型好数字串,任何B型好数字串过一天会变C型好数字串,任何C型好数字串过一天会变A型好数字串。这3型数字串都不以2开头,以2开头则有三种引申出来的数字串模式:

  • A'型:22……的形式,其中省略号部分是个A型数字串。
  • B'型:22……的形式,其中省略号部分是个B型数字串。
  • C'型:22……的形式,其中省略号部分是个C型数字串。

这样我们就得到了3种循环模式,而下面的引理则更进一步:

 

起首引理):一个数字串的演化最终总会进入下面三种循环之一:

1) ……→A型→B型→C型→……

2) ……→A'型→B'型→C'型→……

3) ……→22→22→……

如果它还没有进入循环,那么“1”“2”和“3”将均会出现在它后面演化过程中各项的首个数字中。

命题的最后一句话其实是说,如果一个数字串最终会进入ABC循环可是却还没进(也就是它还不是ABC型中的一种),那么它迟早会演化出一项以2开头的数字串来,然后再进入循环(那时不断地以1或3开头);而如果一个数字串最终会进入A'B'C'循环可是却还没进,那么它迟早会演化出一项以1开头的数字串,和一项以3开头的字符串,然后再进入循环(那时总以2开头)。循环3)则是数字串22独有的。

起首定理的具体证明就不多说了,完全是力气活,把所有可能性都考虑一遍;多亏一天和两天引理,可以少考虑不少可能性。这证明小学生也能看得懂,可就是太啰哩吧嗦,真想看就只好请读者直接读原论文了。为了叙述方便起见我们再引入两个数字串开始的类型:

  • X型:以大于3的数字开始。
  • X'型:22……的形式,其中省略号部分或者是空的(也就是整个数字串就是22),或者是个X型数字串。

 

现在我们终于可以引入下面这个重要的引理,也就是分割的准则:

分割引理)一个好数字串可以在某处分割成前后两个子串,当且仅当在满足以下某种情况时:

康威常数

有了起首引理,分割引理“当”部分的证明很容易。第一种情况很简单,以“1”,“2”或“3”开始的后数字串总还是演化成以“1”,“2”或“3”开始的数字串,不会和永远以大于3的数字结尾的前数字串混起来。第二种情况,前数字串永远以“2”结尾,后数字串永远以“1”或“3”或是大于3的数字开始,也不会混起来。第三种情况,前数字串永远不以“2”结尾,后数字串永远以“2”开始,也不会混起来。注意到如果结合第二种情况,在第三种情况下我们其实总能将数字串分割成3段:前数字串,22,以及一个A型或B型或C型或X型的数字串——除非原本的后数字串就是22本身。

还要证明“且仅当”部分,即除上述情况之外就不能分割。这个留给读者证明,去读康威的论文也没用,他同样也留给读者证明。证明过程的关键是起首引理结论的最后一部分。

如果读者要自己编一个分割数字串的程序,我建议采用如下方法:

首先验证那是个好字符串。然后找到所有不是“1”“2”“3”的数字,在它后面分割,将数字串分割成若干段。对每段分割好的子串进行如下操作:找到所有2,验证它后面的子串是否A、B、C、X型,如是则在这个2后面分割。对每段分割好的子串进行如下操作:验证它是否以恰好2个2结尾,如是,则将这2个2分割。

容易看出,这个算法能够将好数字串作完全的分割,既不会分割错,也不会有该分割却没有分割的地方。

 

最后相应于起首引理还有个结尾引理,没什么太大用处,为了完整起见也叙述一下:

结尾引理):经过足够长时间后,

1) 任何一个以“1”结尾的数字串在演化过程中,序列的数字串末尾总会进入4步循环:
康威常数

2) 任何一个以“2”结尾的数字串在演化过程中,序列的数字串末尾总会进入2步循环:
康威常数

3) 任何一个以“3”结尾的数字串在演化过程中,序列的数字串末尾总会进入2步循环:
康威常数

4) 任何一个以大于3的数字“n”结尾的数字串在演化过程中,序列的数字串末尾总会进入2步循环:
康威常数

五、化学定理和宇宙学定理的证明

在此重新叙述一下化学定理的内容:

化学定理) 任何一种普通元素的后代都是普通化合物,普通化合物的后代也是普通化合物。除了1氢外,从任意一种普通化合物开始,演化足够多天后,得到的化合物将由所有92种普通元素组成。

第二节的元素列表具体地拿出来后,定理前面一句的证明就差不多完成了:无非是验证一下元素所代表的数字串一天后的产物的确就是“一天后衰变物”一栏中化合物所代表的数字串,而且其中的分割是正确的。

定理后面一句如果可以用算术定理的话,证明也很简单:因为经过足够多的时间后,除了1氢外的任何普通化合物演化出的数字串中各普通元素的比例会趋近于丰度,而每种普通元素的丰度都严格大于0,所以我们自然能得出每种普通元素都在这些数字串中存在的结论。不过如果不用算术定理,只通过元素列表,我们也同样能证明这一点。

首先,通过元素列表的重要特性,即对任何大于1的自然数n,第n号元素一天后会衰变出第n-1号元素这点可知,任选一种除了1氢外的普通元素,从它出发都能衰变出任何一种普通元素。因为所有原子序数较大的都能衰变出原子序数较小的,而衰变到2氦时则能回头衰变出91镤,然后能衰变出39钇,最终衰变出92铀来,从而进一步衰变出任何普通元素。

其次,容易看出两种元素间通过固定的衰变途径,从一种元素演化到另一种元素的时间间隔是固定的。比如通过6碳→5硼→4铍→32锗→67钬这条衰变途径,从6碳到67钬用了4天,那么我们可以肯定,如果在第d天化合物中有6碳元素,那么第d+4天化合物里一定有67钬元素。

注意到2氦→3锂→2氦这条途径,从2氦出发,每隔一天能产生出一个2氦来。如果第一个2氦出现在第h天,那么后面所有和h间隔偶数天的日子里也会有2氦。再看2氦→20钙→19钾→18氩→……→4铍→3锂→2氦这条途径,如果第h天有2氦,那么第h+19天也会有2氦,然后从那以后每隔一天都会有2氦。也就是说,如果第h天有2氦,那么从第h+19天起,每天都有2氦。所以我们有了第三个结论:任选一种除了1氢外的普通元素,从它出发,在足够长时间后,每天产生的化合物中都有2氦。

上面这三点结合起来的推断出的结论自然就是,任选一种除了1氢外的普通元素,从它出发,在足够长时间后,每天产生的化合物中都有92种普通元素中的任何一种。这就完成了化学定理的证明。

至于宇宙学定理,按照康威的说法,那是非常非常难的,写出来会很长。他和Richard Parker花了一个月搞出来过一个证明,但是稿子遗失了。Mike Guy也曾证明了这个定理,比前面这个短一些可还是很长,而且他的稿子也遗失了。基于以上理由,在论文里他干脆就什么证明都没放,只问“你能找到一个几页就能写下的证明吗?拜求!”

康威常数

康威的宇宙学定理的“证明”

这大概是自费马在《算术》一书的书边对他的“大定理”写下“我确信已发现了一种美妙的证法,可惜这里空白的地方太小,写不下”后最拽的“此定理已证”的声明吧。

直到2003年,美国路易斯安那州立大学的数学家R. A. Litherland才给出了一个完整的宇宙学定理的证明。这个证明是由计算机辅助完成的,也就是说,先使用人工的推理将定理的证明转化成对一些特殊的有限的情况的验证,然后再使用程序来验证这些情况,因为使用人力来验证太困难。史上最著名的采用计算机辅助方式的证明大概是四色定理的证明。

宇宙学定理中和普通化合物算术定理并行的部分很容易通过后者证得:因为超铀元素的数目从第二天开始就固定,而普通元素的数量则随着演化趋向于无穷,所以超铀元素对化合物长度和成分的贡献可以忽略不计。

本文对宇宙学定理的证明的介绍就到此为止。接下去应该介绍算术定理的证明了,这是本文最有意思的一部分,但是了解它需要线性代数的知识。所以在此之前,我打算先讨论一下边看边说序列理论中的这几个定理的应用,这一部分不需要线性代数的知识。

 

收起全文

西装

60岁的你,记忆中依旧眉目如画

60岁的你,记忆中依旧眉目如画

不朽的哥哥&&张国荣 13年前的3月31日,我还在读书,那晚刚好写完假期前要交的最后一篇论文,把电脑一关,和自己说&终于可以好好睡一觉&。几个小时过后,电话响了,是同学打给我说:&哥哥跳楼了。&我非常严肃地告诉她:&我已经熬了好几个通宵,愚人节不要这样玩。&然... 阅读全文

 

 

不朽的哥哥——张国荣

60岁的你,记忆中依旧眉目如画                                                                           

13年前的3月31日,我还在读书,那晚刚好写完假期前要交的最后一篇论文,把电脑一关,和自己说“终于可以好好睡一觉”。几个小时过后,电话响了,是同学打给我说:“哥哥跳楼了。”我非常严肃地告诉她:“我已经熬了好几个通宵,愚人节不要这样玩。”然后把电话挂了。但是,电话接连地响,我终于爬起床打开电脑。那一瞬间的感觉,感觉整个世界一片空白,不知道如何形容。

 

2012年,环球唱片出了哥哥的纪念合集唱片,陈奕迅翻唱了哥哥的《最冷一天》,是的,就是那种感觉,尽管宿舍暖气还开着,依旧是最冷一天。

 

今年,哥哥当年的旧作《缘分》重新放映,这么多年过去了,我们都老了,只有他,依旧眉目如画。

60岁的你,记忆中依旧眉目如画

那是个没有医学美容、没有美图秀秀、没有高光磨皮的时代,那时候明星的好看,是真的好看。但即使在星光熠熠的那个时代,张国荣依旧是最出色最好看的一个人。


哥哥的好看,不只是那种五官玲珑剔透的好看,他的一颦一笑,他的举手投足,都带有慑人的魅力。

那个年代没有那么多社交网络没有那么多狗仔文化,粉丝了解偶像的方式,只有看电影和演唱会。有时候因为他演得太好,甚至分不清《纵横四海》《春光乍泄》《霸王别姬》还是《东邪西毒》里哪个才是他?

60岁的你,记忆中依旧眉目如画

60岁的你,记忆中依旧眉目如画

抑或是红馆演唱会里,一袭白衬衣的他,才是真正的张国荣。但这又有什么关系,中学时代,一群女生去唱卡拉OK,会有人点《左右手》,然后静静地看完MV。这是他留给我们青春最美好的记忆。

60岁的你,记忆中依旧眉目如画

哥哥演过很多角色、拍过很多电视剧和电影,以及很多写真集。他是我记忆中,至今穿西服最好看的华人男明星,只有他,确实配得上“官仔骨骨”四个字。


张国荣能把西装穿出很多截然不同的韵味:

 

穿燕尾服的时候,他是亦舒笔下那个叫做家明的贵族少爷。

60岁的你,记忆中依旧眉目如画

西服搭毛衣的时候,他是外冷内热的暖男。

60岁的你,记忆中依旧眉目如画

哪怕是整套大地色系的西服,我从来没想过有人能穿出俏皮感和书卷味。

60岁的你,记忆中依旧眉目如画

张国荣穿西服好看,除了颜正身材好,和他留学英国历练的气质有关,但更重要的是,他是真真正正出自裁缝世家、幼承庭训。张国荣的爸爸张活海先生,是香港著名的洋服裁缝大王,早在上世纪三十年代已于香港的中环德己立街开设洋服店。售卖的款式都是当时好莱坞最新的时尚著名导演希区柯克、演员加里·格兰特、马龙·白兰度、威廉·霍尔登等好莱坞巨星也曾专程光顾。


 60岁的你,记忆中依旧眉目如画

他在大家族中排行第十,所以昵称“十仔”,有时候我会觉得,《胭脂扣》里的十二少,就是他的侧影。

60岁的你,记忆中依旧眉目如画

赖师傅,偶然提及哥哥曾找他定做西服,经不住我死缠烂打,才透露一些关于哥哥的小故事。


“大部分明星都是上镜比真人好看,但Leslie是真人上镜都好看。穿随随便便的家居服不化妆,都好看。”

 60岁的你,记忆中依旧眉目如画

60岁的你,记忆中依旧眉目如画

“在《上海滩》时代前后,去他家给他量身做西服,他人特别好。或者也是和他爸爸是裁缝有关,他对裁缝师傅很尊敬,有礼貌,丝毫没有明星的派头。他很懂服装,家里是做这行的,自己读书也是读这个(张国荣曾就读英国利兹大学纺织管理系),会提很多具体的很内行的要求,是我们裁缝所能遇到最好的客户了。”

60岁的你,记忆中依旧眉目如画

有时候我会想,如果当年哥哥把大学读完,现在的他,会是蛮声国际的华人设计师,还是一个中年发福子承父业的老派裁缝。但是,一切都没有但是,我依旧感谢他,给我们带来那么多美好的回忆。


不需要记住那些离别的眼泪,不需要无谓的猜测和如果,哥哥很早就以一首歌告诉过我们,他从来没有后悔过自己的选择。“I am what I am 我是我 多么特别的我”。

60岁的你,记忆中依旧眉目如画

收起全文
人人小站
更多热门小站
X