已知两个元素从小到大排列的数组x[]和y[],请写出一个程序算出两个数组元素彼此之间差的绝对值中最小的一个,这个叫做数组的距离。
这个问题不难,可以通过一个循环嵌套循环解决。但是既然说了两个数组元素都是从小到大排列,那么肯定有别的简单的办法。
如果x[i]>y[j],对于x[i]-y[j],所有排在y[j]之前的元素计算这个式子的值都会大于x[i]-y[j],因此,要想寻找到更小的距离,j++。
同理,如果x[i]<y[j],对于y[j]-x[i],所有排在x[i]之前的元素计算这个式子得出来的值都大于y[j]-x[i],因此,想寻找更小的值,i++。
明白了这个,代码就可以理解了
/************************************************************************/
/* 两个数组最短距离问题 */
/* */
/************************************************************************/
#include <stdio.h>
#include <limits.h>
#define INFINITE INT_MAX /*int所能表示的最大值*/
#define min(x,y) ((x) < (y) ? (x) : (y))
/*
x:第一个数组
m:数组x的长度
y:第二个数组
n:数组y的长度
*/
int getMinDistNew(int x[], int m, int y[], int n)
{
int indexX,indexY;
int minimum = INFINITE;
indexX = 0;
indexY = 0;
while (indexX < m && indexY < n)
{
if (x[indexX] >= y[indexY])
{
minimum = min(minimum,x[indexX] - y[indexY]);
indexY++;
}
else
{
minimum = min(minimum,y[indexY] - x[indexX]);
indexX++;
}
}
return minimum;
}
int main()
{
int rst;
int x[6] = {1,2,4,8,9,11};
int y[7] = {-5,-3,-1,0,3,4,9};
rst = getMinDistNew(x,6,y,7);
printf("The minimum distance is %d\n",rst);
return 0;
}
分享到:
相关推荐
最小距离分类器是一种基于监督学习的简单而直观的分类方法,它在许多机器学习和模式识别问题中都有应用。在Matlab环境中实现这样的分类器,可以有效地处理各种数据集,并帮助初学者理解基本的分类算法原理。以下是...
一个长度为100的数组,开始乱序存放了1到100共100个数, 将其中一个位置...求两个递增数组的最小距离,即在两个数组中各取一个数,使得这两个数的差最小? http://blog.csdn.net/ssuchange/article/details/17402991
最大最小距离算法(Minimum Maximum Distance Algorithm,简称MMDS)是一种常用的数据分类方法,它基于欧几里得距离或曼哈顿距离等度量标准来确定数据点与类别中心之间的距离,以此来进行数据分类。在机器学习和模式...
当我们面对需要找出数组中两个特定字符串之间的最小距离这一问题时,有几种不同的方法可以实现。 首先,我们要明确所谓"最小距离"是指数组中两个字符串的索引之差的绝对值。如果有两个字符串位置相邻,那么它们之间...
这些问题是编辑距离问题、货物堆积问题、骑士周游问题、数组分割问题、资源分配问题以及最长上升子序列问题。我们将逐一深入探讨这些知识点。 1. **编辑距离问题**: 编辑距离(Levenshtein Distance)是衡量两个...
最小距离分类器是一种基于实例的学习方法,它在机器学习领域有着广泛的应用。这种分类方法的基本原理是:对于一个新的未知样本,我们将其与训练集中所有的已知样本进行比较,找到与其最近的那个(或多个)样本,然后...
本主题将深入探讨如何对复数数组进行比较和排序,以最小化两个复向量之间对应元素的绝对距离。这个过程可以视为一种优化问题,目标是找到最佳的一一对应关系,使得两组复数之间的差异最小。 首先,让我们定义两个...
在本项目中,我们主要探讨的是使用C#编程语言实现最大最小距离(Max-Min Distance)算法对鸢尾花(Iris)数据集进行聚类分析。聚类是一种无监督学习方法,它根据数据的相似性或差异性将数据划分到不同的组或簇。最大...
在实际应用中,最大最小距离算法可能遇到一些问题,如对离群点敏感、对类别的球形分布假设较严格等。因此,对于复杂的数据分布和大规模数据集,可能需要使用更高级的机器学习方法,如决策树、支持向量机、神经网络等...
**题目描述:** 找出数组中两个元素之间的最小距离。 **解析:** 为了高效解决这个问题,可以先对数组进行排序,然后遍历数组,依次比较相邻元素的距离,取最小值。这种方法的时间复杂度为O(n log n),其中排序占...
对于编辑距离问题,我们可以定义一个二维数组s[i][j],其中s[i][j]表示将字符串X[i]转换成字符串Y[j]的最小代价。我们可以根据最后一次操作的类型来分情况讨论问题的最优解结构。 1. 如果最后一次操作是复制(Copy...
目标是找到在字符串A中插入空格使其与B长度相等后的最小距离。 算法要求: 1. 输入:字符串A、B以及空格与其他字符的距离k。 2. 输出:A和B的扩展距离。 动态规划的推导公式(状态转移方程): 令val(i, j)表示A的...
题目 "最小操作次数使数组元素相等" 是一道典型的算法问题,主要考察的是对数组处理和数学思维的能力。这个问题的目的是找到最小的操作次数,使得数组中的所有元素变得相等,而每次操作是将数组中除一个元素外的所有...
编辑距离是指两个字符串之间的最小编辑操作次数,如插入、删除、替换等操作。例如,从字符串 "frog" 到字符串 "fog" 的编辑距离为 1,因为我们可以通过删除一个字符 "r" 来将 "frog" 转换为 "fog"。 Java 滚动数组...
在算法执行过程中,不断更新这两个数组,以找到当前未加入最小生成树的顶点到已加入树的顶点的最小权值边。 具体算法步骤如下: 1. 初始化`closest`和`lowcost`数组,将所有顶点的`closest`设为起始顶点,`lowcost`...
描述进一步说明了这个压缩包可能包含的内容,即一个动态规划算法的实现,用于计算两个字符串之间的最小编辑距离。动态规划是一种解决复杂问题的有效方法,通过将大问题分解为小问题并存储子问题的解决方案,避免了...
在这个问题中,我们关注的是如何以存储边数组的方式来表示图,并使用克鲁斯卡尔算法求解最小生成树。 首先,我们要理解图的基本概念。一个图是由顶点(节点)和边(连接顶点的线)组成的集合。在有向图中,边有方向...
二维数组`dp`用于存储子问题的解,其中`dp[i][j]`表示字符串`str1`的前`i`个字符与`str2`的前`j`个字符之间的最小编辑距离。 ### 3. 算法优化 为了减少空间复杂度,可以使用滚动数组技巧,只保留两行状态,即当...
4. **选取五个数**:由于我们想要的是最小的五个差值,所以直接取排序后索引的前五项即可,即`top5_idx = idx(1:5)`。 5. **返回结果**:利用得到的索引`top5_idx`,从原始数组`array`中提取出最接近`target`的五个...