首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现最大并行化(数据结构和算法)

实现最大并行化(数据结构和算法)
EN

Stack Overflow用户
提问于 2020-12-03 11:36:03
回答 1查看 40关注 0票数 0

我在一次关于极客的面试经历中看到了这个问题。

您将获得具有以下属性的数据列表:启动时间、Rest Api名称/服务名称、结束时间。您需要找到实现的最大并行性。{1,A,4},{2,B,3},{4,C,10},{4,D,7},{2,E,4}。这里的答案是4,因为在时间t=4中,分别有4个服务在运行,即A、C、D、E。

我处理这个问题的方法是在开始时对所有服务进行排序(如果启动时间相等,那么根据完成时间进行排序。那么,如果有人能提出解决这个问题的有效方法,那么对于每一个过程来说,与其他过程相比都是很好的。

EN

回答 1

Stack Overflow用户

发布于 2020-12-03 12:44:06

如果最大时间是合理的低

(完全未经测试)

代码语言:javascript
复制
std::array<int, MaxTime+1> start;
std::array<int, MaxTime+1> end;
start.fill(0);
end.fill(0);
for(auto & service : services) {
  start[service.start]++;
  end[service.end]++;
}
int maxtime = -1;
int pos = 0;
int maxsum = 0;
std::inner_product(start.begin(),start.end(),end.begin(),0,
     [](int sum, int diff) { sum += diff; if (sum > maxsum) { maxtime = pos } ++pos; }, 
std::minus<int>())

应该是O(max(N,MaxTime))

如果时间是高的或者N是低的,那么这样的事情你可能会更好

代码语言:javascript
复制
sort(starttime)
sort(endtime)

par = 0
while(starttime)
  par++
  while (endtime < next(starttime))
    par--
  if (par > maxpar)
    maxpar = par
    time = starttime

O(NlgN)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65125227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档