国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java實現的權重算法(按權重展現廣告)

2019-11-26 15:12:29
字體:
來源:轉載
供稿:網友

基本算法描述如下:

1、每個廣告增加權重
2、將所有匹配廣告的權重相加sum,
3、以相加結果為隨機數的種子,生成1~sum之間的隨機數rd
4、.接著遍歷所有廣告,訪問順序可以隨意.將當前節點的權重值加上前面訪問的各節點權重值得curWt,判斷curWt >=  rd,如果條件成立則返回當前節點,如果不是則繼續累加下一節點. 直到符合上面的條件,由于rd<=sum 因此一定存在curWt>=rd。
特別說明:

此算法和廣告的順序無關

import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;public class Test {  /**   * @param args   */  @SuppressWarnings("unchecked")  public static void main(String[] args) {        List<Node> arrNodes = new ArrayList<Node>();    Node n = new Node(10, "測試1");    arrNodes.add(n);    n = new Node(20, "測試2");    arrNodes.add(n);    n = new Node(30, "測試3");    arrNodes.add(n);    n = new Node(40, "測試4");    arrNodes.add(n);        //Collections.sort(arrNodes, new Node());    Map<String, Integer> showMap = null;    int sum = getSum(arrNodes);    int random = 0;    Node kw = null;    for(int k = 0; k < 20; k++) {      showMap = new LinkedHashMap<String, Integer>();      for(int i = 0; i < 100; i++) {        random = getRandom(sum);        kw = getKW(arrNodes, random);        if(showMap.containsKey(kw.kw)) {          showMap.put(kw.kw, showMap.get(kw.kw) + 1);        } else {          showMap.put(kw.kw, 1);        }        //System.out.println(i + " " +random + " " + getKW(arrNodes, random));      }      System.out.print(k + " ");      System.out.println(showMap);    }  }    public static Node getKW(List<Node> nodes, int rd) {    Node ret = null;    int curWt = 0;    for(Node n : nodes){      curWt += n.weight;      if(curWt >= rd) {        ret = n;        break;      }    }    return ret;  }  public static int getSum(List<Node> nodes) {    int sum = 0;    for(Node n : nodes)      sum += n.weight;    return sum;  }  public static int getRandom(int seed) {    return (int)Math.round(Math.random() * seed);  }}class Node implements Comparator{  int weight = 0;  String kw = "";    public Node() {}    public Node(int wt, String kw) {    this.weight = wt;    this.kw = kw;  }  public String toString(){    StringBuilder sbBuilder = new StringBuilder();    sbBuilder.append(" weight=").append(weight);    sbBuilder.append(" kw").append(kw);    return sbBuilder.toString();  }  public int compare(Object o1, Object o2) {    Node n1 = (Node)o1;    Node n2 = (Node)o2;    if(n1.weight > n2.weight)      return 1;    else       return 0;  }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卓尼县| 临江市| 阿城市| 堆龙德庆县| 锦屏县| 柯坪县| 湘乡市| 饶阳县| 日喀则市| 田东县| 永仁县| 孟连| 阿尔山市| 武冈市| 沂源县| 红河县| 许昌市| 四子王旗| 镇坪县| 洪江市| 苍南县| 柏乡县| 兴山县| 新和县| 陆丰市| 林甸县| 巴青县| 太原市| 莲花县| 桂阳县| 广州市| 铅山县| 霞浦县| 宿州市| 金寨县| 阜城县| 大丰市| 镇坪县| 霍城县| 泗水县| 隆昌县|