`

权重算法实现

 
阅读更多
>>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实现

    现在我们将深入探讨Nginx权重选择算法的原理以及如何在Java中实现这一算法。 **Nginx权重选择算法** 1. **基本原理**: Nginx的WRR算法主要基于权重值来决定将请求转发到哪个后端服务器。权重值越大,服务器被...

    带权重的A*算法C++、CMake实现

    在给定的“带权重的A*算法C++、CMake实现”中,我们可以深入探讨以下几个关键知识点: 1. **A*算法的核心思想**:A*算法的核心在于评估每个节点的f(n)值,该值由g(n)(从起点到当前节点的实际成本)和h(n)(从当前...

    粒子群改进蝙蝠算法的自适应权重算法

    本文主要关注的是“粒子群改进蝙蝠算法的自适应权重算法”。这种算法结合了两种著名的全局优化算法——粒子群优化(PSO)和蝙蝠算法(Bat Algorithm),并引入了自适应权重机制,以提升其在搜索过程中的效率和精度。...

    惯性权重和学习因子动态调整的改进粒子群算法的MATLAB代码实现

    在本文中,我们将深入探讨基于MATLAB实现的“惯性权重和学习因子动态调整的改进粒子群算法”(Improved Particle Swarm Optimization, IPSO)。粒子群优化(PSO)是一种受到鸟类群体行为启发的全局优化算法,它通过...

    CNN算法中BP算法权重调整过程

    为了实现这个目标,我们使用梯度下降法,通过反向传播不断调整网络的权重和阈值,使网络的误差平方和最小。具体来说,我们可以使用以下公式来计算每层的误差信号: δz = (z - y) \* activation'(y) δy = W2^T \* ...

    在MATLAB中采用RLS算法实现FIR自适应滤波器

    ### 在MATLAB中采用RLS算法实现FIR自适应滤波器 #### 1. 引言 在自适应信号处理领域,FIR(Finite Impulse Response)滤波器因其线性相位特性以及易于设计的特点被广泛使用。在众多自适应滤波器算法中,递归最小...

    自适应权重粒子群算法

    #### 四、算法实现细节 1. **初始化**:设定粒子的数量N,维度D,以及初始的速度范围[Vmin, Vmax]和位置范围[Xmin, Xmax]。同时,初始化每个粒子的位置和速度。 2. **评估与更新**: - 对于每个粒子i (i = 1, 2, ...

    利用遗传算法(GA)做权重优化的MATLAB代码(等式约束)

    遗传算法(Genetic Algorithm, GA)是一种模拟自然选择和遗传机制的优化算法,广泛应用于解决各种复杂的优化问题,包括权重优化。在这个MATLAB代码实例中,我们主要关注如何利用遗传算法来寻找权重的最佳配置,同时...

    matlab_GA训练BP网络的权重算法

    用户可以通过编写MATLAB脚本来实现GA训练BP网络的权重算法,结合这两个工具箱的功能,可以高效地解决复杂优化问题。 总结来说,"matlab_GA训练BP网络的权重算法"是利用遗传算法改进反向传播神经网络的权重学习过程...

    QEM三位网格精简算法实现

    首先,QEM算法的实现始于构建一个权重矩阵,其中的每个元素表示一对边之间的相对重要性。这个矩阵可以通过计算每条边对模型总体能量的影响来生成,能量通常与边的曲率和长度有关。曲率大的边对模型的形状影响较大,...

    IDE反距离加权插值算法JS实现

    反距离加权算法js的实现,

    粒子群算法惯性权重.7z

    在压缩包中的源代码,可能包含了使用MATLAB编写的PSO算法实现,包括初始化粒子群、计算适应度函数、更新粒子的位置和速度等步骤,并且特别关注了惯性权重W的动态调整策略。 在实际应用中,选择合适的惯性权重策略...

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

    Java 实现的权重算法主要应用于广告展示场景,其目的是根据广告的权重来决定广告的展现概率,确保高权重的广告有更高的几率被用户看到。这种算法通常用于优化用户体验和提高广告效益。 首先,我们理解算法的基本...

    KrigingCore_java_克里金插值算法实现_克里金算法_

    在给定的Java项目“KrigingCore_java_克里金插值算法实现”中,开发者提供了一个开源的实现,让我们深入探讨一下克里金插值的基本原理和这个Java实现的关键部分。 **1. 克里金插值原理** 克里金插值由南非矿业...

    基于PSO 面向K近邻分类的特征权重学习算法.pdf

    ### 基于PSO面向K近邻分类的特征权重学习算法 #### 一、引言 K近邻(K-Nearest Neighbors, KNN)分类作为一种基础且实用的分类方法,在模式识别与数据挖掘领域有着广泛的应用。该算法的核心在于通过测量不同特征空间...

    优化的动态平均权重算法及其在色谱信号处理中的应用.docx

    ### 优化的动态平均权重算法及其在色谱信号处理中的应用 #### 摘要与背景 液相色谱作为一种重要的分析技术,在生物化学、医药、环境监测等多个领域都有着广泛的应用。在液相色谱检测系统中,朗伯-比尔定律被用来...

    哈弗曼算法及其实现

    #### C语言中的哈弗曼算法实现 在给定的部分代码中,我们可以看到哈弗曼树的基本结构定义,以及如何通过一系列函数实现哈弗曼树的创建与编码。以下是对关键部分的解读: 1. **哈弗曼树节点定义**: - `hftree` ...

Global site tag (gtag.js) - Google Analytics