栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

基本算法描述如下:

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 {

  
  @SuppressWarnings("unchecked")
  public static void main(String[] args) {
    
    List arrNodes = new ArrayList();
    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 showMap = null;
    int sum = getSum(arrNodes);
    int random = 0;
    Node kw = null;
    for(int k = 0; k < 20; k++) {
      showMap = new linkedHashMap();
      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 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 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;
  }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/151664.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号