Zoomquilt II & Infinite OZ 无限放大之加强版

    这篇日志里,我曾提到过一个非常牛B的Flash动画The Zoomquilt,它由一系列的图片拼接而成,并且这些图片最终形成了一个循环,从而产生出无限放大的效果。最近,网络上出现了Zoomquilt加强版Zoomquilt II,它比前一代包含更多的图片和更丰富的细节。如果你喜欢他们的前一个作品的话,你会更加喜欢这个加强版的。
    每年的这个时候,SciFi频道都会推出一个Mini科幻剧,通常只有三集,每集大约两个小时。最新的Mini科幻剧Tin Man讲述一群人被困在一个叫做Outer Zone的地方,前几天刚刚播完。SciFi频道为这部剧集制作了一个类似的Flash动画,效果更加华丽,完全看不出拼接的痕迹,并且还加入了声音和动画效果。

另类搞笑:自我指涉例句不完全收集

这句子很短。
我是这个句子的主语。
这个句子有八个字。
的写着倒是话句这
这是一个问句吗?
这个句子是不是一个自我指涉的句子?

这句话是假的。
这个句子又三个错悟。
这个句子会让你联想到小泽玛丽亚吗?
有没有什么句子会莫明其妙地包含“哈密瓜”这个词?
如果“真”和“假”的意思颠倒一下,这个句子就不会是错的了。

The eighth word in this sentence is last.
This sentence begins and ends with this.
This sentence repeats the word twice twice.
A preposition must never be used to end a sentence with.
This Is the Title of This Story, Which Is Also Found Several Times in the Story Itself

这个世界上有三种人:会数数的和不会数数的。
这个世界上有10种人:会二进制的和不会二进制的。
这个世界上有10种人:会二进制,不会二进制的,和错把它当成二进制的。
这个世界上有两种人:认为这个世界上有两种人的,和不这么认为的。

世上没有“绝对”。
迷信会带给人厄运。
87.5%的统计数据都是编造出来的。
所有普遍化的原理都是有问题的。
所有的规则都可以被打破,这一条除外。

我他妈的从不骂脏话。
他们造的谣有一半都是真的。
和以往一样,你做的异常出色。
记住,你是独一无二的,就像其他人一样。
在我讲话之前,有一些事情我想先交待一下。
如果有人爱你,请无条件地把爱奉献给他吧。
我也想变得很有耐心,但这需要花很长的时间。
我从不做任何预言。我现在不会,将来也永远不会。
我曾经以为我做事情总是犹豫不决,但现在我不敢肯定了。

我是我所见过的最不谦虚的人。
那些去看心理医生的人脑子都有问题。
再也不会有人去那里了,那地方太拥挤了。
成功的两条秘诀: 1. 不要把你知道的东西都告诉别人
谁说我很自大?自大是一种错误,但我没有任何错误。
我讨厌两种人:一是有种族歧视的人,二是黑人。
天哪,我肯定是这个星球上的最后一个乐观主义者了。
计算机就像猞猁一样,我一时间都想不出什么合适的比喻。

Never say never!
我们要打破一切规则!
这真是迈进未知世界的一大步啊!
我们必须要坚持自由意愿,我们别无选择!

定理:考虑由所有从未被考虑过的集合所组成的集合……嘿!它们全都不在了!!
排中律的定义:你要么相信排中律,要么不相信排中律。
Hofstadter法则:任何事花费的时间都比你想象中的长,即使你把Hofstadter法则也考虑进来。

定理:所有的数都可以用20个以内的汉字表达(比如25852016738884976640000可以表达为“二十三的阶乘”,100000000000000000000000可以表达为“一后面二十三个零”)
证明:反证,假设存在不能用20个以内的汉字表达的数,则必有一个最小的不能用20个以内的汉字表达的数,而这个数已经用“最小的不能用20个以内的汉字表达的数”表达出来了,矛盾。
(大家想一想,这个“定理”的“证明”有什么问题?)

An Englishman, an Irishman, and a Scotsman walk into a bar. The bartender turns to them, takes one look, and says "What is this – some kind of joke?"

