算法n个数按顺序分成m组,每组和尽量相近

本文介绍如何使用算法将n个数按顺序分成m组,目标是使每组的和尽可能接近。讨论了可能的解决方案,并提供了Java, C/C++和Matlab的实现示例。" 108857717,2013247,Opencv图像处理:阈值分割、排序、无缝克隆与斑点检测,"['图像处理', 'OpenCV', '二值化', '图像分割', '图像融合', '特征检测']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package algorithm;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.TreeMap;

/**
 * 
 * @Description: n个数按顺序分成m组,每组和尽量相近 
 * 思路:先递归求出所有切分点的组合方式,然后分别计算每组中的和,对每组和两两差值的绝对值累加,最小的为最优切分点。
 * 如:{1,2,3,4}分2组 可以{1}和{2,3,4} {1,2}和{3,4} {1,2,3}和{4}   不能为{1,3}{2,4} 
 * 缺点:当list很大,分的组很多的时候,效率很低,几十分钟才能算出来。
 * @author thrillerzw
 * @version 1.0
 * @create time 2014-4-28 下午6:47:19
 */
public class TestCombination {
	public static void main(String[] args) {
		List<Integer> lengthList = new ArrayList<Integer>();
		for(int i=0;i<6;i++){
			lengthList.add(new Random().nextInt(100));
		}
		long startTime=System.currentTimeMillis();
		int m = 3;
		List<List<Integer>> resultList = new ArrayList<List<Integer>>();
		if (lengthList.size() < m) {
			buildResultList(resultList, lengthList);
		} else {
			int endIndex = lengthList.size() - (m - 2);
			int[] tempArr = new int[m - 1];
			List<int[]> combList = new ArrayList<int[]>();
			int num = -1;
			//所有切分点的组合存入combList
			Combine(lengthList, m - 1, tempArr, 0, 0, combList);
			int[] resultArr = null;
			for (int[] combArr : combList) {
				for (int i = 0; i < combArr.length; i++) {
					System.out.print(combArr[i] + " ");
				}
				System.out.println();
				int[] sumArr = getSum(combArr, lengthList);
				int diffSum = compu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值