- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里看到了一些与确定文件相似性相关的问题,但它们都与特定域(图像、声音、文本等)相关联。作为解决方案提供的技术需要了解所比较文件的基础文件格式。我正在寻找的是一种没有此要求的方法,其中可以比较任意二进制文件,而无需了解它们包含的数据类型。也就是说,我正在寻找确定 两个文件二进制数据的相似度百分比 .
为了提供更多细节供您处理,尽管这可能适用于许多事情,但我确实有一个正在处理的特定问题。我目前也有一个可行的解决方案,但我认为它并不理想。在比较方法和存储结果方面可能有很多优化。希望这里的一些人能给我一些新的想法。几天后我可能会编辑一些关于我当前方法的信息,但我不想通过告诉你我已经在做的事情来影响人们对这个问题的看法。
我正在处理的问题是 视频游戏 ROM 图像的克隆检测 .对于那些没有仿真经验的人来说,ROM 是游戏卡带上数据的转储。 ROM“克隆”通常是同一游戏的修改版本,最常见的类型是翻译版本。例如,NES 的原始最终幻想的日语和英语版本是克隆。游戏共享几乎所有的 Assets ( Sprite 、音乐等),但文本已被翻译。
目前有几个小组致力于维护各种系统的克隆列表,但据我所知,这一切都是手动完成的。我试图做的是找到一种方法来自动客观地检测相似的 ROM 图像,基于数据相似性而不是“这些看起来像同一个游戏”。检测克隆有多种原因,但主要动机之一是与 Solid compression 一起使用。 .这允许将所有游戏克隆一起压缩到同一个存档中,整个压缩克隆集通常只占用比单个 ROM 之一略多的空间。
提出潜在方法时需要考虑的一些问题:
最佳答案
听起来您想要一个二进制增量,或者可能是从二进制增量的应用程序派生的索引(比如它的大小)。然后,您可以将此索引与您通过实验确定的某个基线进行比较,以确定它是否是“克隆”。
压缩和增量创建之间有很多相似之处,所以我想说您与当前的实现相距不远。
话虽如此,数据库中每个二进制文件的成对比较可能非常昂贵(我认为 O(n2))。我会尝试找到一个简单的哈希来识别可能的比较候选对象。概念上类似于 spdenne 和 Eduard 所建议的。也就是说,找到一个可以应用于每个项目一次的散列,对该列表进行排序,然后对散列在列表中最接近的项目使用更细粒度的比较。
多年来,构建对一般情况有用的哈希一直是 CS 中积极追求的研究课题。 LSHKit软件库实现了一些此类算法。互联网无障碍论文 FINDING SIMILAR FILES IN A LARGE FILE SYSTEM似乎它可能更多地针对比较文本文件,但可能对您有用。最近的论文Multi-resolution similarity hashing描述了一个更强大的算法。但是,如果没有订阅,它似乎无法访问。您可能希望将维基百科文章保留在 Locality Sensitive Hashing 上在您浏览其他资源时非常方便。它们都非常技术性,而且维基百科条目本身在数学上非常繁重。作为对用户更友好的替代方案,您可以应用来自 Acoustic Fingerprinting 领域的一些想法(甚至可执行文件)。 .
如果您愿意放弃一般情况,您很可能会找到一个更简单(更快)的特定于域的哈希函数,它仅适用于您的 ROM。可能涉及标准或通用字节序列的放置以及它们附近的选择位的值。我不太了解您的二进制格式,但我正在想象一些表示文件中部分开始的东西,例如声音、图像或文本区域。二进制格式经常将这些类型的部分的地址存储在文件开头附近。有些还使用链接机制将第一部分的地址及其大小存储在已知位置。这允许您移动到下一部分,其中还包含大小等。如果您还没有意识到任何相关的格式,那么一点调查可能会让您发现任何相关的格式,并且应该让您走上构建之路一个有用的哈希。
如果散列函数不能让您一路顺利(或者它们需要某种输入来定义度量/距离),那么网络上有几种二进制增量算法和实现可用。我最熟悉的一种是 subversion 版本控制系统使用的。它使用称为 xdelta 的二进制增量算法来有效地存储二进制文件修订。这是直接指向其存储库中实现它的文件的链接:xdelta.c .网络上可能有一个工具可以使这更易于访问。
关于comparison - 计算二进制数据相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/579981/
我有六个字符串变量,即 str11、str12、str13、str21、str21 和 str23。 我需要比较这些变量的组合。 我必须检查的组合是 str11 -- str12 -- str13 作
场景:我为各自的“节头”(存储为字符串)执行了一些任务,该任务的结果必须针对相同的相应“现有节头”(存储为字符串)保存 如果相应任务的“Section Header”是“现有 Section Head
我创建了一个类如下: public class StringMatch { public int line_num; public int num_of_words; } 我已经创建了一个
有没有人在使用 Pandas 时解决了这个 pylint 问题? C:525,59: Comparison to True should be just 'expr' or 'expr is True
关注 Arthur's suggestion ,我换了我的Fixpoint相互的关系 Inductive关系“建立”了游戏之间的不同比较,而不是“深入研究”。 但现在我收到一条全新的错误消息: Err
计算机如何执行值相等比较?它是否从最小的位开始逐位比较值,并在遇到两个不同的位时停止?还是从最高位开始?无论在何处/何时找到两个不同的位,它都会遍历所有位吗? 最佳答案 当您用高级语言(例如 c)编写
在这个例子中, > (= 1 1) #t > (= 'a 'a) *** ERROR IN (console)@2.1 -- (Argument 1) NUMBER expected (= 'a 'a
这是我的一个个人项目,我不知道从哪里开始,因为它远远超出了我的舒适区。 我知道有一些语言学习软件可以让用户记录他或她的声音并将发音与该语言的母语者进行比较。 我的问题是,如何实现这一目标? 我的意思是
我需要比较使用相同的编译器/标志进行编译的2个可执行文件和/或共享对象,并确认它们没有更改。我们在一个受监管的环境中工作,因此对于准确地确定可执行文件的哪些部分已发生更改,对于进行测试非常有用。 由于
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我有两个字符缓冲区,我正在尝试比较它们的一部分。我有一个奇怪的问题。我有以下代码: char buffer1[50], buffer2[60]; // Get buffer1 and buffer2
问题的澄清/总结——我们正在寻找: 托管错误跟踪系统, 使用起来和 lighthouse/github/launchpad 一样方便, 可以处理附件, 集成电子邮件通知和操作(在提交消息中隐含操作),
我相信 Stackoverflow 上有很多软件测试工程师、算法验证工程师。有人可以告诉我在以下情况下如何进行。 假设我们有一个乳房 X 线照片和 5 种不同的算法,这些算法将这个乳房 X 光照片作为
我已经开始阅读Algorithms了,我一直想知道,当处理相同类型的基元时,哪个是更昂贵的操作,赋值或比较?语言之间的差异是否很大? 最佳答案 微观优化几乎总是错误的做法。除非程序运行太慢,否则不要启
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 去年关闭。 Improve this
我在这里看到了一些与确定文件相似性相关的问题,但它们都与特定域(图像、声音、文本等)相关联。作为解决方案提供的技术需要了解所比较文件的基础文件格式。我正在寻找的是一种没有此要求的方法,其中可以比较任意
我需要比较两个 var -> integer 形式的规则列表,以了解不匹配的情况。 判断是否存在lhs相同而rhs不同的规则。 例如: {a->3, b->1, c->4} ~ ??? ~ {a->3
我看到了 MEF 和 Lua 之间的相似之处。两者都允许您注册方法并根据需要进行部署。 MEF 和 Lua 都是 IoC/依赖注入(inject)的形式吗? 最佳答案 我假设您了解这些技术之间的巨大差
我找到了 Digital persona Finger FX 开源项目,它允许我提供指纹图像(位图)并将指纹细节数据保存在 ISO/IEC 19794-2:2005 中 格式。 https://git
ImageMagick库中是否有任何相等谓词函数?我想比较两个图像,并找出它们是否完全相同(像素的所有颜色都相同)或有什么不同。 我环顾四周,但似乎没有这样的功能。我应该自己使用像素迭代器编写函数吗?
我是一名优秀的程序员,十分优秀!