`

两数组最小距离问题

阅读更多

        已知两个元素从小到大排列的数组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;
}
 
0
0
分享到:
评论

相关推荐

    最小距离分类器Matlab实现

    最小距离分类器是一种基于监督学习的简单而直观的分类方法,它在许多机器学习和模式识别问题中都有应用。在Matlab环境中实现这样的分类器,可以有效地处理各种数据集,并帮助初学者理解基本的分类算法原理。以下是...

    寻找数组中的值

    一个长度为100的数组,开始乱序存放了1到100共100个数, 将其中一个位置...求两个递增数组的最小距离,即在两个数组中各取一个数,使得这两个数的差最小? http://blog.csdn.net/ssuchange/article/details/17402991

    最大最小距离算法matlab代码

    最大最小距离算法(Minimum Maximum Distance Algorithm,简称MMDS)是一种常用的数据分类方法,它基于欧几里得距离或曼哈顿距离等度量标准来确定数据点与类别中心之间的距离,以此来进行数据分类。在机器学习和模式...

    python求解数组中两个字符串的最小距离

    当我们面对需要找出数组中两个特定字符串之间的最小距离这一问题时,有几种不同的方法可以实现。 首先,我们要明确所谓"最小距离"是指数组中两个字符串的索引之差的绝对值。如果有两个字符串位置相邻,那么它们之间...

    基于C++实现编辑距离问题、货物堆积问题、骑士周游问题、数组分割问题、资源分配问题、最长上升子序列问题

    这些问题是编辑距离问题、货物堆积问题、骑士周游问题、数组分割问题、资源分配问题以及最长上升子序列问题。我们将逐一深入探讨这些知识点。 1. **编辑距离问题**: 编辑距离(Levenshtein Distance)是衡量两个...

    Minimum distance classifier_distance_最小距离_最小距离分类_

    最小距离分类器是一种基于实例的学习方法,它在机器学习领域有着广泛的应用。这种分类方法的基本原理是:对于一个新的未知样本,我们将其与训练集中所有的已知样本进行比较,找到与其最近的那个(或多个)样本,然后...

    比较和排序(复值)数组:最小化两个复向量的对应元素之间的绝对距离。-matlab开发

    本主题将深入探讨如何对复数数组进行比较和排序,以最小化两个复向量之间对应元素的绝对距离。这个过程可以视为一种优化问题,目标是找到最佳的一一对应关系,使得两组复数之间的差异最小。 首先,让我们定义两个...

    c# 实现的最大最小距离方法对鸢尾花数据进行聚类

    在本项目中,我们主要探讨的是使用C#编程语言实现最大最小距离(Max-Min Distance)算法对鸢尾花(Iris)数据集进行聚类分析。聚类是一种无监督学习方法,它根据数据的相似性或差异性将数据划分到不同的组或簇。最大...

    模式识别最大最小距离算法

    在实际应用中,最大最小距离算法可能遇到一些问题,如对离群点敏感、对类别的球形分布假设较严格等。因此,对于复杂的数据分布和大规模数据集,可能需要使用更高级的机器学习方法,如决策树、支持向量机、神经网络等...

    常见数组面试题

    **题目描述:** 找出数组中两个元素之间的最小距离。 **解析:** 为了高效解决这个问题,可以先对数组进行排序,然后遍历数组,依次比较相邻元素的距离,取最小值。这种方法的时间复杂度为O(n log n),其中排序占...

    编辑距离问题-算法导论.pdf

    对于编辑距离问题,我们可以定义一个二维数组s[i][j],其中s[i][j]表示将字符串X[i]转换成字符串Y[j]的最小代价。我们可以根据最后一次操作的类型来分情况讨论问题的最优解结构。 1. 如果最后一次操作是复制(Copy...

    动态规划求最小规划距离1

    目标是找到在字符串A中插入空格使其与B长度相等后的最小距离。 算法要求: 1. 输入:字符串A、B以及空格与其他字符的距离k。 2. 输出:A和B的扩展距离。 动态规划的推导公式(状态转移方程): 令val(i, j)表示A的...

    最小操作次数使数组元素相等(找规律)1

    题目 "最小操作次数使数组元素相等" 是一道典型的算法问题,主要考察的是对数组处理和数学思维的能力。这个问题的目的是找到最小的操作次数,使得数组中的所有元素变得相等,而每次操作是将数组中除一个元素外的所有...

    Java滚动数组计算编辑距离操作示例

    编辑距离是指两个字符串之间的最小编辑操作次数,如插入、删除、替换等操作。例如,从字符串 "frog" 到字符串 "fog" 的编辑距离为 1,因为我们可以通过删除一个字符 "r" 来将 "frog" 转换为 "fog"。 Java 滚动数组...

    最小通信网-要在n个城市间建立通信网,已知各个城市间的距离,建立的通信线路要使得这n个城市连通,而且建立的通信网络代价最小(最短)。

    在算法执行过程中,不断更新这两个数组,以找到当前未加入最小生成树的顶点到已加入树的顶点的最小权值边。 具体算法步骤如下: 1. 初始化`closest`和`lowcost`数组,将所有顶点的`closest`设为起始顶点,`lowcost`...

    zuixiaoshengchengshu.rar_zuixiaoshengchengshu_在最小生成树问题中以存储边数组表示图

    在这个问题中,我们关注的是如何以存储边数组的方式来表示图,并使用克鲁斯卡尔算法求解最小生成树。 首先,我们要理解图的基本概念。一个图是由顶点(节点)和边(连接顶点的线)组成的集合。在有向图中,边有方向...

    最小编辑距离(字符串相似度)java版

    二维数组`dp`用于存储子问题的解,其中`dp[i][j]`表示字符串`str1`的前`i`个字符与`str2`的前`j`个字符之间的最小编辑距离。 ### 3. 算法优化 为了减少空间复杂度,可以使用滚动数组技巧,只保留两行状态,即当...

    用matlab如何求出一个数组中最接近某个数的五个数

    4. **选取五个数**:由于我们想要的是最小的五个差值,所以直接取排序后索引的前五项即可,即`top5_idx = idx(1:5)`。 5. **返回结果**:利用得到的索引`top5_idx`,从原始数组`array`中提取出最接近`target`的五个...

    关于数组的几道面试题1

    需要遍历数组,记录元素出现的位置,找到相邻出现的元素之间的最小距离。 6. **求两个有序数组的共同元素**: 对于两个有序数组,可以采用双指针法,分别从头开始比较,找到相同的元素。 7. **求三个数组的共同...

Global site tag (gtag.js) - Google Analytics