一个n数组求和问题
2013-09-13 14:56
204 查看
这是我再水木社区看到的题目,然后自己思考了下。
问题是这样的,现在有n个长度都为m的int数组, 每个数组可以有两种行为:原地不动,或者数组翻转。所谓数组翻转,就是a[i]=a[m-1-i],首尾颠倒。比如: [1,3,2,9]的翻转就是[9,2,3,1]。现我们将这n个翻转或者不翻转的数组的对应位置相加成一个新数组(sum[i]=a1[i]+a2[i]+...+an[i]),
现找到最优解让sum数组的方差最小。
1).用一个二维数组array
[m]表示n个长度为m大小的数组,初始化数据。
2).计算sum的平均值S_average = sum(array)/m,这求得sum[i]的平均值。
3).定义一维数组exchange
用于标记第i是否翻转,再定义一个result
表示最后翻转的结果。
4).定义count记录翻转的个数。
5).定义两个数组OldValue[m],newValue[m]存储sum[i]的值,即每一列的值
6).大概思路
计算只翻转第一行,即array[1][m];
得到OldValue=计算得到翻转count个后的值;
for(count=1;count<=n;++count)
{
select(exchange);(排列组合,选择exchange中的count个行进行翻转)
newValue=计算得到翻转count个后的值
if(方差(newValue)<方差(OldValue))
{
OldValue = newValue;
get(result);
}
}
最后你需要的值在OldValue中,翻转了哪些行记录在result中,不知道这行不行啊
问题是这样的,现在有n个长度都为m的int数组, 每个数组可以有两种行为:原地不动,或者数组翻转。所谓数组翻转,就是a[i]=a[m-1-i],首尾颠倒。比如: [1,3,2,9]的翻转就是[9,2,3,1]。现我们将这n个翻转或者不翻转的数组的对应位置相加成一个新数组(sum[i]=a1[i]+a2[i]+...+an[i]),
现找到最优解让sum数组的方差最小。
1).用一个二维数组array
[m]表示n个长度为m大小的数组,初始化数据。
2).计算sum的平均值S_average = sum(array)/m,这求得sum[i]的平均值。
3).定义一维数组exchange
用于标记第i是否翻转,再定义一个result
表示最后翻转的结果。
4).定义count记录翻转的个数。
5).定义两个数组OldValue[m],newValue[m]存储sum[i]的值,即每一列的值
6).大概思路
计算只翻转第一行,即array[1][m];
得到OldValue=计算得到翻转count个后的值;
for(count=1;count<=n;++count)
{
select(exchange);(排列组合,选择exchange中的count个行进行翻转)
newValue=计算得到翻转count个后的值
if(方差(newValue)<方差(OldValue))
{
OldValue = newValue;
get(result);
}
}
最后你需要的值在OldValue中,翻转了哪些行记录在result中,不知道这行不行啊
相关文章推荐
- 两个有序数组,从中各取一个组成pair,求和最小的前K个pair(杨氏矩阵top k问题)
- 数组求和的艺术-一个数组最大连续字数组之和
- 结对开发——数组求和大数溢出问题
- c语言:输出一个数组,判断是否存在问题,若有,请找出问题并改正
- 背包问题之——均分一个数组
- 有关动态多维数组的一个问题
- 树状数组解决区间求和问题(模板)
- Java生成10个随机数,填充一个数组,用消息框显示数组内容,后求和输出
- 打印给定一个数组序列的所有的排列的类n皇后问题
- Uva 507 - Jill Rides Again(最大子数组求和问题)
- 一个隐蔽的数组访问越界的问题(竟然纠结半小时,有可能是我水平太低了)
- acm-1003 求一个数组中连续区间和的最大值问题
- 一个HLSL的常量数组问题
- 素数求和问题 (今天见到了一个很不错的标记方法)
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- golang关于json库的一个比较容易陷入的坑 uint8[]数组的json转换问题.
- javascript数组的一个问题
- 结对开发-- 一维数组求和最大的子数组的大数溢出问题
- C语言的一个笔试题:指针与数组的问题
- 利用指针输出数组时发现一个问题,还请指教