zoukankan      html  css  js  c++  java
  • 一个按权重(weight)进行LB的算法

    package netty;
    
    import com.google.common.collect.ImmutableList;
    import lombok.SneakyThrows;
    
    import java.util.List;
    import java.util.Objects;
    import java.util.Random;
    
    /**
     * Test
     *
     * @author xfyou
     */
    public class Test {
    
      @SneakyThrows
      public static void main(String[] args) {
        List<Integer> weightList = ImmutableList.of(0, 0, 0, 0);
        boolean allHaveTheSameWeight = isSameWeight(weightList);
        if (!allHaveTheSameWeight) {
          selectOneByWeight(weightList);
        } else {
          selectOneRandom(weightList);
        }
      }
    
      /**
       * 如果所有的权重都是一样的,则随机选择一个
       */
      private static void selectOneRandom(List<Integer> weightList) {
        System.out.println("selecded list index:" + new Random().nextInt(weightList.size()));
      }
    
      /**
       * 如果所有的权重不一样,则优化选择权重高的
       */
      private static void selectOneByWeight(List<Integer> weightList) {
        int offset = new Random().nextInt(weightList.stream().mapToInt(i -> i).sum());
        for (int i = 0, len = weightList.size(); i < len; i++) {
          offset -= weightList.get(i);
          if (offset < 0) {
            System.out.println("selected weight:" + weightList.get(i) + ", selected index:" + i);
            break;
          }
        }
      }
    
      /**
       * 判断所有的权重是否一样
       */
      private static boolean isSameWeight(List weightList) {
        boolean allHaveTheSameWeight = true;
        for (int i = 0, len = weightList.size(); i < len; i++) {
          if (i > 0) {
            if (!Objects.equals(weightList.get(i), weightList.get(i - 1))) {
              allHaveTheSameWeight = false;
              break;
            }
          }
        }
        return allHaveTheSameWeight;
      }
    
    }
  • 相关阅读:
    [BZOJ3195] [Jxoi2012]奇怪的道路
    Splay Tree
    区间DP复习
    Link Cut Tree
    [BZOJ2734] [HNOI2012]集合选数
    如何写出杀手级简历(针对程序员) (转)
    30个提高Web程序执行效率的好经验(转)
    Oracle中的SQL跟踪( 转)
    如何终止SQL Server中的用户进程(转)
    Will the real programmers please stand up?(转)
  • 原文地址:https://www.cnblogs.com/frankyou/p/11435427.html
Copyright © 2011-2022 走看看