无连续重复的随机算法

简介:

  在开发中需要用到后台多台机器的任务分配,最简单的方式当然是轮询,建立一个闭环就可以实现一直轮询。这里我想用一个随机算法,这样对于不同机器有权重就可以更方便的控制。但是会存在一定概率连续选择一个机器,这样会造成系统瞬间负载很高,所以我想做一个简单的随机算法能不连续选择一个值,这样最坏的情况也是单节点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月前
leetcode代码记录(最长连续递增序列
leetcode代码记录(最长连续递增序列
17 2
|
1月前
|
算法 测试技术 C#
【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目
【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目
|
1月前
|
算法 测试技术 C++
【动态规划】【C++算法】801. 使序列递增的最小交换次数
【动态规划】【C++算法】801. 使序列递增的最小交换次数
|
1月前
|
算法 测试技术 C#
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
【滑动窗口】【差分数组】C++算法:K 连续位的最小翻转次数
|
6月前
|
算法 测试技术 C#
C++前缀和算法的应用:得到连续 K 个 1 的最少相邻交换次数 原理源码测试用例
C++前缀和算法的应用:得到连续 K 个 1 的最少相邻交换次数 原理源码测试用例
|
6月前
|
算法 测试技术 C#
C++单调向量算法:得到山形数组的最少删除次数
C++单调向量算法:得到山形数组的最少删除次数
|
11月前
|
Cloud Native Go
801. 使序列递增的最小交换次数:动态规划
这是 力扣上的 801. 使序列递增的最小交换次数,难度为 困难。
|
人工智能 算法 JavaScript
最长连续不重复的序列
最长连续不重复的序列
|
算法
【12. 最大连续不重复子序列】
. 最大连续不重复子序列
101 0
【12. 最大连续不重复子序列】
|
算法
重温算法之最长连续序列
连续序列系列的题目也很多,我大概看了一下,解决方案里动态规划用得很多还有就是借助哈希表去实现,只能说题友们的思路真的很好,还有就是也应该尝试一下写出最优解。
130 0
重温算法之最长连续序列

热门文章

最新文章