高分求一种算法文件A通过算法1得到文件摘要数据m
文件B加上数据m通过算2,能够得到文件A高分问什么算法能够满足这里的算法1和算法2?

解决方案 »

  1.   

    文件A和文件B可能是完全不同的文件,也里面局部数据相同。其实我要解决的问题场景是:
    文件A本地文件,文件B实际是文件A的升级版本,在自动升级过程中,文件B是放在服务器上的,本地用户需要把文件A升级成文件B。
    正常实现,是通过http请求把文件B下载下来然后覆盖A,但这样要现在整个文件B的数据,下载量比较大。
    我想通过某种算法,减少下载量。
      

  2.   

    LZ的想法就是根据A把B压缩成m,再跟A把m解压缩成B。不过具体的算法与A、B的长度和特征有关,不能一概而论。最好用多个小文件,这样就可以只更新部分文件了。
      

  3.   

    记得有这样的工具叫:patch不过,我认为做自动升级,这样不是很实用,理由如下:1.如果 A,B 差异太大的话,最后生成的差异文件可能比 B 还大,不划算。2.增加了复杂度,如果下载并发量很大,服务器负荷重(计算量大),
    当然也可以通过缓存等手段优化,但毕竟不是很方便。3.服务器上必须保留多种版本的文件,或不同版本间的差异文件,
    因为客户端要升级的基础版本可能不一样(这是很可能的),如果只是覆盖,
    则简单得多。象瑞星等的“增量升级”跟你这个不一样,它可以增量的只是病毒库,
    病毒库你可以想象是个小数据库,“增量升级”只是往里添加记录而已。另外我建议你,对于重要文件,也不要用版本号、文件时间什么的做升级标志,
    用文件的摘要值(如MD5, SHA等)更好,只要摘要值不一样,就下载覆盖,
    这样做的好处是:可以有效防止客户端的文件被病毒或人为破坏...
      

  4.   

    貌似有现成的工具哦,你说的需求其实就是做一个补丁包对不?找找linux的补丁制作工具的源代码吧
    我记得是diff