给定长度不同的序列找到了它们每个人共有的最大数字序列

Given sequence of different length find the largest sequence of numbers common to every one of them

本文关键字:每个人 字序 最大数 找到了      更新时间:2023-10-16

我有一个问题,我尝试了很多想法,但找不到最佳解决方案。

问题是:

给出了一系列n个数字的顺序,均以增加的顺序排序,但长度不同,找到每个数字的最大子序列。

例如,可以说有3个序列A,B和C,

其中

A = {1 3 5 7 9 10 11 15 30 43 44 45 50}
B = {1 2 3 7 8 10 11 12 23 27 30 38 40 41 45 50 51 53 }
C = {0 1 3 7 9 11 12 13 14 19 20 24 28 30  50 51 61 90 99}

因此,所有这些的最大共同子序列是:

Answer = {1 3 7 11 30 50}

上面的示例说明了我要传达的想法。我如何找到如此最大的常见子序列,全部均以越来越多的顺序?

感谢您的时间和考虑阅读这篇文章。如果您也能提供建议,我将非常感谢。

简单解决方案:您可以合并所有集合(线性复杂度(,然后计算最终集合中n次发生的数字(再次是线性复杂性(。

使用std :: multiset(具有重复(并合并为算法。

在这里尝试:

#include <iostream>
#include <set>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
    // your code goes here
    std::multiset<int> a {1,2,3};
    std::multiset<int> b {1,2,3};
    std::multiset<int> result;
    merge( a.begin(), a.end(), b.begin(), b.end(),  
    std::inserter(result, result.begin()));
    std::cout<<result.size()<<std::endl;
    return 0;
}

结果:

成功时间:0内存:16064信号:0

6

设定语义的语义扩展到了多序(如下所述(,但并非以我一直以来的方式。

接受两个多组的联合的操作应该是 与合并两组的操作区别。想象一下 参数集包含元素7的三个实例,第二个实例 集合包含两个相同值的实例。工会将包含 只有三个这样的值,而合并将包含五个。

根据标准,25.3.5:

通过定义联合((,以标准方式将设定操作的语义概括为多组,以包含最大数量 出现每个元素,相交((包含最小值, 等等。