在开发中需要用到后台多台机器的任务分配,最简单的方式当然是轮询,建立一个闭环就可以实现一直轮询。这里我想用一个随机算法,这样对于不同机器有权重就可以更方便的控制。但是会存在一定概率连续选择一个机器,这样会造成系统瞬间负载很高,所以我想做一个简单的随机算法能不连续选择一个值,这样最坏的情况也是单节点50%的总负载。

最简单的随机,就是给你一个长度为size的list数组,你每次选取list[(int) (size*random)]就可以了。

但我的想法和轮询的思路更接近,我们同样把数值视为闭环,为了防止下次会选择上一次的节点,那么每次选取就从上一次选中节点的下一个开始,随机步长为(size - 1) * random,这样就在上一次节点上加上这个随机步长即可。最后这个公式就是list[lastindex + 1 + (int) ((size - 1) * random)]。

如果需要对不同机器设置权重,就可以对每个节点的数值范围加大,比如节点1权重是10,节点2权重是5,那么节点1的值域就是1到10,节点2的值域就是11到15,然后随机就从1到15之间取即可。

其实这个小算法主要是开拓一下思路,但是也不能避免瞬间负载很高的情况,只能算是对简单随机的一种粗略优化。

本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/521680,如需转载请自行联系原作者

无连续重复的随机算法相关推荐

  1. 微信红包的随机算法是怎样实现的

    2019独角兽企业重金招聘Python工程师标准>>> 微信红包的随机算法是怎样实现的? RT.我考虑了一个简单的算法: 比如100元,由10个人分,那么平均一个人是10元钱.然后付 ...

  2. 机器学习之无监督学习-K均值聚类算法

    机器学习之无监督学习-K均值聚类算法 对于无监督学习,有两类重要的应用,一个是聚类,一个是降维.我们今天主要学习聚类中的K均值聚类. 我们先看看下图,图a为原始的数据点,我们想要对图a的数据点进行分类 ...

  3. labuladong的算法小抄pdf_随机算法:水塘抽样算法

    读完本文,你可以去力扣拿下如下题目: 382.链表随机节点 398.随机数索引 -----------我最近在 LeetCode 上做到两道非常有意思的题目,382 和 398 题,关于水塘抽样算法( ...

  4. nonce值是什么?(Number once)(Number used once)cnonce(client nonce)(一个只被使用一次的任意或非重复的随机数值)

    Nonce是Number once的缩写,在密码学中Nonce是一个只被使用一次的任意或非重复的随机数值. 具体应用 在摘要认证中服务器让客户选一个随机数(称作"nonce"),然 ...

  5. Randomized algorithms(随机算法)

    随机算法是由一个雇佣问题引出的: 假如你要雇佣一名新的办公室助理,但是你先前的雇佣尝试都失败了,你打算找一个雇佣代理.雇佣代理每天给你推荐一个应聘者.你面试这个人,然后决定是否雇佣他,同时你需要付给雇 ...

  6. 1.1 生日悖论+1.2快速排序+1.3字符串比较+1.4 随机算法+1.5 定理+1.6 抽样

    文章目录 1.1 生日悖论 1.2快速排序 1.3字符串比较 suiji算法 总结 1.4 随机算法 证明 因为 end 总结啊哈哈哈哈哈哈 1.5 定理 定理1.1Markov不等式 定理1.2Ch ...

  7. 前端实现红包雨功能_最全解密微信红包随机算法(含代码实现)

    code小生 一个专注大前端领域的技术平台公众号回复 Android加入安卓技术群 "  1.引言 这个系列文章已经整理了10篇,但都没有涉及到具体的红包算法实现,主要有以下两方面原因.一方 ...

  8. 游戏中常用的伪随机算法之PRD暴击算法

    游戏中常用的伪随机算法之PRD暴击算法 PRD伪随机算法常用于游戏中的暴击算法,因此本文的标题将其称为 PRD暴击算法. 诞生与应用 PRD算法诞生与<魔兽争霸3>,可以说其诞生就是为了解 ...

  9. 算法设计技巧与分析(八):随机算法(Randomized Algorithms)

    文章目录 随机算法(Randomized Algorithms) 一.随机选择(Randomized Selection) 二.测试字符串相等性(Testing String Equality) 三. ...

最新文章

  1. pythonWeb UI自动化最流行的工具 解放双手 双手打字以示清白!
  2. 每日一道面试题(第7期)---Android补间动画与属性动画的区别
  3. c语言 swap交换函数_C语言经典100题(14)
  4. 软考-网络总结-协议
  5. php preg_replace 正则替换图片路径
  6. Tomcat - Tomcat 8.5.55 启动过程源码分析阶段一_init实例化Bootstrap
  7. c# 两个list比较_C#刷遍Leetcode面试题系列连载(1) 入门与工具简介(VS Code amp; VS)...
  8. 大数据背后是个万亿市场
  9. Redis的6种数据类型
  10. 飞鸽传书:HTML界面也有它欠缺的方面
  11. java基础面试题总结
  12. [李景山php]每天TP5-20161206|Loader.php-4
  13. 高分GF与环境HJ系列国产卫星遥感影像数据图像免费批量下载方法
  14. wifi信号衰减与距离关系_wifi无线信号传输衰减间隔核算公式
  15. 我们项目组的Team Building
  16. 增量式编码器和绝对式编码器
  17. python列表两两相减_笨办法学python(二)数值、变量以及运算
  18. 危机管理应遵循哪些原则?
  19. 转载:深入学习java源码之Callable.call()与Future.get()
  20. 百度与虚假广告的博弈

热门文章

  1. 如何彻底删除nginx
  2. Tomcat和Weblogic的区别
  3. 力扣题目——102. 二叉树的层序遍历
  4. 【SQL】CONNECT BY 层次化查询
  5. 【Oracle】查看用户的信息(状态、默认表空间等)
  6. Docker-compose编排微服务顺序启动解决方案
  7. RestTemplate异常no suitable HttpMessageConverter found for request type [java.lang.Integer]
  8. 应用栈解决迷宫问题的C语言实现
  9. jmeter(十三)常见问题及解决方法
  10. C ++标准是否允许未初始化的bool使程序崩溃?