怎么样把一堆数div平均分成三份N份

随笔 - 87&
文章 - 118&
trackbacks - 0
27282930311234567891011121314151617181920212223242526272829301234567
留言簿(15)
随笔分类(52)
随笔档案(87)
胡满超的非技术博客
阅读排行榜
一年半之前,我遇到一个问题:把一堆数平均分成N份,保证每一份的和接近于所有数之和除以N,不要求平分以后的每份数据个数相等。这是有现实的程序设计需求的,当时是3份。首先想到要先进行排序,再依次从已排序的数列中抽取,如何进行抽取方法有很多,我大概想了3种左右,感觉要拿一些数据去测试一下这几种方法哪一种可以逼近最优解。当时经理要求算法一定能够得出最优解,但测试多组数据,没有发现哪一种实现能得到最优解。后来翻了一下,忽然想到,原来这个是一个典型贪婪算法问题,这个问题没有最优解,用贪婪算法来解决这个问题可以让每一次结果逼近最优。实现如下(注:代码是我今天写的):
typedef&vector&int&&&&&&&&IntVtypedef&vector&IntVector&&IntMvoid&DeuceNumber(const&IntVector&&SourceVecNum,&&&&&&&&&&&&&&&&&const&int&&&&&&&nShare,&&&&&&&&&&&&&&&&&IntMat&&&&&&&&&&&OutVecVecNum){&&&&IntVector&copySourceNum&=&SourceVecN&&&&sort(copySourceNum.begin(),&copySourceNum.end(),&greater&int&());&&&&IntVector&sum(nShare);&&&&OutVecVecNum.resize(nShare);&&&&for&(int&i&=&<span style="COLOR: #;&i&&&copySourceNum.size();&i++)&&&&{&&&&&&&&const&int&nMinSumPos&&&&&=&min_element(sum.begin(),&sum.end())&-&sum.begin();&&&&&&&&OutVecVecNum[nMinSumPos].push_back(copySourceNum[i]);&&&&&&&&sum&&&&&&&&&[nMinSumPos]&+=&copySourceNum[i];&&&&}}
我上传了一个VC的测试工程,有兴趣的朋友。理论的依据不仅指导了实践的选择,同时给选择以有力的支撑。2007年就要结束了,在此预祝大家在新的一年里:身体健康,平安如意!
阅读(2243)
&re: 怎么样把一堆数平均分成N份& 16:45&
这个不是最优解吧只能是近似优&&&&&&
&re: 怎么样把一堆数平均分成N份& 17:16&
楼主的程序无法保证平分!
&re: 怎么样把一堆数平均分成N份& 17:53&
@winsty我认为这个问题没有最优解,贪婪算法从理论上解释了此种方法逼近最优。&&&&&&
&re: 怎么样把一堆数平均分成N份& 18:00&
@BlackDream的确,平分的提法容易使人理解出多种含义。这里是指,分配后的N组数,每组之和接近所有数之和除以N,并且只考虑和不考虑每组数的个数。这里面有一个数学的问题,就是如何衡量最优解?我认为是:((第1组数和-总和/N)+(第2组数和-总和/N)+...)/N这个值越小结果越优。&&&&&&
&re: 怎么样把一堆数平均分成N份[未登录]& 19:06&
把一个数组平均分成和相等的两份,这是一个NPC问题,分成N份,N&=3时,更是NPC问题.&&&&&&
&re: 怎么样把一堆数平均分成N份& 21:15&
把一个数组平均分成和相等的两份,这是一个NPC问题????不是吧... 有确定算法的吧zoj上就有道类似题N&=3 就不清楚了&&&&&&
&re: 怎么样把一堆数平均分成N份& 21:32&
建议用最小二乘作为指标。&&&&&&
&re: 怎么样把一堆数平均分成N份& 21:33&
附件里是啥东西啊?满不相关啊!&&&&&&
&re: 怎么样把一堆数平均分成N份& 22:56&
@abettor.org
太抱歉了,本人疏忽链接没有弄对。已经更正了。&&&&&&
&re: 怎么样把一堆数平均分成N份[未登录]& 22:24&
能问您一个麻烦点的问题么
我没有看懂这个算法,你能稍微说一下DeuceNumber函数的主要思想吗?因为我要用c#实现这个,万分感谢!&&&&&&
&re: 怎么样把一堆数平均分成N份& 08:47&
主要思想就是贪婪算法,依次遍历N个数,然后分别把它们放入三个数组(数字筒)里,三个数组哪个和最小,就把当前数放到哪个数组里,放入以后三个数组的和大小顺序会发生变化,程序下一次需要重新计算一下哪个数组最小@snow
&&&&&&
&re: 怎么样把一堆数平均分成N份& 08:50&
这个问题的确NP完全问题,在《编程之美》里有更加完美的答案,请大家查阅。标准的解放算法复杂度比较高。@jarod
&&&&&&CAD怎么把一条直线的一部分均分成N等分?我知道怎么把一整条直线N等分,但一条直线的一部分呢?
CAD怎么把一条直线的一部分均分成N等分?我知道怎么把一整条直线N等分,但一条直线的一部分呢?
用点命令中的定数等分或者定距等分,其中一部分你可用打断命令让其独立出来,等分后再用连接命令连接即可.
与《CAD怎么把一条直线的一部分均分成N等分?我知道怎么把一整条直线N等分,但一条直线的一部分呢?》相关的作业问题
证明:按抽屉原理,9条直线中的每一条直线都把正方形分成面积比为2:3的两个四边形,则至少有5条直线穿过一对边.又2:3≠1:1,根据“梯形的面积等于中位线长乘以高”,可知这5条直线必过正方形的一条对边中点连线上的两定点.故若5个点不全经过一点,则必经过这条直线上的两点,再据抽屉原理,至少必有三点经过同一点.
(1)如图①,两条直线可以把平面分成3或4个部分;如图②,三条直线可以把平面分成4或6或7个部分;(2)如图③,四条直线最多可以把平面分成11部分;四条直线的位置关系:四条直线两两相交;(3)一条直线可以把平面分成两部分,两条直线最多可以把平面分成4部分,三条直线最多可以把平面分成7部分,四条直线最多可以把平面分成11
可以分成1+2+3+.+2004个即2004!=(1+2004)×9011 个给你个公式,是高中的,但初中要用,1+2+3+.+N=N!=(1+N)×N÷2,记住哈
由于一个三角形只有三个边,两个共一条边的三角形有五个边,夜叉4做一条粗线将斜线整个覆盖即可
在第三条线后添上第4条直线.它与前面的3条直线最多有3个交点,这3个交点将第4条直线分成4段,其中每一段将原来所在平面部分一分为二,所以4条直线最多将平面分成7+4=11个部分.类似地,5条直线最多将平面分成11+5=16个部分;6条直线最多将平面分成16+6=22个部分;7条直线最多将平面分成22+7=29个部分;8
经过五边形的一个顶点有( 2)条对角线,她们将五边形分成了( 3)个三角形.
不行 除非你原来的是正方形 要不至少要3条线
你的意思是不是说:在已知圆中作一直线段,线段需满足一定长度和角度要求,且线段两端点都在圆周上.方法一:1、作满足条件的圆;2、作满足长度和角度要求的直线段AB;3、移动线段AB,使线段中点C与圆心O重合;4、过线段外任一点作EF垂直AB;5、移动EF,使点E与点A重合;(6、延伸EF,使其与圆O相交)[如上步所作垂线较
快捷键O 复制co
《首先将左图的所有直线合并为多段线,然后偏移.》具体步骤如下:命令:pedit 选择多段线或 [多条(M)]:m (输入m选择多个对象)选择对象所有直线 然后确定是否将直线和圆弧转换为多段线?[是(Y)/否(N)]?(输入Y)输入选项 [闭合(C)/打开(O)/合并(J)/宽度(W)/拟合(F)/样条曲线(S)/非曲线
一共有4种可能如下:①△ABC是等腰三角形,AB=AC,线段AD是过定点A的,根据题意,由于△ABD、△ACD是等腰三角形,且AD=BD,AD=CD,那么∠B=∠BAD=∠CAD=∠C,利用三角形内角和定理,可知∠B+∠BAD+∠CAD+∠C=180°,解得∠B=∠BAD=∠CAD=∠C=45°,∠BAC=90°;②如
如图∠ABC=∠ABD=180÷2=90°则∠BAC=∠C=45°&&∠BAD=∠D=45°则∠CAD=45°+45°=90°则为等腰直角三角形:90,45,45度
如图,三条直线a、b、c两两相交,且交点分别为A、B、C,设a,b确定一个平面α,∵B∈a,C∈a,A∈b,C∈b,∴A∈α,B∈α,又∵A∈c,B∈c,∴c?α,∴三条直线a,b,c共面于α.∴这三条直线共面.
1:两条直线相交,如果有一个角是直角,那么其余三个角都是【直】角,这两条直线的位置关系是【垂直】2:如果有一个角是锐角,那么与它相邻的两个角是【钝】角
1条直线:2部分;2条直线:4部分:2+2;3条直线:7部分:4+3;4条直线:11部分:7+4;5条直线:16部分:11+5;所以得n条直线可将平面分成:2+2+3+4+5+6+……+n=1+2+3+4+5+6+……+n+1=[(1+n)n/2]+1部分,得解.
2条.由所求直线与面A和L都成30度角可得L是所求直线在面A上的投影.又因为都过点W所以只有两条.
都是90°,关系是垂直
5条直线应该最多可以分成16个区域10条则为56个一条直线可以分成两个区域,而若再加一条,要使分成区域最多,就是所加的这条分别穿过前面分得的两个区域,这样被穿过的区域就又分成两个了,再加一条,就是尽量多的穿过先前分得的区域,因此也就势必要与其他所有的线相交,因此我们得知,交点越多,所分区域越多.每加一条直线,就多先前直怎么样把一堆数平均分成N份
一年半之前,我遇到一个问题:把一堆数平均分成N份,保证每一份的和接近于所有数之和除以N,不要求平分以后的每份数据个数相等。这是有现实的程序设计需求的,当时是3份。首先想到要先进行排序,再依次从已排序的数列中抽取,如何进行抽取方法有很多,我大概想了3种左右,感觉要拿一些数据去测试一下这几种方法哪一种可以逼近最优解。
当时经理要求算法一定能够得出最优解,但测试多组数据,没有发现哪一种实现能得到最优解。后来翻了一下,忽然想到,原来这个是一个典型贪婪算法问题,这个问题没有最优解,用贪婪算法来解决这个问题可以让每一次结果逼近最优。实现如下(注:代码是我今天写的):
typedef vector&int&
typedef vector&IntVector& IntM
void DeuceNumber(const IntVector &SourceVecNum,
&OutVecVecNum)
IntVector copySourceNum = SourceVecN
sort(copySourceNum.begin(), copySourceNum.end(), greater&int&());
IntVector sum(nShare);
OutVecVecNum.resize(nShare);
for (int i = 0; i & copySourceNum.size(); i++)
const int nMinSumPos
= min_element(sum.begin(), sum.end()) - sum.begin();
OutVecVecNum[nMinSumPos].push_back(copySourceNum[i]);
[nMinSumPos] += copySourceNum[i];
我上传了一个VC的测试工程,有兴趣的朋友。
理论的依据不仅指导了实践的选择,同时给选择以有力的支撑。
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.057 (s). 12 q(s)查看: 8680|回复: 8
[已解决]求助:怎样将一列数据等分成几份?
有没有哪位高手能够帮忙解决?就是一列有25万个数据,我要将他等分成很多份,比如说我要分成10份,就是每份2.5万个,有没有什么公式等的简单点的操作方法呀?谢谢!如附件:里面有120个人,要求分成10组,每组12人,不想12个人12个人数了再复制粘贴,有没有什么好办法
(4.6 KB, 下载次数: 67)
12:32 上传
点击文件名下载附件
求助:怎样将一列数据等分成几份?
[此贴子已经被作者于 12:32:34编辑过]
qinqh_yl发布于
B1=IF(ROW()&12,"",INDEX($A:$A,(COLUMN()-2)*12+ROW())&"")向右向下复制公式.
试试“分列”功能吧。
方法很多把你的附件发上来
惊动了刀狐部长
&&&本楼为最佳答案&&&
B1=IF(ROW()&12,"",INDEX($A:$A,(COLUMN()-2)*12+ROW())&"")向右向下复制公式.
谢谢高手!很好用,就是不太明白是什么意思,也不晓得怎么举一反三,呵呵。要研究下
回复:(qinqh_yl)B1=IF(ROW()&12,"",INDEX($A:$A...
以下是引用qinqh_yl在 13:32:00的发言:B1=IF(ROW()&12,"",INDEX($A:$A,(COLUMN()-2)*12+ROW())&"")向右向下复制公式.index里为什么要加""?我试了一下,不加""也可以的呀?
向下拉两千行就可以看得出加不加&&&的区别了
跟着最佳答案学习
Powered by

我要回帖

更多关于 div平均分成三份 的文章

 

随机推荐