我有一系列的SQL调用,我想利用它们来检测循环(从而避免不必要的重复SQL调用),但这让我想到了更一般的问题。
Given a list, say
[a,b,c,b,c,a,b,c,b,c,a,b,b]
Is there some way I can turn that into
a,[[b,c]*2,a]*2,b*2
或者,[a,[b,c] * 2] * 2,a,b * 2
也就是说,检测重复(可能包含嵌套)。
我有一系列的SQL调用,我想利用它们来检测循环(从而避免不必要的重复SQL调用),但这让我想到了更一般的问题。
Given a list, say
[a,b,c,b,c,a,b,c,b,c,a,b,b]
Is there some way I can turn that into
a,[[b,c]*2,a]*2,b*2
或者,[a,[b,c] * 2] * 2,a,b * 2
也就是说,检测重复(可能包含嵌套)。
Look into the Lempel-Ziv-Welsh compression algorithm. It is built on detecting repetitions in strings and utilizing them for compression. I believe you can use a Trie for it.
我在那个领域不是专家,但你可能想查看一些压缩算法,因为这似乎就是它们的作用。
如果您可以先进行排序,那么再查找重复项就很容易了。当然,对于像SQL查询这样的自由格式的排序可能有些令人担忧。
如果字符串足够大,一个有趣的方法是在其上运行压缩工具(如gzip、bzip或7zip)。这些工具通过定位重复内容(在不同的级别上)并将其替换为指向文本第一个实例(或词典)的指针来工作。您实现的压缩是重复的度量。转储文件(您必须编写代码来执行此操作)将为您提供重复的内容。