>백엔드 개발 >C++ >주어진 배열 사이의 해당 인덱스에서 동일하지 않은 요소 수를 최소화합니다.

주어진 배열 사이의 해당 인덱스에서 동일하지 않은 요소 수를 최소화합니다.

王林
王林앞으로
2023-08-26 12:57:181265검색

주어진 배열 사이의 해당 인덱스에서 동일하지 않은 요소 수를 최소화합니다.

각 인덱스의 요소를 비교하고 일치할 때까지 조정하여 주어진 배열 사이의 해당 인덱스에서 일치하지 않는 요소의 수를 줄입니다. 배열을 반복하면서 동시에 필요에 따라 조정합니다. 결과적으로 배열은 더욱 유사해지고 동일하지 않은 요소의 비율은 감소합니다. 해당 위치에서의 차이를 줄여 어레이 간의 유사성을 높이는 방법입니다. 궁극적인 목표는 모든 인덱스에 동일한 요소가 포함된 배열을 생성하여 동일하지 않은 요소의 수를 줄이는 것입니다.

사용 가능한 방법

  • 해싱 접근 방식

  • 정렬 방식

哈希방법

해싱 접근 방식에서는 배열 간 파일을 비교할 때 동일하지 않은 구성 요소의 수를 줄이기 위해 배열 중 하나에 대한 해시 테이블을 만드는 것부터 시작합니다. 그 시점에서 모멘트 배열을 반복하면서 해시 테이블 내의 각 구성 요소의 빈도를 살펴봅니다. 구성 요소가 발견된 경우 해당 구성 요소는 유지됩니다. 그렇지 않은 경우 해시 테이블에서 가장 가까운 조정 구성 요소가 그 자리에 활용됩니다. 이 프로세스의 결과로 해당 인덱스에서 동일하지 않은 요소가 줄어들고 두 배열이 더 유사해집니다. 이 방법의 효율성은 평균 및 최상의 경우에 대해 선형 시간 복잡도 O(N)에서 원하는 유사성을 달성할 수 있다는 장점이 있습니다.

알고리즘

  • 첫 번째 배열의 각 요소는 해시 테이블에 키로 추가되고 빈도는 값으로 추가되어야 합니다.

  • 두 번째 배열을 순환할 수 있도록 포인터를 설정하세요.

아. 두 번째 배열의 각 요소가 해시 테이블에 있는지 확인합니다.

b. 그렇다면 요소를 그대로 두십시오.

如果没有的话,找到最接近的匹配项中频率最低的哈希表元素。

d. 두 번째 배열의 기존 요소를 가장 가까운 일치 항목으로 변경합니다.

  • 直到指针达到第two个数组的末尾,重复步骤3再次执行

  • ㅋㅋㅋ
  • 수정된 두 번째 배열에는 첫 번째 배열과 원하는 유사성이 있습니다.
으아아아

输출

으아아아

최대 독립 집합(MIS) 접근 방식

我们使用动态规划方法来寻找给定数组之间的最长公共子序列(LCS), 以最小化对应索引处不了等数。为weight跟LCS 속도는 매우 다양합니다. 우리는 이 기능을 사용하여 외부 장치에서 LCS를 사용할 수 있습니다.确保数组은 间更높은 상하관계입니다.公共子序列,这种动态规划技术有效地降低了不相等元素的数weight。

알고리즘

    array1과 array2라는 두 배열의 길이를 각각 m과 n으로 설정합니다.
  • 두 배열의 가능한 모든 요소 조합에 대한 LCS 길이를 저장하려면 (m+1) x (n+1) 크기의 2D 테이블 DP를 만듭니다.
  • 使사용两个已解决的循环来强调1과 2号群集中的每个组件:
    • DP[i][j] = DP[i-1]로 설정하세요. [j-1] 현재 목록의 구성 요소가 동일한 경우 1입니다.
    • 구성 요소가 다를 경우 DP[i-1][j]와 DP[i][j-1] 사이에서 생각할 수 있는 가장 주목할 만한 값으로 DP[i][j]를 증가시킵니다.
    DP[m][n]에서 DP[0][0]까지 LCS를 거꾸로 따라가세요.
    • 如果array1[i-1]과 array2[j-1]적의 元素被提升了,将array1[i-1]적角落移动到DP[i-1][j-1]并将array1[i- 1]합실공영공자序列中
    • 根据DP中哪个尊압력更高,移动到已清공적DP[i][j-1]或者向上移动到DP[i-1][j](如果它们发生了变化)

    두 배열의 LCS 외부 요소는 동일하지 않은 요소 수를 줄이기 위해 LCS를 역추적한 후 LCS와 일치하도록 변경되어야 합니다.
  • 조정된 배열의 유사성은 증가하고 목록을 비교할 때 동일하지 않은 구성요소의 수는 감소합니다.

Example

#include <iostream>
#include <vector>
using namespace std;

vector<int> findLCS(vector<int>& array1, vector<int>& array2) {
   return {};
}

int minimizeUnequalCount(vector<int>& array1, vector<int>& array2) {
   return 0;
}

void modifyArrays(vector<int>& array1, vector<int>& array2) {
}

int main() {
   vector<int> array1 = {1, 3, 5, 7, 9};
   vector<int> array2 = {2, 4, 5, 8, 9};

   vector<int> lcs = findLCS(array1, array2);
   cout << "Longest Common Subsequence: ";
   for (int num : lcs) {
      cout << num << " ";
   }
   cout << endl;

   int unequalCount = minimizeUnequalCount(array1, array2);
   cout << "Count of Unequal Elements after adjustment: " << unequalCount << endl;

   modifyArrays(array1, array2);
   cout << "Modified Array 1: ";
   for (int num : array1) {
      cout << num << " ";
   }
   cout << endl;

   cout << "Modified Array 2: ";
   for (int num : array2) {
      cout << num << " ";
   }
   cout << endl;

   return 0;
}

输出

Longest Common Subsequence: 
Count of Unequal Elements after adjustment: 0
Modified Array 1: 1 3 5 7 9 
Modified Array 2: 2 4 5 8 9 

Conclusion

有两种技术可用于减少两个给定数组之间对应索引处不相等元素的数量:哈希方法和排序方法。哈希方法为一个数组构建哈希表,并迭代地用哈希表中找到的最接近的匹配替换另一个数组中的元素。对于平均和最佳情况,这将实现O(N)的线性时间复杂度。另一方面,排序方法在迭代两个数组时按升序对它们进行排序,并将元素调整为较小的值。尽管它可能不总是产生最佳结果,但它使数组更具可比性。这两种方法都成功地减少了不一致元素的数量,增加了数组的相似性,并降低了对应位置的不一致元素的总数。

위 내용은 주어진 배열 사이의 해당 인덱스에서 동일하지 않은 요소 수를 최소화합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제