Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将一组人分成两个不相交的子组(任意大小),并找到一些值_Algorithm_Sorting_Max - Fatal编程技术网

Algorithm 将一组人分成两个不相交的子组(任意大小),并找到一些值

Algorithm 将一组人分成两个不相交的子组(任意大小),并找到一些值,algorithm,sorting,max,Algorithm,Sorting,Max,正如我们从编程中了解到的那样,有时一个问题中的一个小小的改变就可以 显著改变其解决方案的形式 首先,我想创建一个简单的算法来解决 下面的问题,并使用bigtheta对其进行分类 符号: 将一组人分成两个不相交的子组 (任意大小)使得 会员总年龄的差异 这两个子组尽可能大。 现在我需要改变这个问题,以便 差异尽可能小,并进行分类 我对这个问题的态度 首先,我需要创建初始算法。 为此,我是否应该进行某种排序以便将团队分开,以及我应该如何继续? 编辑:对于第一个问题,我们排除了集合为空集的可能性。所以

正如我们从编程中了解到的那样,有时一个问题中的一个小小的改变就可以 显著改变其解决方案的形式

首先,我想创建一个简单的算法来解决 下面的问题,并使用bigtheta对其进行分类 符号:

将一组人分成两个不相交的子组 (任意大小)使得 会员总年龄的差异 这两个子组尽可能大。

现在我需要改变这个问题,以便 差异尽可能小,并进行分类 我对这个问题的态度

首先,我需要创建初始算法。 为此,我是否应该进行某种排序以便将团队分开,以及我应该如何继续?


编辑:对于第一个问题,我们排除了集合为空集的可能性。所以我们所要做的只是一个线性搜索,找到最小年龄,然后把它放在一个集合B中。SetA现在有所有其他年龄,除了setB年龄,这是最小年龄。因此,这是两组总年龄的最大差异,尽可能高

按照您描述第一个问题的方式,它很简单,因为它要求您只找到最小元素(如果子组至少包含一个成员),否则它已经解决了

第二个问题可以递归解决,伪代码是:

// compute sum of all elem of array and store them in sum
min = sum;
globalVec = baseVec;
fun generate(baseVec, generatedVec, position, total)
    if (abs(sum - 2*total) < min){ // check if the distribution is better
        min = abs(sum - 2*total);
        globalVec = generatedVec;
    }
    if (position >= baseVec.length()) return;
    else{
        // either consider elem at position in first group:
        generate(baseVec,generatedVec.pushback(baseVec[position]), position + 1, total+baseVec[position]);
        // or consider elem at position is second group:
        generate(baseVec,generatedVec, position + 1, total);
    }
//计算数组中所有元素的和,并将它们存储在和中
最小值=总和;
globalVec=baseVec;
乐趣生成(baseVec、generatedVec、position、total)
如果(abs(sum-2*total)=baseVec.length())返回;
否则{
/或者在第一组中考虑ELEM的位置:
生成(baseVec,generatedVec.pushback(baseVec[position]),position+1,total+baseVec[position]);
(或)认为ELEM处于第二组:
生成(baseVec,generatedVec,位置+1,总计);
}
现在只需使用
generate(baseVec,“,0,0)
启动函数,其中
表示空向量


通过将算法应用于排序数组,可以极大地改进算法,从而添加一个测试条件来停止分支,但想法保持不变。

对于第一个问题,我们排除了集合为空集的可能性。所以我们所要做的只是线性搜索,找到最小年龄,然后把它放在一个集合B中。SetA现在有所有其他的年龄,除了最小年龄的setB。所以这里是两个集合的总年龄的最大差异,尽可能高@AlexandruYes,这就是我所说的。据我所知,你给我的解决方案只是计算了年龄之和中可能存在的最小差异。。我说得对吗?