当前位置: 首页 > news >正文

【轮询负载均衡规则算法设计题】

一、题目描述

给定n台主机(编号1~n)和某批数据包,数据包格式为(抵达主机时刻,负载量)。这里数据每个时刻最多只有1条数据到达。负载量表示该主机处理此数据包总耗时。请计算轮询负载均衡规则下,哪些主机负载最高(即处理数据的负载量总和),升序输出主机编号。

二、说明

轮询负载均衡规则:如果3台主机均空闲,分配方案为1,2,3,1,2…。如果某主机繁忙,则跳过该主机;如果某条数据到达时所有主机均繁忙,则丢弃这条数据。

三、举例

输入
3
1 15
2 10
12 10
5 10
6 10
30 15
32 10
输出
1 3

四、算法

public int[] findHighestHost(int serverNum, Message[] messages) {Arrays.sort(messages, Comparator.comparingInt(m -> m.time));// times[i]表示第i台主机,下次可处理请求的时刻int[] times = new int[serverNum];// 初始值设置为1Arrays.fill(times, 1);// load[i]表示第i台主机的负载值int[] loads = new int[serverNum];// 轮询主机索引,从第1台主机开始int start = 0;for (Message message : messages) {boolean flag = false;int j = 0;for (int i = 0; i < serverNum; i++) {j = (start + i) % serverNum;if (times[j] <= message.time) {// 当前主机j下次可以处理请求的时刻值 <= 当前消息时刻值,满足处理条件times[j] = message.time + message.load;loads[j] += message.load;flag = true;// 找到满足条件的主机编号j后,直接跳出当前for循环,轮询寻找下次消息处理的主机编号break;}}// 轮询寻找下次主机编号if (flag) {start = (j + 1) % serverNum;}}// 找出最大负载结果List<Integer> ans = new ArrayList<>();ans.add(0);for (int i = 0; i < serverNum; i++) {if (loads[i] > loads[ans.get(0)]) {ans.clear();ans.add(i);} else if (loads[i] == loads[ans.get(0)]) {ans.add(i);}}// 由于主机编号从1开始,而ans中值从0开始,所以这里需要自增1return ans.stream().mapToInt(i -> i + 1).toArray();}static class Message {int time;int load;}
http://www.lryc.cn/news/377306.html

相关文章:

  • 张一鸣的产品哲学:与巨头共舞,低调中寻求突破
  • 【面试干货】throw 和 throws 的区别
  • 安卓手机删除的照片怎么恢复?3个方法,小技巧大作用
  • Unity制作背包的格子
  • 道可云元宇宙每日资讯|厦门:运用元宇宙技术助力直播电商发展
  • 电脑怎么卸载软件?多个方法合集(2024年新版)
  • 【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别
  • 面试技巧:正确回答JavaScript中Map和Object的选择问题
  • sd StableDiffusion库学习笔记
  • 【单片机毕业设计选题24017】-基于STM32的禽舍环境监测控制系统(蓝牙版)
  • 每天一个数据分析题(三百七十八)- 系统聚类
  • 守护系统稳定性的关键技术之看门狗
  • 【Linux】进程间通信上 (1.5万字详解)
  • 测试用例设计:提升测试覆盖率的策略与方法
  • 【微服务】什么是Hystrix?一文带你入门Hystrix
  • AI学习指南机器学习篇-支持向量机超参数调优
  • 掉电安全文件系统分析
  • React-Redux学习笔记(自用)
  • 【机器学习】:线性回归模型学习路线
  • C++设计模式——Flyweight享元模式
  • Github 2024-06-19 开源项目日报 Top10
  • 【ARM】如何通过Keil MDK查看芯片的硬件信息
  • elasticsearch的安装和配置
  • 华为云下Ubuntu20.04中Docker的部署
  • 1、C++编程中的基本运算 - 课件
  • Java动态代理详解
  • Python基础学习文档
  • 数据结构与算法笔记:基础篇 - 分治算法:谈一谈大规模计算框架MapReduce中的分治思想
  • 如何清除anaconda3缓存?
  • 智慧校园发展趋势:2024年及未来教育科技展望