欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)的權(quán)重算法(按權(quán)重展現(xiàn)廣告)

 更新時(shí)間:2015年04月28日 10:02:54   投稿:junjie  
這篇文章主要介紹了Java實(shí)現(xiàn)的權(quán)重算法(按權(quán)重展現(xiàn)廣告),本文講解了算法實(shí)現(xiàn)原理和實(shí)現(xiàn)代碼,需要的朋友可以參考下

基本算法描述如下:

1、每個(gè)廣告增加權(quán)重
2、將所有匹配廣告的權(quán)重相加sum,
3、以相加結(jié)果為隨機(jī)數(shù)的種子,生成1~sum之間的隨機(jī)數(shù)rd
4、.接著遍歷所有廣告,訪問(wèn)順序可以隨意.將當(dāng)前節(jié)點(diǎn)的權(quán)重值加上前面訪問(wèn)的各節(jié)點(diǎn)權(quán)重值得curWt,判斷curWt >=  rd,如果條件成立則返回當(dāng)前節(jié)點(diǎn),如果不是則繼續(xù)累加下一節(jié)點(diǎn). 直到符合上面的條件,由于rd<=sum 因此一定存在curWt>=rd。
特別說(shuō)明:

此算法和廣告的順序無(wú)關(guān)

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, "測(cè)試1");
    arrNodes.add(n);
    n = new Node(20, "測(cè)試2");
    arrNodes.add(n);
    n = new Node(30, "測(cè)試3");
    arrNodes.add(n);
    n = new Node(40, "測(cè)試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;
  }
}

相關(guān)文章

  • Java抽象類與接口區(qū)別詳解

    Java抽象類與接口區(qū)別詳解

    這篇文章主要介紹了Java抽象類與接口區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • springboot啟動(dòng)后和停止前執(zhí)行方法示例詳解

    springboot啟動(dòng)后和停止前執(zhí)行方法示例詳解

    這篇文章主要介紹了springboot啟動(dòng)后和停止前執(zhí)行方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • java回溯算法解數(shù)獨(dú)問(wèn)題

    java回溯算法解數(shù)獨(dú)問(wèn)題

    這篇文章主要為大家詳細(xì)介紹了java回溯算法解數(shù)獨(dú)問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 一文詳解如何使用線程池來(lái)優(yōu)化我們的應(yīng)用程序

    一文詳解如何使用線程池來(lái)優(yōu)化我們的應(yīng)用程序

    線程池是一種工具,但并不是適用于所有場(chǎng)景。在使用線程池時(shí),我們需要根據(jù)應(yīng)用程序的性質(zhì)、計(jì)算資源的可用性和應(yīng)用程序的需求進(jìn)行適當(dāng)?shù)呐渲谩1疚闹饕榻B了如何使用線程池來(lái)優(yōu)化我們的應(yīng)用程序,需要的可以參考一下
    2023-04-04
  • Spring?Boot?Reactor?整合?Resilience4j詳析

    Spring?Boot?Reactor?整合?Resilience4j詳析

    這篇文章主要介紹了Spring?Boot?Reactor整合Resilience4j詳析,文章通過(guò)引入pom包展開(kāi)詳細(xì)介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • java基礎(chǔ)實(shí)現(xiàn)猜數(shù)字小游戲

    java基礎(chǔ)實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了java基礎(chǔ)實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解如何用Java去除HTML標(biāo)簽

    詳解如何用Java去除HTML標(biāo)簽

    在平時(shí)工作中,偶爾會(huì)用 Java 做一些解析HTML的工作。有時(shí)需要?jiǎng)h除所有的HTML標(biāo)簽,只保留純文字內(nèi)容。這個(gè)問(wèn)題在做過(guò)一些爬蟲(chóng)工作的朋友來(lái)說(shuō)很簡(jiǎn)單。下面來(lái)說(shuō)說(shuō),我們平時(shí)使用到的集中解析的方法
    2022-12-12
  • ScheduledThreadPoolExecutor巨坑解決

    ScheduledThreadPoolExecutor巨坑解決

    這篇文章主要為大家介紹了使用ScheduledThreadPoolExecutor遇到的巨坑解決示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • SpringBoot優(yōu)化連接數(shù)的方法詳解

    SpringBoot優(yōu)化連接數(shù)的方法詳解

    SpringBoot開(kāi)發(fā)最大的好處是簡(jiǎn)化配置,內(nèi)置了Tomcat,下面這篇文章主要給大家介紹了關(guān)于SpringBoot優(yōu)化連接數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Spring 中優(yōu)雅的獲取泛型信息的方法

    Spring 中優(yōu)雅的獲取泛型信息的方法

    這篇文章主要介紹了Spring 中優(yōu)雅的獲取泛型信息的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論