Я пытаюсь распечатать самую длинную общую подпоследовательность из 2 длинных длинных векторов за O (nlogn) время наихудшего случая, и у меня есть три следующих условия:
1. Каждый элемент в векторе отличается
2. Каждый вектор является перестановкой другого
3. Если размер вектора равен S, то все элементы являются целыми числами от 1 до S
Я знаю, что есть способ найти длина сложности LCS в O (nlogn), которого я достиг
long long lcs_length(vector<long long> A, vector<long long> B)
{
vector<long long> C(A.size());
vector<long long> look_up(A.size());
for(long long i = 0; i < A.size(); i++)
{
look_up[A[i]-1] = i;
}for(long long i = 0; i < A.size(); i++)
{
C[i] = look_up[B[i]-1];
}
vector<int> d(A.size()+1, 1000000000);
for (int i = 0; i < A.size(); i++)
{
*lower_bound(d.begin(), d.end(), C[i]) = C[i];
}
for (int i = 0; i <= A.size(); i++)
{
long long temp;
if (d[i] == 1000000000)
{
return i;
}
}
return 0;
}
Есть ли способ на самом деле печатать LCS за O (nlogn) время?
Задача ещё не решена.
Других решений пока нет …