利用多元统计分析对遥感图片进行数据压缩

这是我计划中毕业论文的题目。

其实挺无聊的,也没什么好研究的。但它符合我的要求:

  1. 它不会占用我过多的时间
  2. 它不需要任何经费
  3. 它也许还有点用

我并没有太看重毕业论文,所以我才需要这样简单的课题。事实上,它还满足老师们的要求:

  1. 它符合貌似很学术的格式 : “利用模拟退火对…”、“遗传算法在…中的应用”、“基于ISODATA算法的…”
  2. 它似乎还和我所学的专业占上一点边

我的看法是,随着遥感卫星波段的增加,人们迟早会开始考虑对遥感图片进行数据压缩。但这并不是最重要的,我想到了一个更妙的用处。

遥感图片当然应该是商品,商业化可以提供更好的图片质量和更低的价格1。但是,简单的按分辨率、面积和波段出售并不合理。如果按主成分分析中的贡献率来制定价格则要好得多。客户可以根据其需求购买不同等级的贡献率。并且随着其对精度要求的增加,也可以增量的购买新的贡献率。降低门槛意味着遥感卫星业的商业化速度可以得到提高。

注1 : 遥感仍然是一个新兴领域,它并不够成熟,商业应用也才刚刚起步。在美国,当然没有一家公司发射一整套GPS卫星(大约27颗左右),但是,确实有一些公司发射了增加GPS精度的辅助卫星。再想想Google Earth,卫星也只是商品。

on January 1st, 2009 | 1 Comment »

天才的错误

陶哲轩,华裔澳大利亚籍数学家,IQ在220-230之间。最近很有名的原因是探索杂志把他评为美国40岁以下最聪明的科学家。科学松鼠会有比较具体的介绍。

他最近在blog上提出一个有趣的问题,给出了Hint,随后又把它删掉,因为他做了一个incorrect calculation。

题目原文见陶哲轩的blog(被屏蔽),中文译文见阮一峰的网络日志。此外,善用佳软对这个问题有一个详细的分析。

我很赞成善用佳软的看法,答案不重要,最重要的是”用更简单的分析”得出答案。包括我写的求职测试准备2求职测试准备3中就是这么做的。然而在陶哲轩文后的留言中,却随处是大把大把的公式。利用公式进行符号推导是一种严谨的做法。但对于一个简单的问题来说,这是极度一个缺乏美感的行为。

除了善用佳软的给出的思路外,极限假设法也是一个非常好的解决手段,适合各种选择题以及不需要分段讨论的解答题1

以第一个问题为例,假设没有电梯的区域几乎为0,这样,问题简化为AB间有一个电梯,从A到达B最快的策略是在电梯上系鞋带还是在电梯口系鞋带。这时答案已经浮出水面了。

对第二个问题,可以假设步行速度几乎为0,而用于跑步的有限能量刚好够跑完没有电梯需要步行的区域。这个答案更直观。

虽然天才也会计算错误,不过他提出的这个非常生活的趣题仍然让我觉得很开心。我也喜欢在类似的场景提出和思考一些类似的问题。比如说:

  1. 如果我需要在日字形的马路走对角线,在遵守红绿灯的情况下,怎样的行为是最优的?
  2. ATI显卡型号现在的前缀是X,我和朋友打赌在X用完之后会使用什么字母,两人各自提出一个字母,最接近ATI最后使用的字母一方胜,作为先给出答案者和后给出答案者,分别应当使用什么策略?如果有三个人的情况又如何?

这种问题的答案毫无意义,比如说我们现在已经知道在电梯上系鞋带比较节约时间。但是具体怎么操作完全是一个喜好问题,有些人喜欢发现的时候就系好,有些人会觉得在路边的栏杆上比较方便,还有些懒人可以等到下次穿鞋的时候再系^^。但越是这样无用的傻问题,我越是乐在其中。:)

注1:如何判断一道解答题是否需要分段讨论?这个问题高三的学生应该最为熟悉。我只能说,靠经验,看题目暗示。

on December 27th, 2008 | 2 Comments »

盲签名与盲签名协议

Matrix67真的是一个非常聪明的人,在短时间内就体会到密码学的真谛——密码学关注更多的并不是加密解密的各种数学算法,而是在已有数学算法上如何实现各种安全需求。这个结论非常棒,早在高中时候我就看了应用密码学,也没能组织出这么言简意赅的话来。