A Catholic Priest, a Rabbi and a Muslim Imam all sit next to one another at a diner. The Rabbi turns to the other two and says, "Hey, did you hear the one about us?"

A Priest, a Rabbi and a Leprechaun walk into a bar. The Leprechaun looks around and says, "Woah bejaysus! I'm in the wrong joke!"

我拥有一个漂亮而有智慧的妻子,没有了她我将一无所有。她总是那么善解人意,从不抱怨,从不争吵,无私奉献却不求回报,并且她还替我写好了献辞。

哲学考试,教授出题:“这就是题目,请做答”。某学生挥笔写下几个大字:“这就是答案,请给分”。

recursion
Main Entry: re·cur·sion
Pronunciation: ri-'k&r-zh&n
Function: noun
Etymology: Late Latin recursion-, recursio, from recurrere
1 : see RECURSION

一个逻辑学家救了一个外星人。外星人很感谢他,给了他一个问问题的机会(因为外星人无所不知)。
于是,逻辑学家问:“我现在应该问的最好的问题是什么,它的答案又是什么?”
外星人顿了一下,然后回答:“最好的问题就是你刚才问的那个问题,问题的答案就是我现在给你的这个答案。”

本文来源:http://www.matrix67.com/blog/article.asp?id=429

编辑距离、拼写检查与度量空间:一个有趣的数据结构

    除了字符串匹配、查找回文串、查找重复子串等经典问题以外,日常生活中我们还会遇到其它一些怪异的字符串问题。比如,有时我们需要知道给定的两个字符串“有多像”,换句话说两个字符串的相似度是多少。1965年,俄国科学家Vladimir Levenshtein给字符串相似度做出了一个明确的定义叫做Levenshtein距离,我们通常叫它“编辑距离”。字符串A到B的编辑距离是指,只用插入、删除和替换三种操作,最少需要多少步可以把A变成B。例如,从FAME到GATE需要两步(两次替换),从GAME到ACM则需要三步(删除G和E再添加C)。Levenshtein给出了编辑距离的一般求法,就是大家都非常熟悉的经典动态规划问题。
    在自然语言处理中,这个概念非常重要,例如我们可以根据这个定义开发出一套半自动的校对系统:查找出一篇文章里所有不在字典里的单词,然后对于每个单词,列出字典里与它的Levenshtein距离小于某个数n的单词,让用户选择正确的那一个。n通常取到2或者3,或者更好地,取该单词长度的1/4等等。这个想法倒不错,但算法的效率成了新的难题:查字典好办,建一个Trie树即可;但怎样才能快速在字典里找出最相近的单词呢?这个问题难就难在,Levenshtein的定义可以是单词任意位置上的操作,似乎不遍历字典是不可能完成的。现在很多软件都有拼写检查的功能,提出更正建议的速度是很快的。它们到底是怎么做的呢?1973年,Burkhard和Keller提出的BK树有效地解决了这个问题。这个数据结构强就强在,它初步解决了一个看似不可能的问题,而其原理非常简单。

    首先,我们观察Levenshtein距离的性质。令d(x,y)表示字符串x到y的Levenshtein距离,那么显然:

