Java实现的权重算法(按权重展现广告)

Java实现的权重算法(按权重展现广告),第1张

概述基本算法描述如下:1、每个广告增加权重2、将所有匹配广告的权重相加sum,3、以相加结果为随机数的种子,生成1~sum之间的随机数rd

基本算法描述如下:

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;  }}
总结

以上是内存溢出为你收集整理的Java实现的权重算法(按权重展现广告)全部内容,希望文章能够帮你解决Java实现的权重算法(按权重展现广告)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1207729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存