首页  >  文章  >  后端开发  >  将给定数组之间对应索引处的不相等元素的数量最小化

将给定数组之间对应索引处的不相等元素的数量最小化

王林
王林转载
2023-08-26 12:57:181217浏览

将给定数组之间对应索引处的不相等元素的数量最小化

比较每个索引处的元素并调整它们直到它们匹配,以减少给定数组之间相应索引处不一致元素的数量。根据需要进行调整,同时迭代数组。数组将变得更加相似,并且不相等元素的比例将因此减少。通过减少它们在相应位置的差异,该过程旨在增加阵列之间的相似性。最终目标是生成每个索引处具有相同元素的数组,这将减少不相等元素的数量。

使用方法

  • 哈希方法

  • 排序方法

哈希方法

在哈希方法中,我们首先为其中一个数组创建一个哈希表,以便在比较数组之间的文件时减少不相等分量的数量。此时,当我们重复矩数组时,我们会查看哈希表中每个组件的频率。如果找到该组件,则将其保留;如果不是,则使用哈希表中最接近的协调组件来代替它。此过程的结果是,相应索引处的不相等元素更少,并且两个数组变得更加相似。该方法的效率是一个优势,因为它可以在平均情况和最佳情况下实现线性时间复杂度 O(N) 所需的相似性。

算法

  • 第一个数组的每个元素都应该作为键添加,并且它们的频率作为值添加到哈希表中。

  • 设置一个指针,以便您可以循环访问第二个数组。

a。确定第二个数组中的每个元素是否存在于哈希表中。

b.如果是这样,请保留该元素。

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

d。将第二个数组中的现有元素更改为最接近的匹配项。

  • 直到指针到达第二个仓库的,重复步骤3再次执行

  • 由于仓库的存在,相应索引处的不符合元素数量现在将达到最低水平

  • 修改后的第二个数组中存在与第一个数组所需的相似性。

示例

雷雷

输出

雷雷

最大独立集(MIS)方法

我们使用动态规划方法来寻找给定存储之间的终止公共子序列(LCS),以最小化对应索引处不足够元素的数量。为了跟踪两个存储中所有可能排列的元素的LCS长度,我们创建了一个二维表。为了减少差异,需要改变的元素可以通过回溯LCS来找到。通过LCS之外的元素来匹配修改LCS,确保阵列之间更高的相似度。通过优化阵列来共享一个公共子序列,这种动态规划技术有效地降低了不确定元素的数量。

算法

  • 将两个数组(称为 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][j] 增加到 DP[i-1][j] 和 DP[i][j-1] 之间最值得注意的可能值。

  • 从 DP[m][n] 向后跟随 LCS 到 DP[0][0]:

    • 如果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删除