两个数组之间的数据聚类和比较

Data clustering and comparison between two arrays

本文关键字:数据 聚类 比较 之间 数组 两个      更新时间:2023-10-16

i有的。我如何挑选出重复的人,并以最少的比较将它们放入每个组中?最好在C 中。

例如给定

阵列1 = {1,1,2,2,3,4,5,5,1,1,2,2,2,4,5,8,…}

阵列2 = {2,1,1,2,2,2,4,7,7,8,8,8,2,2,4,4,4,8,…}。

首先,我要聚集数据。

数组1 = {组1 = {1,1,1,1,1,…},组2 = {2,2,2,2,2,…},组3 = {3,…},组4 = {4,4,…},组5 = {5,5,5,…},组6 = {8,…}}。

数组2 = {组1 = {1,1,…},组2 = {2,2,2,2,2,2,2…},组3 = {4,4,4,4,…},组4 ={7,7,…},组5 = {8,8,8…}}。

,其次,我想要数据匹配。

数组1的第1组==数组2的第1组

数组1的第2组==数组2的第2组

数组1的第4组==数组2的第3组

数组1的第6组==数组2的第5组

如何在C 中解决此问题?请给我您的精彩提示。


此外,我将详细解释我的问题。我有两个数据集,这些数据集以立体声图像计算。数组1是左相机的数据,而数组2是右相机的数据。我的最终目标是匹配具有相同值的组,例如Array1的第6组和数组2的第5组。数据排序不是我的考虑。我只想在两个数组中的组之间找到相同的值。(您是否建议我先使用数据订购来减少比较数量?)。

为了解决此问题,我应该使用" std :: map"进行数据聚类,并比较这些n!时间(n:no。阵列1或2中的组)?这是我能做的最好的方法吗?

我想获得您的建议。感谢您分享我的问题。


我的结论

我的方法是在C STL中使用地图容器。

  1. 制作2个地图容器(array1_map,array2_map)。

  2. 将每个数组的值插入地图容器中作为键,然后将每个数组的索引作为值插入地图中。(两个阵列的两个数据都有序地保存在地图中,而无需重复。)

  3. 使用find()映射容器的成员功能进行数据匹配。

  4. 数据匹配后,我能够获取具有匹配键(相应的键)的每个数组的索引。

感谢您的所有有用的答案!

我看到的最简单方法是构造每个数组的直方图。然后,您可以将这些直方图进行比较。这应该是o(nlogn)将每个数组转换为一个直方图,其中n是数组大小,然后o(n)比较 N是阵列中唯一元素的数量(地图的大小)。看起来像

int arr1[] = {...};
int arr2[] = {...};
std::map<int, int> arr1_histogram, arr2_histogram;
for (auto e : arr1)
    arr1_histogram[e]++;
for (auto e : arr2)
    arr2_histogram[e]++;
if (arr1_histogram == arr2_histogram)
    // true case
else
    // false case