所以,简而言之问题是:

我需要在程序的系统调用跟踪中实时执行“最长公共子序列” . 我们现在所做的是,我们有一组约250个签名,每个签名由~40个系统调用组成 . 我们捕获与程序线程相关的1K块系统调用,看它是否匹配任何签名的70%,然后返回结果 . 然后将块移动300并对新集执行检测 .

如您所见,有两个条件可以帮助您更快地执行检测 . 首先,在检查每个签名时,1K系统调用的集合将保持不变 . 其次,如果LCS的长度已超过签名的70%,则返回true .

我已经实现了递归方式,并且使用这种方式,我可以计算出每次递归中计算的当前LCS长度,如果它已经大于签名的70%,我会抛出一个退出 . 我还做了一个预处理来维护“在位置Y之后发生系统调用X”的矩阵 . 并在所有正在检查的签名中使用此数组 .

我仍然无法获得可行的解决方案,算法看起来仍然很慢 . 考虑到我的特定情况,我也无法想到对动态算法的任何改进 . 有什么建议?