比如说盲签名和盲签名协议就是很好的例子。

盲签名是一种技术手段,一种实现某个目标的数学算法。这个目标很简单——A让B签署一份文件,但是在签署文件的过程中,B不能知道文件的内容。

盲签名协议则是一整套对算法的使用方案。如果参与者遵循协议的约定1,就可以达成仅仅使用算法无法达成的目标——B愿意为A签署一份文件,B也不关心文件的具体内容,只要文件的要求对他来说是合理的。

这看起来似乎不可思议,如果B不能看见文件的内容,怎么知道文件的要求是合理的?

在考虑盲签名协议的时候,我们并不关心盲签名算法的具体细节。因此,我们不妨对它进行一个抽象。A把需要签名的文件连同一张复写纸一起装入一个信封。B在信封上签名,

下面是盲签名协议的过程:

  1. A打印出N份文件,这些文件是合理的,但它们在需要对B保密的细节上不同。
  2. A把它们连同复写纸一起各自装入信封,提交给B。
  3. B任意选择其中N-1份信封,要求A打开他们。
  4. A向B提供打开那N-1份信封的钥匙。
  5. B打开信封。如果这些文件都是合理的,B在剩下的信封上签名,并把信封交还给A。
  6. A打开信封得到需要签名的文件。

在整个协议中,如果A对B作假,他仅有1/N的几率可以得逞。而无论何种情况,B都无法知道最后被签署的文件的内容。

就像在暗黑破坏神中,三个无暇的钻石可以合成为一个完美的钻石,在密码学中,一些简单的协议也可以合成为一个复杂的协议。在这种情况下,简单的协议就被看作一种算法,复杂协议不关心它具体的实现过程,只要它满足特定的性质即可。

事实上,可以直接使用盲签名算法的场景几乎是没有的,因为没有人愿意为别人签署一份不知道内容的文件。可以直接使用盲签名协议的场景也是不多的,因为最后需要签署的文件是不确定的。但是,合成自盲签名协议的复杂协议却是满地都是,而且大多前途辉煌。比如数字现金、匿名投票等。

在数字现金中,银行需要一个唯一编号(unique id, uid)来确保被签署的电子现金不会在两家商店重复使用。而客户不想被银行通过这个uid追踪2。在这种情况下,需要签名的文件就是现金金额和uid。客户不关心他最后得到的数字现金的uid是什么,只要它可以被使用,并且不会被银行追踪。实际的数字现金协议比这个复杂很多,但都是基于盲签名协议的。而密码学中的各种协议,就是这样一砖一瓦的盖建。数学家找到一些算法来完成一些很基本的事情,密码学家通过堆砌算法和简单协议来实现更广阔的目标。

注1:如果不遵守怎么办?一个设计良好、没有被扔进回收站的协议可以保证其他人会发现有作弊者存在。不过,在多方协议中,能够提供足够的证据指出哪一方是作弊者的倒是不多,这一点确实非常难以实现。

注2:信用卡的出现可能已经让我们忘记了使用现金的好处了。使用现金通常是一种匿名的过程,银行只有在理论上追踪它们,比如对罪犯。但是存在于硬盘中的信息,确实可以让银行以一种非常小的代价追踪你的隐私。比如你每隔多久在什么超市购买了一盒杜蕾斯。只有银行并不拥有这些信息,我们才可以更放心。

on December 16th, 2008 | 1 Comment »

四金到底掏谁的腰包

四金,各地叫法不统一,也有叫三险一金的,包括养老保险、医疗保险、失业保险和住房公积金。有些地方已经发展到五限一金,还包括生育保险和工伤保险。

交纳比例各地也不一致,这里以上海为例。(其实大家比我更清楚,只是列出数字好扯出话题)

企业 个人
养老保险 20% 8%
医疗保险 8% 2%
失业保险 1.5% 0.5%
住房公积金 10% 10%

上表可以看出,单位交纳的部分大约是个人交纳的2倍。

–真的是这样吗?

–不是这样。

–为什么?

这些社会保险,其实很类似于税收。人大代表们当然可以立法确定其向企业和个人征收的比例,但是情况确没有这么简单。当然企业和个人分担了这些保险金,但是真实的分担比例却和上面的比例无关。

