原文地址:http://www.blogjava.net/willpower88/archive/2010/08/31/330437.html
需求:广告按权重展现
基本算法描述如下:
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;
}
}
分享到:
相关推荐
Ngnix权重选择算法Java实现,如果对Ngnix有兴趣的话可以下载下来看一下
带权重的A*算法C++、CMake实现
实现合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序算法的java实现。
主要介绍了Java实现的权重算法(按权重展现广告),本文讲解了算法实现原理和实现代码,需要的朋友可以参考下
反距离加权算法js的实现,
根据粒子群相关改进论文编辑,内部包含粒子群算法源码、改进后粒子群算法代码、测试函数集合文件改进文献来源,两种算法均已编辑为函数模式方便进行对比,亲测可用,可用作论文写作中算法对比。
提出一种选择性样本权重更新算法 ,把 FNR和 FPR引入样本权重更新过程 ,将分类效果反馈给分类器,实现对分类器结构的有效控制 ,在样本权重更新时合理选择更新方法 ,使得分类器的 FNR或 FPR达到理想状态。实验表明 ,该...
在特定点插值,可以修改权重及搜索点数等参数
线性权重粒子群算法
基于指数权重算法的铁路互联网售票异常用户智能识别的研究与实现.pdf
自适应权重的粒子群算法,实现复杂问题的有效求解
基于深度学习的权重自适应的图像去噪算法matlab实现版本
关键路径的算法设计与实现,c语言,可运行.....
PreFixSpan算法是另一个序列模式挖掘算法,在算法的过程中不会产生候选集,给定初始前缀模式,不断的通过后缀模式中的元素转到前缀模式中,而不断的递归挖掘下去。详细介绍链接 CBA 基于关联规则分类算法。CBA算法...
标准粒子群算法在MATLAB中的实现。其主要思想是根据带惯性权重w的PSO算法实现。
动态惯性权重粒子群算法研究与实现.pdf
简单实现tfidf算法,tfidf算法大家众所周知,就是用来计算词的权重的
针对传统的协同过滤算法在近邻选择环节中没有考虑评分矩阵中的评分是否准确和邻居用户对目标用户真实的推荐贡献能力,导致了近邻选择的不准确的问题,提出了一种融合调和用户熵权重和矩阵分解的推荐算法。算法首先利用...
五子棋AI算法-极大极小值搜索算法代码实现;适合学习机器学习算法的初学者,学完后会对极大极小值搜索算法( Alpha Beta 剪枝算法。)有更深的理解。