1. d(x,y) = 0 当且仅当 x=y  (Levenshtein距离为0 <==> 字符串相等)
2. d(x,y) = d(y,x)     (从x变到y的最少步数就是从y变到x的最少步数)
3. d(x,y) + d(y,z) >= d(x,z)  (从x变到z所需的步数不会超过x先变成y再变成z的步数)

    最后这一个性质叫做三角形不等式。就好像一个三角形一样,两边之和必然大于第三边。给某个集合内的元素定义一个二元的“距离函数”,如果这个距离函数同时满足上面说的三个性质,我们就称它为“度量空间”。我们的三维空间就是一个典型的度量空间,它的距离函数就是点对的直线距离。度量空间还有很多,比如Manhattan距离,图论中的最短路,当然还有这里提到的Levenshtein距离。就好像并查集对所有等价关系都适用一样,BK树可以用于任何一个度量空间。

    建树的过程有些类似于Trie。首先我们随便找一个单词作为根(比如GAME)。以后插入一个单词时首先计算单词与根的Levenshtein距离:如果这个距离值是该节点处头一次出现,建立一个新的儿子节点;否则沿着对应的边递归下去。例如,我们插入单词FAME,它与GAME的距离为1,于是新建一个儿子,连一条标号为1的边;下一次插入GAIN,算得它与GAME的距离为2,于是放在编号为2的边下。再下次我们插入GATE,它与GAME距离为1,于是沿着那条编号为1的边下去,递归地插入到FAME所在子树;GATE与FAME的距离为2,于是把GATE放在FAME节点下,边的编号为2。
      
    查询操作异常方便。如果我们需要返回与错误单词距离不超过n的单词,这个错误单词与树根所对应的单词距离为d,那么接下来我们只需要递归地考虑编号在d-n到d+n范围内的边所连接的子树。由于n通常很小,因此每次与某个节点进行比较时都可以排除很多子树。
    举个例子,假如我们输入一个GAIE,程序发现它不在字典中。现在,我们想返回字典中所有与GAIE距离为1的单词。我们首先将GAIE与树根进行比较,得到的距离d=1。由于Levenshtein距离满足三角形不等式,因此现在所有离GAME距离超过2的单词全部可以排除了。比如,以AIM为根的子树到GAME的距离都是3,而GAME和GAIE之间的距离是1,那么AIM及其子树到GAIE的距离至少都是2。于是,现在程序只需要沿着标号范围在1-1到1+1里的边继续走下去。我们继续计算GAIE和FAME的距离,发现它为2,于是继续沿标号在1和3之间的边前进。遍历结束后回到GAME的第二个节点,发现GAIE和GAIN距离为1,输出GAIN并继续沿编号为1或2的边递归下去(那条编号为4的边连接的子树又被排除掉了)……
    实践表明,一次查询所遍历的节点不会超过所有节点的5%到8%,两次查询则一般不会17-25%,效率远远超过暴力枚举。适当进行缓存,减小Levenshtein距离常数n可以使算法效率更高。

Matrix67原创
做人要厚道 转贴请注明出处

趣图:分形图形之海岸线 无限放大的图片

    你可能见过那个非常火星的Flash动画,那里你可以见到一组诡异的图最终形成了一个循环,于是得到一个可以无限放大的图片。下面是这类动画的一个非常牛B的特例,形象地表达出了分形思想:

  

    这张图片或许可以帮助你理解“海岸线无限长”一说。这个海岸线可以无限放大,线条的复杂度不随放大而消失,是一个典型的分形图形。按照前面说过的某些结论,这样的线条很可能无限长,和Koch曲线非常类似:

  
    顺便膜拜一下制作这个gif动画的人,技术含量很高啊。

创意游戏推荐:FPS+解谜 VALVE新游戏发行

    提到VALVE,多数人的第一反应就是半条命和CS。但似乎很少有人知道,VALVE竟然用这套引擎做了一个第一人称射击类的解谜游戏,其创意和趣味性不亚于以前本Blog介绍的任何一个游戏!这个新游戏叫做Portal,游戏设定在一个未来的科学实验室中,每一关里你需要充分利用手中的Portal发射器到达指定的出口。Portal发射器的子弹射到(指定材质的)墙上后会形成虫洞一样的东西(游戏中叫做Portal),你可以在两个Portal间任意穿梭。于是,分形、递归、悖论、自指……所有你能想到的那些诡异的东西现在都可以在游戏中亲身体验了。

下面这段视频是很早以前官方的预告片:

昨天这款游戏发行后,国外很多玩家第一时间过了手瘾。下面这段视频就是某个玩家录制的Level 8通关录像:

上面两个视频的YouTube链接:
http://www.youtube.com/watch?v=Wb7aDZeO_MQ
http://www.youtube.com/watch?v=bA9sZL-mjxU
想要这个游戏的同志最近可以留意一下国外的BT种子发布区,过几天各种破解版的种子会像潮水般涌来的:)
我这个破本本就算了……这可能是我见过的最华丽的、系统配置要求最高的解谜游戏。