c++ - 在非常大的序列中找到相似的子序列

标签 c++ sql database algorithm

想象序列是Pi

141592653589793238462643383279502884197....

Pi 存储在一个文本文件中。

我想在 Pi 中找到一个相似的子序列,例如相似度为 80%。

例如我想在Pi中定位33384,所以

14159265358979 32384 62643383279502884197....

位数约为百万。

我需要一种高效的算法来搜索这些相似性。

我应该使用数据库而不是文件吗?

任何想法表示赞赏。

编辑:

我找到了一些算法,我需要检查一下,我会告诉你结果。

顺便说一下,算法是 Knuth–Morris–Pratt

最佳答案

您可以通过 pi 序列提取 M 个字符(M - 搜索长度)子序列。然后将子序列与搜索字符串进行比较。

然后只是异或搜索和子序列。 XOR 后计数不为 0 字节。计数是差异的数量。将差异计数与搜索字符串长度进行比较可以得出差异百分比。

如果差异合适,你会得到相似的子串。

更新:

您将得到 N-M 倍的子序列,比较复杂度为 O(M)。 N为pi串长度,M为子串长度

关于c++ - 在非常大的序列中找到相似的子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24523424/

相关文章:

c++ - boost asio - 来自一个线程的 SSL async_read 和 async_write

sql - 显示 R-Z 之间姓氏的 SQL 查询是什么,它只能显示名字的第一个首字母

c# - GetTable 不适用于 Azure SQL 表(Xamarin Forms)

php - 多加一张表查询统计数据SQL

c++ - 继承抽象基接口(interface)及其实现给出 C2259

C++ MFC double 到 CString

c++ - 使用 Visual Studio 2010 从 32 位 C++ 到 64 位 C++

sql - INNER JOIN where **every** row must match the WHERE clause?

java - JPA事务隔离和实体锁的区别

SQL 将 č、ć、ž 替换为字母 c、z