平均分配算法问题

luohzad 2007-09-21 11:17:17
例如:
有 3 个通道,要将 5,6,8,10,20,45 这些数字分配到 3个通道上,要求每个通道分配完成之后数量接近,分配次数不限,数字不能进行拆分。
...全文
920 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaishui_gu 2007-09-25
  • 打赏
  • 举报
回复
我上面不是描述了算法吗,认真看应该可以看懂的
anncesky 2007-09-22
  • 打赏
  • 举报
回复
。。。。不行,会出问题
anncesky 2007-09-22
  • 打赏
  • 举报
回复
这个比较简单吧

1从小-》大排序
2分配的时候可以从第一个通道到最后一个
再从最后一个分配到第一个
luohzad 2007-09-22
  • 打赏
  • 举报
回复
kaishui_gu() 能够说得具体点吗?贪婪算法 好像存在很多种吧。(贪婪算法---货箱装船
·贪婪算法---0/1背包问题
·贪婪算法--- 拓扑排序
·贪婪算法---二分覆盖
·贪婪算法---单源最短路径
·贪婪算法---最小耗费生成树 )

这个属于其中的哪种??

算法能够提供吗?
chuxue1342 2007-09-21
  • 打赏
  • 举报
回复
应该是前4个数
chuxue1342 2007-09-21
  • 打赏
  • 举报
回复
就只有6个数字吗???
1.排序,
2.随机从前3个数取一个数
3.从取出来的数往后读出3数放入3个通道
luohzad 2007-09-21
  • 打赏
  • 举报
回复
比如:
分配后:
通道:1 2 3
分配:10 20 45
分配:8 5
分配:6
分配和:24 25 45
分配后 每个通道的数字之和最接近。(也就是说,最大值与最小值,之间的差最小)
keyboarduser 2007-09-21
  • 打赏
  • 举报
回复
对,先排序,排序后,
0,0+2*k的保存入第1通道
1,1+2*k的保存入第2通道
2,2+2*k的保存入第3通道
kaishui_gu 2007-09-21
  • 打赏
  • 举报
回复
1.将这些数字 5,6,8,10,20,45 排序a[]
2.采用贪婪算法将这些数a[]从大到小分配给3个通道,每个通道有一个"数量"属性,将a[i]分配给最小"数量"的通道
这样的分配方式得到的数量不是最接近的,但也算比较接近
wdzr_826 2007-09-21
  • 打赏
  • 举报
回复
需求有点模糊。
是固定这6个数字还是随机的。
brucenan999 2007-09-21
  • 打赏
  • 举报
回复
数量接近是什么意思?求和?
luohzad 2007-09-21
  • 打赏
  • 举报
回复
补充:每个数字只能出现一次。
kaishui_gu 2007-09-21
  • 打赏
  • 举报
回复
认真看了下,我给的算法得到的解是最优解
对于有初始值的问题也很容易解,
就是将初始值提出来,放到数字列里面
5,6,8,10,20,45 10 ,25,33
然后按我的算法来求解,这样就可以得到三个通道的数字列,其中有25的就是通道1,有33的就是通道2
luohzad 2007-09-21
  • 打赏
  • 举报
回复
还有一种情况,如果每个通道已经存在初始值,再进行分配的话,该如何实现?
比如:
通道: 1 2 3
初始值 25 33 10
再将数字 5,6,8,10,20,45 分配到这三个通道上,分配完后每个通道的数字之和最接近。(也就是说,最大值与最小值,之间的差最小)
算法该如何实现?
luohzad 2007-09-21
  • 打赏
  • 举报
回复
比如:
分配后:
通道: 1 2 3
分配1:10 20 45
分配2: 8 5
分配3: 6
分配完和:24 25 45
分配后 每个通道的数字之和最接近。(也就是说,最大值与最小值,之间的差最小)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