Advertisement

218-C++算法

阅读量:

1.寻找最小差值问题(最接近点对问题)

在单一维度的空间环境下,可通过将数据按照升序排列的方式进行处理,依次计算相邻元素之间的差值,如s1-s0、s2-s1、s3-s2……直至sn-sn-1,并对这些差值进行比较以确定其中的最小值。然而,这种策略仅适用于一维空间,无法直接应用于二维平面或三维空间的情形。因此,可以引入分治策略的思想来解决这一问题。

算法设计中,可依据中位数将数据集划分为两个子区域s1与s2,从而确保两部分的数据量大致相等,进而使整体的时间复杂度达到最优水平(O(nlogn))。在完成划分后,分别在s1和s2两个子区域内找出各自的最小差值d1与d2。此外,在s1区域内确定最大值Max,在s2区域内识别出最小值Min,并进一步比较d1、d2以及Min与Max之间的差值,最终从中选取最小的一个作为整体的最小差值。

复制代码
    int Paritition(int* br, int left, int right)
    {
    	int tmp = br[left];
    	while (left < right)
    	{
    		while (left < right && br[right] > tmp)
    		{
    			--right;
    		}
    		if (left < right)
    		{

全部评论 (0)

还没有任何评论哟~