- 浏览: 10015 次
- 性别:
- 来自: 北京
最新评论
-
fangqi2218133:
这个听起来很简单啊,只需要重写spring加载配置项的bean ...
spring远程加载spring配置文件--问题 -
coolboyysy:
你用redis,不如直接访问内存,更高效redis还的磁盘读写 ...
类淘宝橱窗web应用设计1 -
coolboyysy:
模糊的需求,稀缺的经验,坑爹的接口,天真的设计。最终结果,必然 ...
类淘宝橱窗web应用设计问题 -
coolboyysy:
基本概念应该是 观察者模式Observer Pattern至于 ...
类淘宝橱窗web应用设计问题 -
coolboyysy:
首先,你不可能每次用户来访问你的时候 你都用JSP去连接口取数 ...
类淘宝橱窗web应用设计问题
package com.mytest;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.apache.commons.lang3.StringUtils;
class MsgChannel implements Serializable{
private static final long serialVersionUID = 1895082597124213342L;
private String id;
private String name;
private String signName;
private int status;//状态
private int priority;//权重
private Map<String,String> paramMap = new HashMap<>();
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSignName() {
return signName;
}
public void setSignName(String signName) {
this.signName = signName;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public void addParam(String key,String value){
paramMap.put(key,value);
}
public String getParam(String key){
String s= paramMap.get(key);
return s==null?"":s;
}
public int getParamInt(String key){
String v = paramMap.get(key);
if(StringUtils.isBlank(v)){
return 0;
}
try{
return Integer.parseInt(v);
}catch(Exception e){
return 0;
}
}
public Map<String, String> getParamMap() {
return paramMap;
}
public void setParamMap(Map<String, String> paramMap) {
this.paramMap = paramMap;
}
/**
* @return the priority
*/
public int getPriority() {
return priority;
}
/**
* @param priority the priority to set
*/
public void setPriority(int priority) {
this.priority = priority;
}
}
/**
* @author coolboyysy [coolboyysy @126.com]
* @since 15-3-6
*/
public class RandomAverageUtil {
/**
* 通过权值来获取渠道id
* 算法: 例如权值为1,2,3,5 则总权值为11 ,分为4档,[1][2-3][4-6][7-11]随机抽取11内自然数,落在哪个区间内就只该权值的值,随机命中率为1/11,2/11,3/11,5/11。
* 即便是权值均等,此方法也一样适用。
* 特点:时间复杂度为T(n) = O(n)
* 使用累计方法获取对应的channel,例如:11的总权值,我随机抽到7,则比对,0+1,0+1+2,0+1+2+3,0+1+2+3+5四次,在第四次获取到的即为选中的channel
* @param channels
* @return
*/
public static MsgChannel getSpecialChannel(List<MsgChannel> channels){
MsgChannel luckChannel = null;
if(null!=channels&&channels.size()>0){
int totalrate = 0;
for (MsgChannel channel:channels) {
totalrate = totalrate+channel.getPriority();
}
if(totalrate==0){
int index = (int) (Math.random() * channels.size());
luckChannel = channels.get(index);
return luckChannel;
}
int hitnumber = new Random().nextInt(totalrate);
int tmp_total = 0;
for (MsgChannel channel:channels) {
tmp_total += channel.getPriority();
if (tmp_total >= hitnumber) {
luckChannel = channel;
break;
}
}
}
return luckChannel;
}
/**
* 通过权值来获取渠道id
* 算法: 例如权值为1,2,3,5 则总权值为11 ,分为11档,填入[0-11)内自然数,随机取值,随机命中率为1/11,2/11,3/11,5/11。
* 即便是权值均等,此方法也一样适用。
* 特点:时间复杂度为T(n) = O(n^2)
* 使用累计方法获取对应的channel,例如:11的总权值,我随机抽到7,则直接取得7对应的channel
* @param channels
* @return
*/
public static MsgChannel getLuckyChannel(List<MsgChannel> channels){
MsgChannel luckChannel = null;
if(null!=channels&&channels.size()>0){
int totalrate = 0;
Map<Integer,MsgChannel> map = new HashMap<>();
for (MsgChannel channel:channels) {
for (int j = totalrate; j < totalrate+channel.getPriority(); j++) {
map.put(j, channel);
}
totalrate += channel.getPriority();
}
if(totalrate==0){
int index = (int) (Math.random() * channels.size());
luckChannel = channels.get(index);
return luckChannel;
}
int hitnumber = new Random().nextInt(totalrate);
luckChannel = map.get(hitnumber);
}
return luckChannel;
}
/**
* 通过权值来获取渠道id
* 算法: 例如权值为1,2,3,5 则总权值为11 ,分为11档,在数组内填入[0-11)内自然数,map 中填入对应id的channel,随机取值,随机命中率为1/11,2/11,3/11,5/11。
* 即便是权值均等,此方法也一样适用。
* 特点:时间复杂度为T(n) = O(n^2+1)
* 使用累计方法获取对应的channel,例如:11的总权值,我随机抽到7,则直接取得index为7对应的map中的channel
* @param channels
* @return
*/
public static MsgChannel getLuckChannel(List<MsgChannel> channels){
MsgChannel luckChannel = null;
if(null!=channels&&channels.size()>0){
int totalrate = 0;
int sum = 0;
for (MsgChannel channel:channels) {
sum += channel.getPriority();
}
if(sum==0){
int index = (int) (Math.random() * channels.size());
luckChannel = channels.get(index);
return luckChannel;
}
int[] temp = new int[sum];
Map<Integer,MsgChannel> map = new HashMap<>();
for (MsgChannel channel:channels) {
for (int j = totalrate; j < totalrate+channel.getPriority(); j++) {
temp[j]=j;
map.put(j, channel);
}
totalrate += channel.getPriority();
}
int index = (int) (Math.random() * temp.length);
luckChannel = map.get(index);
}
return luckChannel;
}
/**
* 通过权值来获取渠道id
* 算法: 例如权值为1,2,3,5 则总权值为11 ,分为11档,填入[0-11)内自然数为key的map中,随机取值,随机命中率为1/11,2/11,3/11,5/11。
* 即便是权值均等,此方法也一样适用。
* 特点:时间复杂度为T(n) = O(n^2)
* 使用累计方法获取对应的channel,例如:11的总权值,我随机抽到7,则直接取得index为7对应的map中的channel
* 但随机抽取方法是按时间来做,因此,随着系统时间的不同,会有不同的几率表现,在瞬时大规模时候,偏向其中几个。适合随着时间长度增加而进行的随机平均算法
* @param channels
* @return
*/
public static MsgChannel getTimeLuckChannel(List<MsgChannel> channels){
MsgChannel luckChannel = null;
if(null!=channels&&channels.size()>0){
int totalrate = 0;
Map<Integer,MsgChannel> map = new HashMap<>();
for (MsgChannel channel:channels) {
for (int j = totalrate; j < totalrate+channel.getPriority(); j++) {
map.put(j, channel);
}
totalrate += channel.getPriority();
}
if(totalrate>0){
int index = (int) (System.currentTimeMillis()%totalrate)+1;
luckChannel = map.get(index);
}else{
int index = (int) (Math.random() * channels.size());
luckChannel = channels.get(index);
}
}
return luckChannel;
}
/**
* 算术除法运算
* @param a
* @param b
* @return
*/
public static String devideNum(int a,int b){
if(b==0){
return String.valueOf(a);
}
BigDecimal bda = new BigDecimal(String.valueOf(a));
BigDecimal bdb = new BigDecimal(String.valueOf(b));
bda.setScale(5,BigDecimal.ROUND_HALF_UP);
bdb.setScale(5,BigDecimal.ROUND_HALF_UP);
BigDecimal res = bda.divide(bdb,5,BigDecimal.ROUND_HALF_UP);
double f =res.setScale(5,BigDecimal.ROUND_HALF_UP).doubleValue();
return String.format("%.2f", f);
}
/**
* Map排序算法
* @param map
*/
public static void sortMap(Map<MsgChannel, Integer> map){
List<Map.Entry<MsgChannel, Integer>> infoIds = new ArrayList<Map.Entry<MsgChannel, Integer>>(map.entrySet());
// 排序
Collections.sort(infoIds, new Comparator<Map.Entry<MsgChannel, Integer>>() {
public int compare(Map.Entry<MsgChannel, Integer> o1,Map.Entry<MsgChannel, Integer> o2) {
return (o1.getValue()-o2.getValue());
}
});
}
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int total = 0;
List<MsgChannel> channels = new ArrayList<MsgChannel>();
int channelNum = 5;
for (int i = 1; i <=channelNum; i++) {
MsgChannel channel = new MsgChannel();
channel.setId(String.valueOf(i));
channel.setName("第"+i+"个");
channel.setSignName("hello"+i);
channel.setParamMap(new HashMap<String,String>(i));
channel.setPriority( new Random().nextInt(200));
channels.add(channel);
}
for (MsgChannel channel: channels) {
total +=channel.getPriority();
System.out.println("channelid: "+channel.getId()+" 权值: "+channel.getPriority());
}
int loopnum = 1000;
Map<MsgChannel,Integer> hitmap1 = new HashMap<MsgChannel,Integer>();
Map<MsgChannel,Integer> hitmap2 = new HashMap<MsgChannel,Integer>();
Map<MsgChannel,Integer> hitmap3 = new HashMap<MsgChannel,Integer>();
Map<MsgChannel,Integer> hitmap4 = new HashMap<MsgChannel,Integer>();
long start1Time = System.currentTimeMillis();
for (int i = 0; i < loopnum; i++) {
MsgChannel channel1 = getSpecialChannel(channels);
if(null!=hitmap1.get(channel1)){
int num = hitmap1.get(channel1);
num =num+1;
hitmap1.put(channel1, num);
}else{
int num =1;
hitmap1.put(channel1, num);
}
}
System.out.println("第一个方法耗时:"+(System.currentTimeMillis()-start1Time)+"毫秒");
long start2Time = System.currentTimeMillis();
for (int i = 0; i < loopnum; i++) {
MsgChannel channel2 = getLuckyChannel(channels);
if(null!=hitmap2.get(channel2)){
int num = hitmap2.get(channel2);
num =num+1;
hitmap2.put(channel2, num);
}else{
int num =1;
hitmap2.put(channel2, num);
}
}
System.out.println("第二个方法耗时:"+(System.currentTimeMillis()-start2Time)+"毫秒");
long start3Time = System.currentTimeMillis();
for (int i = 0; i < loopnum; i++) {
MsgChannel channel3 = getLuckChannel(channels);
if(null!=hitmap3.get(channel3)){
int num = hitmap3.get(channel3);
num =num+1;
hitmap3.put(channel3, num);
}else{
int num =1;
hitmap3.put(channel3, num);
}
}
System.out.println("第三个方法耗时:"+(System.currentTimeMillis()-start3Time)+"毫秒");
long start4Time = System.currentTimeMillis();
for (int i = 0; i < loopnum; i++) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
MsgChannel channel4 = getTimeLuckChannel(channels);
if(null!=hitmap4.get(channel4)){
int num = hitmap4.get(channel4);
num =num+1;
hitmap4.put(channel4, num);
}else{
int num =1;
hitmap4.put(channel4, num);
}
}
System.out.println("第四个方法耗时:"+(System.currentTimeMillis()-start4Time)+"毫秒");
sortMap(hitmap1);
sortMap(hitmap2);
sortMap(hitmap3);
sortMap(hitmap4);
long endTime = System.currentTimeMillis();
System.out.println("总循环次数"+loopnum+" 总共耗时:"+(endTime-startTime)+"毫秒");
System.out.println("总权值数目:"+total);
for (MsgChannel channel: channels) {
System.out.println("channelid: "+channel.getId()+" 算术平均几率: "+devideNum(channel.getPriority()*100,total)+"% 权值: "+channel.getPriority());
}
for (MsgChannel channel:hitmap1.keySet()) {
if(null!=channel&&null!=hitmap3.get(channel)){
System.out.println("第一个方法: channelid: "+channel.getId()+" 几率: "+devideNum(hitmap1.get(channel)*100,loopnum)+"% 权值: "+channel.getPriority());
}
}
for (MsgChannel channel:hitmap2.keySet()) {
if(null!=channel&&null!=hitmap3.get(channel)){
System.out.println("第二个方法: channelid: "+channel.getId()+" 几率: "+devideNum(hitmap2.get(channel)*100,loopnum)+"% 权值: "+channel.getPriority());
}
}
for (MsgChannel channel:hitmap3.keySet()) {
if(null!=channel&&null!=hitmap3.get(channel)){
System.out.println("第三个方法: channelid: "+channel.getId()+" 几率: "+devideNum(hitmap3.get(channel)*100,loopnum)+"% 权值: "+channel.getPriority());
}
}
for (MsgChannel channel:hitmap4.keySet()) {
if(null!=channel&&null!=hitmap4.get(channel)){
System.out.println("第四个方法: channelid: "+channel.getId()+" 几率: "+devideNum(hitmap4.get(channel)*100,loopnum)+"% 权值: "+channel.getPriority());
}
}
}
}
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.apache.commons.lang3.StringUtils;
class MsgChannel implements Serializable{
private static final long serialVersionUID = 1895082597124213342L;
private String id;
private String name;
private String signName;
private int status;//状态
private int priority;//权重
private Map<String,String> paramMap = new HashMap<>();
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSignName() {
return signName;
}
public void setSignName(String signName) {
this.signName = signName;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public void addParam(String key,String value){
paramMap.put(key,value);
}
public String getParam(String key){
String s= paramMap.get(key);
return s==null?"":s;
}
public int getParamInt(String key){
String v = paramMap.get(key);
if(StringUtils.isBlank(v)){
return 0;
}
try{
return Integer.parseInt(v);
}catch(Exception e){
return 0;
}
}
public Map<String, String> getParamMap() {
return paramMap;
}
public void setParamMap(Map<String, String> paramMap) {
this.paramMap = paramMap;
}
/**
* @return the priority
*/
public int getPriority() {
return priority;
}
/**
* @param priority the priority to set
*/
public void setPriority(int priority) {
this.priority = priority;
}
}
/**
* @author coolboyysy [coolboyysy @126.com]
* @since 15-3-6
*/
public class RandomAverageUtil {
/**
* 通过权值来获取渠道id
* 算法: 例如权值为1,2,3,5 则总权值为11 ,分为4档,[1][2-3][4-6][7-11]随机抽取11内自然数,落在哪个区间内就只该权值的值,随机命中率为1/11,2/11,3/11,5/11。
* 即便是权值均等,此方法也一样适用。
* 特点:时间复杂度为T(n) = O(n)
* 使用累计方法获取对应的channel,例如:11的总权值,我随机抽到7,则比对,0+1,0+1+2,0+1+2+3,0+1+2+3+5四次,在第四次获取到的即为选中的channel
* @param channels
* @return
*/
public static MsgChannel getSpecialChannel(List<MsgChannel> channels){
MsgChannel luckChannel = null;
if(null!=channels&&channels.size()>0){
int totalrate = 0;
for (MsgChannel channel:channels) {
totalrate = totalrate+channel.getPriority();
}
if(totalrate==0){
int index = (int) (Math.random() * channels.size());
luckChannel = channels.get(index);
return luckChannel;
}
int hitnumber = new Random().nextInt(totalrate);
int tmp_total = 0;
for (MsgChannel channel:channels) {
tmp_total += channel.getPriority();
if (tmp_total >= hitnumber) {
luckChannel = channel;
break;
}
}
}
return luckChannel;
}
/**
* 通过权值来获取渠道id
* 算法: 例如权值为1,2,3,5 则总权值为11 ,分为11档,填入[0-11)内自然数,随机取值,随机命中率为1/11,2/11,3/11,5/11。
* 即便是权值均等,此方法也一样适用。
* 特点:时间复杂度为T(n) = O(n^2)
* 使用累计方法获取对应的channel,例如:11的总权值,我随机抽到7,则直接取得7对应的channel
* @param channels
* @return
*/
public static MsgChannel getLuckyChannel(List<MsgChannel> channels){
MsgChannel luckChannel = null;
if(null!=channels&&channels.size()>0){
int totalrate = 0;
Map<Integer,MsgChannel> map = new HashMap<>();
for (MsgChannel channel:channels) {
for (int j = totalrate; j < totalrate+channel.getPriority(); j++) {
map.put(j, channel);
}
totalrate += channel.getPriority();
}
if(totalrate==0){
int index = (int) (Math.random() * channels.size());
luckChannel = channels.get(index);
return luckChannel;
}
int hitnumber = new Random().nextInt(totalrate);
luckChannel = map.get(hitnumber);
}
return luckChannel;
}
/**
* 通过权值来获取渠道id
* 算法: 例如权值为1,2,3,5 则总权值为11 ,分为11档,在数组内填入[0-11)内自然数,map 中填入对应id的channel,随机取值,随机命中率为1/11,2/11,3/11,5/11。
* 即便是权值均等,此方法也一样适用。
* 特点:时间复杂度为T(n) = O(n^2+1)
* 使用累计方法获取对应的channel,例如:11的总权值,我随机抽到7,则直接取得index为7对应的map中的channel
* @param channels
* @return
*/
public static MsgChannel getLuckChannel(List<MsgChannel> channels){
MsgChannel luckChannel = null;
if(null!=channels&&channels.size()>0){
int totalrate = 0;
int sum = 0;
for (MsgChannel channel:channels) {
sum += channel.getPriority();
}
if(sum==0){
int index = (int) (Math.random() * channels.size());
luckChannel = channels.get(index);
return luckChannel;
}
int[] temp = new int[sum];
Map<Integer,MsgChannel> map = new HashMap<>();
for (MsgChannel channel:channels) {
for (int j = totalrate; j < totalrate+channel.getPriority(); j++) {
temp[j]=j;
map.put(j, channel);
}
totalrate += channel.getPriority();
}
int index = (int) (Math.random() * temp.length);
luckChannel = map.get(index);
}
return luckChannel;
}
/**
* 通过权值来获取渠道id
* 算法: 例如权值为1,2,3,5 则总权值为11 ,分为11档,填入[0-11)内自然数为key的map中,随机取值,随机命中率为1/11,2/11,3/11,5/11。
* 即便是权值均等,此方法也一样适用。
* 特点:时间复杂度为T(n) = O(n^2)
* 使用累计方法获取对应的channel,例如:11的总权值,我随机抽到7,则直接取得index为7对应的map中的channel
* 但随机抽取方法是按时间来做,因此,随着系统时间的不同,会有不同的几率表现,在瞬时大规模时候,偏向其中几个。适合随着时间长度增加而进行的随机平均算法
* @param channels
* @return
*/
public static MsgChannel getTimeLuckChannel(List<MsgChannel> channels){
MsgChannel luckChannel = null;
if(null!=channels&&channels.size()>0){
int totalrate = 0;
Map<Integer,MsgChannel> map = new HashMap<>();
for (MsgChannel channel:channels) {
for (int j = totalrate; j < totalrate+channel.getPriority(); j++) {
map.put(j, channel);
}
totalrate += channel.getPriority();
}
if(totalrate>0){
int index = (int) (System.currentTimeMillis()%totalrate)+1;
luckChannel = map.get(index);
}else{
int index = (int) (Math.random() * channels.size());
luckChannel = channels.get(index);
}
}
return luckChannel;
}
/**
* 算术除法运算
* @param a
* @param b
* @return
*/
public static String devideNum(int a,int b){
if(b==0){
return String.valueOf(a);
}
BigDecimal bda = new BigDecimal(String.valueOf(a));
BigDecimal bdb = new BigDecimal(String.valueOf(b));
bda.setScale(5,BigDecimal.ROUND_HALF_UP);
bdb.setScale(5,BigDecimal.ROUND_HALF_UP);
BigDecimal res = bda.divide(bdb,5,BigDecimal.ROUND_HALF_UP);
double f =res.setScale(5,BigDecimal.ROUND_HALF_UP).doubleValue();
return String.format("%.2f", f);
}
/**
* Map排序算法
* @param map
*/
public static void sortMap(Map<MsgChannel, Integer> map){
List<Map.Entry<MsgChannel, Integer>> infoIds = new ArrayList<Map.Entry<MsgChannel, Integer>>(map.entrySet());
// 排序
Collections.sort(infoIds, new Comparator<Map.Entry<MsgChannel, Integer>>() {
public int compare(Map.Entry<MsgChannel, Integer> o1,Map.Entry<MsgChannel, Integer> o2) {
return (o1.getValue()-o2.getValue());
}
});
}
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int total = 0;
List<MsgChannel> channels = new ArrayList<MsgChannel>();
int channelNum = 5;
for (int i = 1; i <=channelNum; i++) {
MsgChannel channel = new MsgChannel();
channel.setId(String.valueOf(i));
channel.setName("第"+i+"个");
channel.setSignName("hello"+i);
channel.setParamMap(new HashMap<String,String>(i));
channel.setPriority( new Random().nextInt(200));
channels.add(channel);
}
for (MsgChannel channel: channels) {
total +=channel.getPriority();
System.out.println("channelid: "+channel.getId()+" 权值: "+channel.getPriority());
}
int loopnum = 1000;
Map<MsgChannel,Integer> hitmap1 = new HashMap<MsgChannel,Integer>();
Map<MsgChannel,Integer> hitmap2 = new HashMap<MsgChannel,Integer>();
Map<MsgChannel,Integer> hitmap3 = new HashMap<MsgChannel,Integer>();
Map<MsgChannel,Integer> hitmap4 = new HashMap<MsgChannel,Integer>();
long start1Time = System.currentTimeMillis();
for (int i = 0; i < loopnum; i++) {
MsgChannel channel1 = getSpecialChannel(channels);
if(null!=hitmap1.get(channel1)){
int num = hitmap1.get(channel1);
num =num+1;
hitmap1.put(channel1, num);
}else{
int num =1;
hitmap1.put(channel1, num);
}
}
System.out.println("第一个方法耗时:"+(System.currentTimeMillis()-start1Time)+"毫秒");
long start2Time = System.currentTimeMillis();
for (int i = 0; i < loopnum; i++) {
MsgChannel channel2 = getLuckyChannel(channels);
if(null!=hitmap2.get(channel2)){
int num = hitmap2.get(channel2);
num =num+1;
hitmap2.put(channel2, num);
}else{
int num =1;
hitmap2.put(channel2, num);
}
}
System.out.println("第二个方法耗时:"+(System.currentTimeMillis()-start2Time)+"毫秒");
long start3Time = System.currentTimeMillis();
for (int i = 0; i < loopnum; i++) {
MsgChannel channel3 = getLuckChannel(channels);
if(null!=hitmap3.get(channel3)){
int num = hitmap3.get(channel3);
num =num+1;
hitmap3.put(channel3, num);
}else{
int num =1;
hitmap3.put(channel3, num);
}
}
System.out.println("第三个方法耗时:"+(System.currentTimeMillis()-start3Time)+"毫秒");
long start4Time = System.currentTimeMillis();
for (int i = 0; i < loopnum; i++) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
MsgChannel channel4 = getTimeLuckChannel(channels);
if(null!=hitmap4.get(channel4)){
int num = hitmap4.get(channel4);
num =num+1;
hitmap4.put(channel4, num);
}else{
int num =1;
hitmap4.put(channel4, num);
}
}
System.out.println("第四个方法耗时:"+(System.currentTimeMillis()-start4Time)+"毫秒");
sortMap(hitmap1);
sortMap(hitmap2);
sortMap(hitmap3);
sortMap(hitmap4);
long endTime = System.currentTimeMillis();
System.out.println("总循环次数"+loopnum+" 总共耗时:"+(endTime-startTime)+"毫秒");
System.out.println("总权值数目:"+total);
for (MsgChannel channel: channels) {
System.out.println("channelid: "+channel.getId()+" 算术平均几率: "+devideNum(channel.getPriority()*100,total)+"% 权值: "+channel.getPriority());
}
for (MsgChannel channel:hitmap1.keySet()) {
if(null!=channel&&null!=hitmap3.get(channel)){
System.out.println("第一个方法: channelid: "+channel.getId()+" 几率: "+devideNum(hitmap1.get(channel)*100,loopnum)+"% 权值: "+channel.getPriority());
}
}
for (MsgChannel channel:hitmap2.keySet()) {
if(null!=channel&&null!=hitmap3.get(channel)){
System.out.println("第二个方法: channelid: "+channel.getId()+" 几率: "+devideNum(hitmap2.get(channel)*100,loopnum)+"% 权值: "+channel.getPriority());
}
}
for (MsgChannel channel:hitmap3.keySet()) {
if(null!=channel&&null!=hitmap3.get(channel)){
System.out.println("第三个方法: channelid: "+channel.getId()+" 几率: "+devideNum(hitmap3.get(channel)*100,loopnum)+"% 权值: "+channel.getPriority());
}
}
for (MsgChannel channel:hitmap4.keySet()) {
if(null!=channel&&null!=hitmap4.get(channel)){
System.out.println("第四个方法: channelid: "+channel.getId()+" 几率: "+devideNum(hitmap4.get(channel)*100,loopnum)+"% 权值: "+channel.getPriority());
}
}
}
}
发表评论
-
spring远程加载spring配置文件--问题
2016-06-14 10:17 3197现在正在做动态加载spring远程配置文件的事情。 具体是需要 ... -
Javascript跨域访问解决方案
2014-07-19 14:08 654由于安全方面的考虑,Javascript被限制了跨域访问的能力 ... -
ZOOKEEPER 学习笔记
2014-01-28 16:57 01:zookeeper 干嘛的? ... -
类淘宝橱窗web应用设计
2013-10-28 15:58 0类淘宝橱窗web应用设计2 项目终于在大家共同努力下完成了。 ... -
类淘宝橱窗web应用设计1
2013-08-27 10:42 463续http://coolboyysy.iteye.com/ad ... -
类淘宝橱窗web应用设计问题
2013-08-19 23:11 1059需求: 1 设计实现类淘宝橱窗web应用并涵盖流量控制系统。 ...
相关推荐
Matlab遗传算法优化神经网络权值的程序-遗传算法优化神经网络权值的程序.rar 遗传算法优化神经网络权值的程序
改进的非平均传递权值PageRank算法
为提高针对自适应隐写算法的检测率,通过改进SRM算法,利用不同区域的像素对隐写检测贡献的差异性,提出了一种基于权值分配的隐写分析算法。理论证明了权值分配能够提高隐写检测特征的分类能力,并设计了一种基于...
针对这些不足,提出一种权值正交重构判别分析(weighted orthogonal reconstructive discriminant analysis,WORDA)算法。该算法首先针对线性子空间距离不同引入线性子空间权值矩阵,以提高子空间数据结构保持能力...
本资源包含遗传算法的基本用法源代码以及遗传算法来优化BP神经网络的初始权值和阈值的源代码, 外加程序正常运行依赖的函数包都在里面, 程序运行正常, 可以加深对遗传算法的理解
改进惯性权值的粒子群优化算法.pdf
本程序利用当前流行的pso算法对rbf神经网络进行优化,使之预测精度高
一种动态改变权值的简化粒子群算法.pdf
不完全判断矩阵权值的粒子群优化算法计算.pdf
一种基于复合惯性权值的粒子群优化算法.pdf
一种改进的线性递减权值的粒子群优化算法.pdf
RBF网权值的量子粒子群优化算法
为解决在Web集群负载均衡算法中预先指定权值来评估服务器节点综合负载不能体现各负载指标动态变化情况的问题,提出一种自适应负载指标权值的负载均衡算法。根据服务器节点各负载指标的实际观测值动态调整各负载指标的...
算法通过场境建模,设定三类基准点并平均分布在建模场景中;获取设定场境内不同定位标签的RSSI向量,根据判定规则确定基准点,再运用室内传播模型计算移动权值,估算待测终端的位置信息。通过真实场景实验对比分析,...
Matlab遗传算法优化RBF网络权值-遗传算法优化RBF.rar 遗传算法优化RBF网络权值,可以运行出结果。 本人刚刚学习优化算法这一类知识,希望能有人多交流。希望能有优化算法的创新 我的邮箱 zb078@163.com
LMS算法的实现,有相关权值的加权计算。
经典自适应算法 用LMS算法求最佳权值
km 实现最小权值组合
基于连接边权值的RDF数据语义相似度算法,张哲,俎云霄,随着互联网技术的飞速发展,网络中的数据资源迅猛增长,这就为高效地共享网络中的资源提出了新的要求,语义网技术应运而生。语义
为了能够更加准确地对语句结构进行划分、对语句表达的内容进行判断, 提出了一种全新的基于权值的计算算法, 在完善中文分词的基础上对语句进行情感分析。首先利用中文分词算法对句式结构进行分割, 然后依据词性对词库...