接上一个问题:关于 Java 的如何进行单体应用 tracing 的问题
https://www.v2ex.com/t/1028385现在可以获取程序执行时候走过的函数序列信息,但是如何快速比较两条执行路径之间的相似性?
假设现在我有了一个程序中定义的目标点 T ,可以执行到 T 的函数序列的集合是 S ,当前执行的序列是 P
我理解需要完成以下:
1. 首先需要找一个合适的数据结构,存储这个执行路径信息。
比如说记录走过了 funcA -> funcB -> funcC ,可以使用线性数据结构,也可以使用树或者图,但是考虑到快速判断两个序列的相似性,最好是给每个 func 一个编码,最终执行完之后得到一个编码序列,直接比较 P 的编码序列和 S 集合中所有序列的相似性。
2. 定义什么样的指标,证明路径 P1 比路径 P 更优,这个指标通过 P/P1 和 S 做运算计算出来的。
如果两条路径 P 和 P1 都可以走到目标点 T ,那么他们的分数都是最优的,也就是距离目标点 T 的距离为 0 。
如果都走不到,这两者也是应该有一个分数的,基于这个分数可以判断出 P 和 P1 谁更优。如果可以走到 T ,那还好;但是如果走不到 T ,P 和 P1 是需要和集合 S 中的所有路径都计算一遍,得到自己的分数的,这个时间复杂度可能有点高,所以这个指标和计算方式其实是依赖于上面定义的数据结构的。
如果大佬们有思路,可以评论,咱们多多交流🫡🫡🫡