第16章 信息指纹及其应用

以下内容学习、摘录自《数学之美》


第16章 信息指纹及其应用_第1张图片

一段文字所包含的信息,就是它的信息熵。如果对这段信息进行无损压缩编码,理论上编码后的最短长度就是它的信息熵。

任何一段信息(包括文字、语音、视频、图片等),都可以对应一个不太长的随机数(信息熵),作为区别这段信息和其他信息的指纹( Fingerprint)。只要算法设计得好,任意两段信息的指纹都很难重复,就如同人类的指纹一样。信息指纹在加密、信息压缩和处理中有着广泛的应用

生信息指纹的关键算法:伪随机数产生器算法( Pseudo- Random NumberGenerator,简称PRNG),通过它将任意很长的整数转换成特定长度的伪随机数。

信息指纹的用途远不止网址的消重,它的孪生兄弟是密码。信息指纹的个特征是其不可逆性,也就是说,无法根据信息指纹推出原有信息。

在互联网上加密要使用基于加密的伪随机数产生器( CryptographicallySecure Pseudo- Random Number Generator,简称 CSPRNG)。常用的算法有MD5或者SHA-1等标准,它们可以将不定长的信息变成定长的128位或者160位二进制随机数。

在网页搜索中,有时需要判断两个查询用词是否完全相同(但是次序可能不同),比如“北京 中关村 星巴克”和“星巴克 北京 中关村”用词完全相同。解决这个问题有各种各样的方法,没有绝对正确的和错误的,但是有好的方法和笨的方法。
1.最直接的笨办法是对这个集合中的元素一一做比较,这个方法计算的时间复杂度是0(N^2),其中N是集合的大小。
2.稍微好一点的办法是将两个集合的元素分别排序,然后顺序比较,这样计算时间的复杂度是O( NlogN),比前面那种方法好了不少,但还是不够好。
3.与这个方法相当的是将第一个集合放在一张散列表中,然后把第二个集合的元素一一和散列表中的元素作对比。这个方法的时间复杂度为0(N),达到了最佳1。但是额外使用了0(N)的空间,而且代码很复杂,不完美。
4.完美的方法是计算这两个集合的指纹,然后直接进行比较。我们定义一个集合S={e11,e2,……,en}的指纹FP(S)=FP(e1)+FP(e2)+…+FP,其中FP(e1),FP(e2),…,FP(en)分别为S中这些元素对应的指纹。加法的交换率,保证了集合的指纹不因元素出现的次序而改变,如果两个集合元素相同,那么它们的指纹一定相同。当然,不同元素的指纹也相同的概率非常非常小,在工程上完全可以忽略。利用信息指纹的方法计算的复杂度不需要额外的空间,因此是最佳方法。

从上百万视频中找出一个视频是否为另一个视频的盗版,并非易事。一段几分钟的视频,文件大小有几兆到几十兆,而且还是压缩的,如果恢复到每秒30帧的图像,数据量就会大得不得了。因此,没有人会直接比较两段视频来确定它们是否相似。视频的匹配有两个核心技术,关键帧的提取和特征的提取。MPEG视频(在NTSC制的显示器上播放)虽然每秒钟有30帧图像,但是每一帧之间的差异不大。(否则我们看起来就不连贯了。)一般来说,每一秒或若干秒才有一帧是完整的图像,这些帧称为关键帧。其余帧存储的只是和关键帧相比的差异值。关键帧对于视频的重要性,就如同主题词对于新闻的重要性一样。因此,处理视频图像首先是找到关键帧,接下来就是要用一组信息指纹来表示这些关键帧了。

有了这些信息指纹后,检测是否盗版就类似于比较两个集合元素是否相同了。 Google收购 Youtube后,由 Google研究院研究图像处理的科学家们开发出的反盗版系统,效果非常好。由于可以找出相同的视频的原创和拷贝, Google制定了一个很有意思的广告分成策略:虽然所有的视频都可以插入广告,但是广告的收益全部提供给原创的视频,即使广告是插入在拷贝的视频中。这样一来,所有拷贝和上传别人的视频的网站就不可能获得收入。没有了经济利益,也就少了很多盗版和拷贝。

所谓信息指纹,可以简单理解为将一段信息(文字、图片、音频、视频等)随机地映射到一个多维二进制空间中的一个点(一个二进制数字)。只要这个随机函数做得好,那么不同信息对应的这些点就不会重合,因此,这些二进制的数字就成了原来的信息所具有的独一无二的指纹。

点击这里可以查看《数学之美》的其它学习笔记。

你可能感兴趣的:(第16章 信息指纹及其应用)