算法思想:对于给定的三个长度确定的序列,两两进行计算,计算的过程是,每次从一个序列中将各个元素依次进行遍历,每遍历到一个元素,就与第二个序列中每个元素进行做差并取绝对值,这些数值会全部存入一个二元数组中,之后,遍历这个二元数组,找出这个最小值即为两个序列中的最小距离
之后,selThreeTuple()函数对三个序列两两进行上述操作,最后将三个返回值相加,即三元组的最小距离
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 20
#define ElemType int
int findMinNum(ElemType A[],ElemType B[],int lena,int lenb) {
int C[MaxSize][MaxSize] = { {0,0} };
for (int i = 0; i < lena; i++) {
for (int j = 0; j < lenb; j++) {
C[i][j] = abs(A[i] - B[j]);
}
}
int minnum = C[0][0];
for (int i = 0; i < lena; i++) {
for (int j = 0; j < lenb; j++) {
if (minnum < C[i][j]) {}
else {
minnum = C[i][j];
}
}
}
return minnum;
}
void selThreeTuple(ElemType A[],ElemType B[],ElemType C[],int lena,int lenb,int lenc) {
int findAB = findMinNum(A, B,lena,lenb);
int findAC = findMinNum(A, C,lena,lenc);
int findBC = findMinNum(B, C,lenb,lenc);
int minPath = findAB + findAC + findBC;
printf("三元组最小距离为:%d\n", minPath);
}
算法效率分析:
时间复杂度:O(n2)
空间复杂度:O(n2)