在劳动力市场中,其供给量是比较固定的。很少有人会因为目前劳动力的价格很低就放弃供应劳动力。而其需求却是比较灵活的,否则今年工作也不会那么难找了。

按照经济学的术语是:劳动力的供给是缺乏弹性的,而劳动力的需求是富有弹性的。

在这种情况下征税,税收实际主要来源于缺乏弹性的一方。

economics-social-insurance

如图所示,供给曲线是工人们愿意提供的劳动力随工资变化的函数图像;需求曲线代表企业们愿意接受的劳动力随工资变化的图像。最终的工资就是这两条曲线的交点。供给曲线陡峭是因为工人们提供的劳动力总量对工资不太敏感,工资下降也不会停止提供的劳动力。而需求曲线则相对比较平缓。需要注意的是,这里的工资应该是一个平均的概念。

当政府征税时,不管是向买方征税,还是向卖方征税,其效果都是一样的。援引曼昆的经济学原理1

如果我们设想政府在每家冰激凌店的柜台上放一个碗来收取0.5美元的冰激凌税。当政府向买者收税时,要求买者每买一个冰激凌蛋卷往碗里放0.5美元;当政府向卖者收税时,要求卖者每卖出一个冰激凌蛋卷往碗里放0.5美元。0.5美元是直接从买者的口袋进入碗内,还是先从买者的口袋进入卖者手中,在间接进入碗内,都无关紧要,一旦市场达到新均衡,都是买者与卖者分摊税收负担。

economics-social-insurance-2

而具体的分摊比例,正式根据供需双方的弹性决定的。如上图所示,如果没有税收,供给曲线和需求曲线的交叉点就是平衡时的价格。当税收存在时,供给曲线、需求曲线或它们两者会上下移动。但不管是谁移动,再次平衡之后的效果都是相同的。企业付出了A的工资,工人得到B的工资。其中弹性较大的一方的损失会小于弹性较小的一方。

因此,四金基本上还是自己付的。

注1:关于冰激凌的例子,还可以参考Matrix67的征税到底亏了谁

on December 2nd, 2008 | No Comments »

经济学原理学习笔记(4)

第二章 像经济学家一样思考

2.1 作为科学家的经济学家

科学的本质是科学方法。科学方法:观察、理论、进一步的观察。

在经济学中做实验通常是困难的:研究通货膨胀的经济学家绝不会被允许仅仅为了获得有用的数据而操控一国的货币供给。经济学家像天文学家、进化论生物学家一样,通常不得不使用这个世界碰巧向他们提供的数据。

经济学家像物理学家一样,做出假设,忽略一些次要因素,使复杂的世界简化。

两个经济学模型:循环流量图和生产可能性边界。

上图是汽车和电脑的生产可能性边界示意图。生产可能性边界通常是这种凹向原点的形状。这是因为当该经济把大部分资源用于生产电脑时,最适于汽车生产的资源,如熟练的汽车工人,都被用于电脑行业。由于这些工人也许并不擅长生产电脑,该经济就不会因为多生产一单位的汽车而少生产许多电脑。与此相反,当该经济把其大部分资源用于生产汽车时,多生产一辆汽车就意味着要把一些最好的电脑技工从电脑行业中转移出来。结果是,多生产一辆汽车会导致电脑产量大幅减少。

微观经济学研究家庭和企业如何做出决策,以及它们如何在特定市场上相互交易;宏观经济学研究整体经济现象,包括通货膨胀、失业和经济增长。

2.2 作为政策顾问的经济学家

实证表述是描述性的,它们做出了关于世界是什么的表述。

规范表述是命令性的,它们做出了关于世界应该是什么的表述。

2.3 经济学家意见分歧的原因

经济学家可能对世界如何运行的不同实证理论的正确性看法不一致。

经济学家可能有不同的价值观,因此对政策应该努力实现的目标有不同的规范观点。

