求一个最优均等分配算法,急。。。。

zsl448 2007-11-21 11:42:17
数据库记录如下
姓名 金额
张三 100
李四 50
...
王五 800

n条记录,可能会上万条
现在我要把这些记录分配给若干业务员,要求每个业务员拿到的记录数和总金额相当,求最优算法。

...全文
266 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
linlan999 2008-03-08
  • 打赏
  • 举报
回复
MARK
zsl448 2007-11-23
  • 打赏
  • 举报
回复
按qzy6和楼上的思路,问题基本解决了.不过还是得把大粒度金额的数据删除再分配得出的结果才好些~~~
a0002 2007-11-23
  • 打赏
  • 举报
回复
两个问题一样
http://topic.csdn.net/u/20071121/13/eb66d013-3fd9-4791-9dbf-348c5c183317.html
BlueSkyInMyEye 2007-11-23
  • 打赏
  • 举报
回复
上面的方法还是不太好;
提供一个比较算法比较繁的;

有m个业务员,有n条记录;
先将记录按从小到大排列,先将前m条记录分给m个业务员;
然后将m个业务员手中的资金由大到小进行排列;
再将剩下你n-m记录分m条给m个业务员;
然后将m个业务员手中的资金进行由大到小排列一次;
再进行分配
如此反复
BlueSkyInMyEye 2007-11-23
  • 打赏
  • 举报
回复
如果有m条记录,有n个业务员;
先将m条记得从小到大排列,然后把前n条分个n个业务员;
然后m-n条记录从大到小排列,在把前n条记录分给n个业务员;
如此反复知道m剩下的记录小于n为止;
剩下的记录就是不够分的(你自己看着办);

这里只提供粗略的解决方法,具体的自己想一下.
qzy6 2007-11-22
  • 打赏
  • 举报
回复
其实不一定非要找出最优解,近似最优我觉得就可以了。
lz给的要求是可以理解的:将记录(可以看作是客户)分配给业务员,使得每个业务员得到的客户数及总金额数都相近,以达到公平分配的目的。
Tiger_Zhao 2007-11-22
  • 打赏
  • 举报
回复
两个相当很可能无解,比如{5,5,4,2,2,2}
kaishui_gu 2007-11-22
  • 打赏
  • 举报
回复
也是,上面把记录数相当优先考虑了
zsl448 2007-11-22
  • 打赏
  • 举报
回复
题目都没描述清楚,还谈什么最优算法?

“要求每个业务员拿到的记录数和总金额相当”,有两个衡量最优程度的量,那怎么个相当法才算最优?

--------------------------
是优先考虑记录数,总之最后得出的结果尽量每个人分到的金额平衡,当然充许有偏差,但要尽量控制得比较小
medie2005 2007-11-22
  • 打赏
  • 举报
回复
题目都没描述清楚,还谈什么最优算法?

“要求每个业务员拿到的记录数和总金额相当”,有两个衡量最优程度的量,那怎么个相当法才算最优?
kaishui_gu 2007-11-22
  • 打赏
  • 举报
回复
1楼看来是贪婪算法,但是得到的应该是最优解,2楼说不是,那请举例。
Louix 2007-11-22
  • 打赏
  • 举报
回复
楼上给出的不是最优解,只能说算的比较快。
qzy6 2007-11-22
  • 打赏
  • 举报
回复
设记录条数为n, 业务员人数为 m

1、初始化各业务员的当前总金额全为0 ;将记录按“金额”从大到小排序,得到序列list

2、若list为null,转至步骤4; 否则,取list前m 条,按序分派给各业务员,金额加入各业务员的当前金额中。将该m条记录从list中移去。

3、业务员按当前总金额按从小到大排序。 转至步骤2。

4、输出各业务员拿到的纪录。

时间复杂度: O(nlog(m))
Tiger_Zhao 2007-11-22
  • 打赏
  • 举报
回复
如果允许在某个偏差范围内,那么直接将n条纪录平均分配给m个业务员,在高于和低于平均金额的业务员之间交换客户应该可以求得近似解。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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