你如何用c ++实现分配策略

时间:2015-01-03 03:31:59

标签: c++ stl

我有两个工人。如果我配置了一个策略,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;    
}

1 个答案:

答案 0 :(得分:1)

如果您在谈论任务的数量而不考虑复杂性,只需记下每个任务分配的工作数。让我们为分配给countA的作业调用这些计数A,并为作业的总数调用count,并将它们初始化为零。 / p>

然后,当作业进入时,按以下方式分配:

  • 如果count等于零,请将其分配到A并增加countAcount
  • 否则,如果countA / count小于0.6,请将其分配到A并同时增加countAcount
  • 否则将其分配给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

......等等。