大多数经济学家一致同意的十个主张:

  1. 租金上限降低了可得到的住房数量和质量。(93%)
  2. 关税和进口配额通常降低了总体经济福利。(93%)
  3. 有伸缩性的和浮动性的汇率提供了一种有效的国际货币协定。(90%)
  4. 财政政策(例如,减税和/或增加政府支出)对低于充分就业的经济有重要的刺激效应。(90%)
  5. 如果要平衡联邦预算,应该在经济周期中而不是每年中来实现。(85%)
  6. 现金转移支付带来的领取者福利的增加大于等值的实物转移支付所带来的。(84%)
  7. 巨额联邦预算赤字对经济有不利影响。(83%)
  8. 最低工资增加了年轻人和不熟练工人中的失业。(79%)
  9. 政府应该按“负所得税”的思路重建福利制度。(79%)
  10. 排污税和可交易的污染许可证作为控制污染的方法优于实行污染上限。(78%)

on December 2nd, 2008 | No Comments »

书评:时序保护事件

几个月都没看科幻世界了,今天买了一本十二月的(总第271期),里面保罗·莱文森的时序保护事件读完之后却是很难得的有了一些想法。说出来给大家听听,不怕笑话。

这篇文章讲的是一个和宇宙监督假设有关故事。呃,先让我们忘掉那个该死的假设吧,我也不记得那是什么玩意了。

时间旅行,通常提到它都是指穿越虫洞、回到过去。呃,很好,让我们回到过去。但是同样该死的雷纳·巴雅瓦提出了那个我们都知道的祖父悖论,就是回到过去,杀死自己祖父那个悖论。

很多盛行的说法试图解释这个问题,比如说前面说到的宇宙监督假设。这个由霍金提出的假说认为无论从理论上是否能够进行时间旅行,宇宙都会避免你这样做。

好了,我们来换一个话题,虽然同样不那么轻松。

我们来考虑一下,人类有些什么办法毁灭自己。

  1. 核武器?老土!
  2. 前段时间被讨论得很多的大强子对撞机?产生一个黑洞吞掉地球倒是一个好主意,不过还不够厉害。
  3. 未来,更大更强的大强子对撞机?引发真空衰变1毁掉整个宇宙?这个很厉害。
  4. 还有呢?回到侏罗纪干掉所有的哺乳动物。(我们假设这个可能先)

让我们来看看,前面三种方式和最后一种其实有很大的不同,前者仅仅毁灭了宇宙的未来,而后者毁灭了宇宙的过去。你现在仍然在阅读我的博客证明我们未被来自未来的恐怖分子袭击。

你现在仍然在阅读我的博客证明我们在一个不会被来自未来的恐怖分子袭击的那些宇宙。

等等!

如果你知道什么是人择原理的话,你可能已经在喊等等了。如果不是,就让我这个不太合格的物理爱好者来解释一下。宇宙物理学家发现宇宙的发展和几个物理常数关系非常密切。如果他们变大或者变小万分之一的话,宇宙早已发展到了他的尽头。为什么那些物理常数不多不少的刚好等于现在的值呢?人择原理认为,如果那些物理常数不是正好等于这些数值的话,宇宙就不会发展到有生命去提出这个问题。或者说,在无穷多个宇宙中,仅有一少部分宇宙取到了合适发展的值。我们的存在证明了我们来自那些取值合理的宇宙。

嘿嘿,这两个表述很像吧,这就是我看小说的心得。

如果时间旅行在理论和实际都上可行的话2,我们这个宇宙可能就是那个宇宙–它会发生无数的“巧合”事件来避免任何人进行时间旅行,因为我们的存在证明了这个宇宙永远也没有时间旅行者。比如说时间机器突然损坏、飞车枪击命中心脏。而这,并不是巧合,这个宇宙从诞生开始就决定了它的发展必然如此3

这就是我理解的霍金所说的宇宙监督假设。

好像不太妙,其实这很好。这保证了我们不会受到某种时间武器的攻击。或者某个疯狂的物理学家,他那可能毁灭世界的实验其实仅仅会毁灭他的小木屋。

注意这和核武器的区别,宇宙并不保证我们会被核武器毁灭。仅有那些会影响过去的事件才会被宇宙监督假设约束–如果假设成立的话。

如果理论上允许时间旅行的话,我们似乎可以做那么一个实验。多次启动一个仅有50%几率正常工作的时间机器,观察它是否总是失败。如果大强子对撞机老是出故障的话,我们也可以怀疑它其实可以带来小规模的时间旅行。

虽然这个内容有点tough,但期待讨论。


注1:有少部分科学家认为,现在我们认识到的真空不是真正的真空。因为这个真空的能级还不够低,如果我们对撞机能量足够大的话,可能产生真真空。进而引发周围的普通真空向真真空衰变,滚雪球似的毁灭整个宇宙。

注2:似乎有不少理论支持时间旅行。只是……技术上……难了不是一点两点。不是要求无限长的棍子,就是要求比宇宙总能量还多的能量来支撑一个黑洞扭曲空间。

注3:好像有点决定论4的意味。呃,虽然决定论的观点很悲观,但是其正确性仍然不明。其实,好多物理知识都让人挺悲观。比如,你最好不要对自由意志抱太希望,虽然这个问题也没有结论。但有数学家通过模型指出,如果人有自由意志的话,那么原子也有。所以,无所谓啦:)

注4:决定论是指,一旦宇宙的初始条件给定,就可以通过计算得到它任何时间的状态。当然,决定论否定了自由意志的存在。虽然量子力学的出现对决定论是一大打击,但它仍然可能在我们了解更多物理规律之后重生。

on November 20th, 2008 | 2 Comments »

量子密码学与中间人攻击

最近有关量子密码学的新闻很多,cnBetaSolidot都有。量子密码学是一个很有意思的东西,如果你仅仅应为看到“量子”二字而跳过这篇文章的话,我非常遗憾。当然,我不是从事这个方面研究的,所掌握的知识可能已经过时,若有谬误还请多多谅解。

对于量子密码学,大家似乎存在两大误区。

第一,“任何密码技术刚推出的时候都声称其是无法破译的,但最终都会被破译”。其实驳斥这个观点很简单,早在量子密码学被提出之前,我们就有无法破解的加密技术,一次一密乱码本。

第二,“量子密钥分配技术能够抵御任何攻击,其传输环节是完全用量子物理约束的”。这个问题就是我们今天的话题。

首先让我们来简单地回顾一下量子密钥分配技术。

在这个技术中,出场的角色包括:发送端、接收端。他们之间存在一条私有线路和一条公有线路。私有线路是一根光纤,而公有线路通常就是Internet。

众所周知,光是一种横波,通过起偏器,我们可以让它偏振起来。

在私有线路中,发送端可能发送四个方向的偏振光“|-\/”(分别是垂直、水平、和位于45度的倾斜)。这四种方向可以分为垂直水平和倾斜方向两种模式(分别记为”+×”),两种模式各有两种方向分别表示0和1。发送端每发送一位都先随机选择一种模式,根据这一位是0或是1再继续的确定光的偏振方向。

光子沿着通道传递到了接收端,一直保持原有的振动方向。而接收端一次只能选择+和×两种探测模式中的一种,无法同时探测两种模式。

如果发送模式和接收模式不同会怎样?不妨设光的振动方向是-,而接收器的模式是×。此时,光子各有50%的几率转变为\与/方向。这一点是量子密钥分配技术的基石,即为了测定光子是否在-方向振动,光的方向可能会被改变,以保证光子在穿过检偏器后要么|振动,要么-振动,即使它以前的偏振方向是倾斜。

因为接收方并不知道每个光子的振动方向,就有可能选择了错误的模式并得到错误的结果。接收方通过公有线路把自己的发送模式告诉发送方,发送方指出其中哪些部分是正确的。发送方和接收方忽略那些接收器设置错误的位。

此时,如果没有人干扰私有线路中的光子的话,发送方和接收方就应该拥有相同的数据了。为了检验这一点,他们在公有线路中比较其中的一半。如果有差异,说明光纤中存在监听者。他干扰了光子的振动方向。如果无错,就抛弃这些位,用剩下的位作为一次一密乱码本的密钥。1

假如有监听者,他的存在一定会导致最后一步的校验操作失败。因为他事先也不知道应该如何设置接收器模式。其中那些错误的设置会导致他被发觉。任何光纤中的窃听者都会修改光子的偏振方向。2


现在,我们来考虑一下中间人攻击。中间人攻击的发起者是比监听者更厉害的角色。前面设想的监听者仅仅能在私有线路上设置光子振动方向检测器和读取公有线路上的全部通讯。但中间人不但能够做到这些,还可以修改公有线路上的通讯。因此他可以向发送方假装自己是接收方,而在接收方面前假装自己是发送方。

中间人在私有线路上也随机地选择+和×中的一种模式,即使这会导致接收方收到的光子偏振方向被修改。

接收方会在公有线路上发送接收器的设置模式。此时中间人修改这些数据,把它变成自己的设置模式。发送方会把这些模式中错误的部分发送给接收方,中间人读取这部分数据就知道了自己设置错了哪些位。中间人修改这份数据,让接收方保留那些和中间人模式相同的位。这样,中间人和发送方保留了一份的数据,也和接收方保留了另一份数据。在最后的核对工作中,中间人只要修改核对用的数据包,就能保证发送方和接收方无法察觉有人窃听了私有线路。

至此,我们可以得出结论,量子密钥分配技术仍然无法抵御中间人攻击,依然需要在公有线路上使用签名技术。这意味着这部分是可以被攻破的,至少它不是被量子物理约束的。当然,即使是目前的Internet环境,中间人攻击也是很难发起的,但比起被物理学决定的不可能来说,还是容易多了。

注意,这种攻击不是我发现的,我只是说指出别人的结论--量子密钥分配协议的安全性仍然需要一种签名算法来保证,如果使用签名算法被破译了,那么量子密钥分配协议就会被入侵。关于这个结论的真实性,可以参照Answers.com和Wikipedia.org中有关Quantum cryptography和man-in-the-middle attack的内容。

注1:这部分具有增强的协议,发送方和比较方不是简单地比较一半的位,而是若干指定位的亦或值,重复比较N次。最后只需要抛弃每组比较集合的第一个位即可。

注2:和大部分的密码学一样,这只是一个概率问题。当数据量很大的时候,他仅有极低可能不被发觉。比如计算机浮点数向下溢出的几率(约10-308)不被发觉。

on October 18th, 2008 | 4 Comments »

求职测试准备3

题目:

有1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠。

最近爱上EMC的测试了:)

解答:

网上一堆答案,搞得及繁琐无比,让我来化简吧。

设有x只老鼠,7天后有死亡和存活两种状态,因此能够提供的信息量为2x。解2x>1000即可。

on October 13th, 2008 | 2 Comments »

求职测试准备2

题目:

地面上有N个硬币,若干机器人在处理这些硬币。机器人首先随机选择一个硬币,若此硬币正面向上,则将其抛出;若此硬币反面向上则直接将其翻转。问最后硬币正反比例的情况。

据说题目来自EMC面试

解答:

假设最后硬币正反比例会稳定。设地面共有N个硬币,最终有Np个硬币正面向上。

稳定时,则每次机器人将一个硬币由正面翻为反面的概率应当等于它将一个硬币由反面翻为正面的概率。

则 1/2 * p = 1-p

解得 p = 2/3

检验硬币是否会稳定:初始时讨论p > 2/3和p < 2/3两种情况,易证p依概率收敛到2/3。

on October 9th, 2008 | 2 Comments »

求职测试准备1

题目:

写一个函数 int p(int x, int y),输出x到y再到x (假设x<y)

要求只用一个语句完成,不允许用?:等多元操作符和关键字。只能用一个printf库函数。

据说题目来自EMC笔试

解答:

此题难点显然在后面那些要求上。只用一个语句完成的要求很容易让人联想到函数递归。因此

int p(int x, int y){
    return printf("%d ", x)
        && (x<y && p(x+1, y));
}

可以完成从x打印到y的任务。

进一步的有

int p(int x, int y){
    return printf("%d ", x)
        && (x<y && p(x+1, y))
        || printf("%d ", x);
}

但是,值得注意的是题目要求只使用一个printf函数,因此,最后那个printf也必须改为递归语句,即

int p(int x, int y){
    return printf("%d ", x)
        && (x<y && p(x+1, y))
        || (x<y && p(x, x));
}

如果考虑x>y的情况,修改条件判断<为!=,修改p(x+1, y)为p(x+(y-x)/abs(y-x), y)即可

int p(int x, int y){
    return printf("%d ", x)
        && (x!=y && p(x+(y-x)/abs(y-x), y))
        || (x!=y && p(x, x));
}

点评:问题的关键在于递归、逻辑运算的短路原理。尤其是后者比前者更难想到。

on October 9th, 2008 | No Comments »