程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java完成的權重算法(按權重展示告白)

Java完成的權重算法(按權重展示告白)

編輯:關於JAVA

Java完成的權重算法(按權重展示告白)。本站提示廣大學習愛好者:(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<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;
  }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved