我有两个工人。如果我配置了一个策略,60%的任务分配给一个工人,其余的分配给B工人。
如何使用c ++实现。
你的建议是什么?map<string,float> m_percent;
m_percent.insert(make_pair("countA",0.6));
m_percent.insert(make_pair("countB",0.1));
m_percent.insert(make_pair("countC",0.3));
map<string,int> m_count;
m_count.insert(make_pair("total",0));
map<string,int>::iterator it = m_count.find("countA");
map<string,int>::iterator itc =m_count.find("total");
map<string,float>::iterator itp=m_percent.find("countA");
if(it== m_count.end())//use countA
{
m_count.insert(make_pair("countA",1));
}
else
{
int &c = it->second;
if(itc!=m_count.end()&&itp!=m_percent.end())
{
float f=(c+1)*100/(itc->second+1)*100.0
if (f<=itp->second)
{
it->second=it->second+1;
}
}
}
if(itc!=m_count.end())
{
itc->second=itc->second+1;
}
答案 0 :(得分:1)
如果您在谈论任务的数量而不考虑复杂性,只需记下每个任务分配的工作数。让我们为分配给countA
的作业调用这些计数A
,并为作业的总数调用count
,并将它们初始化为零。 / p>
然后,当作业进入时,按以下方式分配:
count
等于零,请将其分配到A
并增加countA
和count
。countA / count
小于0.6
,请将其分配到A
并同时增加countA
和count
。B
,只需增加count
。从长远来看,这将使分配平均,以使A
得到60%:
countA count countA/count allocateTo
------ ----- ------------ ----------
0 0 ? A
1 1 1.000 B
1 2 0.500 A
2 3 0.667 B
2 4 0.500 A
3 5 0.600 B
3 6 0.500 A
4 7 0.571 A
5 8 0.625 B
5 9 0.556 A
6 10 0.600 B
6 11 0.545 A
7 12 0.583 A
8 13 0.615 B
8 14 0.571 A
9 15 0.600 B
9 16 0.563 A
10 17 0.588 A
11 18 0.611 B
11 19 0.579 A
12 20 0.600
......等等。