当前位置:   article > 正文

java map权重_Java实现的权重算法(按权重展现广告)

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 {

/**

* @param args

*/

@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;

}

}

总结

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/289182
推荐阅读
相关标签
  

闽ICP备14008679号