`
zhanghonglun
  • 浏览: 92225 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

根据设定好的几率来随机显示内容的算法

阅读更多

假设我们要在网页上的某个位置显示一系列的广告,按照一定的规则,比如给的广告费用的多少,我们对不同的广告都设定了相应的显示几率,这样用户在浏览网页的时候,就会按照设定好的几率随即显示广告内容。下面的算法实现了这个随机选取内容的功能,欢迎大家优化这个算法。

/**
 * @author Tracy.Zhang
 *
 */
public class Random {
	/**
	 * 四个广告A,B,C,D.
	 */
	private String choices[] = { "A", "B", "C", "D" };
	
	
	/**
	 * 每个广告对应的几率
	 */
	private int rates[] = { 10, 20, 30, 40 };
	
	
	/**
	 * 数轴
	 */
	private List<Integer> list = new ArrayList<Integer>();
	/**
	 * 计算数轴上的点
	 * @param j
	 * @return
	 */
	private int getRandomRate(int j) {
		int rate = 0;
		for (int i = 0; i < j; i++) {
			rate = rate + rates[i];
		}
		return rate;
	}
	/**
	 * 构造一个数轴,每个选项对应一个区间
	 */
	private void init() {
		list.add(0);
		for (int i = 0; i < choices.length; i++) {
			list.add(getRandomRate(i + 1));
		}
	}
	/**
	 * 使用Math 的random 方法产生一个0--100 的随机数种子,
	 * 判断其落在那个区间上.返回该区间对应的广告.
	 * @return
	 */
	public String getChoice() {
		init();
		String choice = "";
		int random = (int) (100 * Math.random());
		for (int i = 0; i < choices.length; i++) {
			if (list.get(i) <= random && random < list.get(i + 1)) {
				choice = choices[i];
				break;
			}
		}
		return choice;
	}
}

 以下是相应的测试用例:

public class RandomTest {
	@Test
	public void testGetRate() {
		Random ran = new Random();
		String tempChoice = "";
		int total = 100000;
		int a = 0;
		int b = 0;
		int c = 0;
		int d = 0;
		for (int i = 0; i < total; i++) {
			tempChoice = ran.getChoice();
			if("A".equals(tempChoice)){
				a++;
			}else if("B".equals(tempChoice)){
				b++;
			}
			else if("C".equals(tempChoice)){
				c++;
			}
			else if("D".equals(tempChoice)){
				d++;
			}
		}
		System.out.print("Total="+total+" Rating:A="+a+":B="+b+":C="+c+":D="+d);
	}
	@Test
	public void testGetRandom1() {
		Random ran = new Random();
		
		System.out.print(ran.getChoice());
	}
}

 

测试结果,

Total=100000 Rating:A=10087:B=19780:C=30060:D=40073

Total=50000 Rating:A=5024:B=10038:C=15071:D=19867

... ...

分享到:
评论

相关推荐

    控制随机几率加权方式

    这个概念涉及到如何通过权重来调整随机事件发生的概率,以便更好地控制系统的输出或者优化决策过程。 首先,我们需要理解“随机几率”是指一个事件发生的不确定性和其发生的概率。在计算机科学中,随机性常用于模拟...

    《退火算法》

    1. **初始化**:设定初始温度T和一个随机解,这可以是问题的一个合法解。 2. **生成新解**:根据当前解,生成一个新的候选解,这通常通过微小变化(例如,交换旅行商问题中的两个城市)来实现。 3. **计算能量差**:...

    游戏开发之随机概率的选择算法

    在实际应用中,随机概率的选择算法还可以结合其他因素进行优化,比如使用更高级的随机数生成器以获得更好的随机性,或者调整概率分布来平衡游戏的难易度。同时,也可以考虑使用累积概率,这样可以避免在概率数组中...

    遗传算法在平差中的应用

    在选择操作中,算法根据个体的适应性值来确定其被选为繁殖后代的几率。这个过程模拟了“适者生存”的自然法则。交叉和变异是遗传算法的主要遗传操作,分别用来模拟基因的重组和突变,为算法带来新的遗传信息。 为了...

    基于遗传算法的MATLAB16阵元天线的优化.doc_粒子群算法天线波束优化matlab实现

    程序设计部分提供了一个简化的代码框架,包括初始化种群、设定算法参数以及执行优化过程。然而,实际的完整源代码并未在此给出,这通常需要结合具体的MATLAB编程技巧和天线理论知识来完成。 参考文献应包括遗传算法...

    遗传算法在水库优化调度中的应用

    随着科技的发展,传统的水库优化调度方法逐渐显示出局限性,主要体现在动态规划法和逐步优化算法上。动态规划法在处理多阶段决策问题时,随着状态和决策空间的增长,会出现所谓的“维数灾”,即计算量剧增导致难以...

    布谷鸟搜索算法:最近的进展和应用(论文)

    算法中的关键参数包括布谷鸟的数量、寄生概率、巢穴替换策略等,这些参数的设定对算法性能有着显著影响。 算法的本质是通过数学模型生成新的解决方案,并依据一定的评价标准(如目标函数)进行迭代更新。布谷鸟搜索...

    蚁群优化算法

    总的来说,这个项目提供了用MATLAB实现的蚁群优化算法解决旅行商问题的完整流程,包括问题建模、算法设计、可视化以及结果评估。通过学习和分析这些源代码,我们可以深入了解蚁群优化算法的原理及其在实际问题中的...

    VB遗传算法演示程序

    总的来说,这个VB遗传算法演示程序提供了一个灵活的平台,让用户亲手实践并探索遗传算法的各种参数组合,从而深入理解其工作原理和优化策略。无论是对遗传算法感兴趣的初学者,还是寻求实际问题解决方案的专业人士,...

    遗传算法C++

    遗传算法是一种借鉴自然界生物进化机制的人工智能优化技术,它通过模拟遗传选择和自然淘汰的过程来寻找最优解或近似最优解。在IT领域,尤其是机器学习和优化问题解决方面,遗传算法因其强大的搜索能力和对复杂问题的...

    基因演算法之源起演化流程

    4. **选择(Selection)**: 根据适应度值进行选择,较高适应度的染色体有更大几率被选中。 5. **交配(Crossover)**: 被选中的染色体按照一定概率进行交配,产生新的后代。 6. **突变(Mutation)**: 新产生的后代...

    【智能优化算法】磷虾群算法KHA附Python代码.zip

    1. **位置更新**:每个磷虾的位置表示可能的解,根据磷虾的当前位置、群体中心和随机游动来更新。 2. **速度更新**:磷虾的速度决定了其移动方向和距离,受到当前位置、目标位置(最优解)以及随机因素的影响。 3. *...

    遗传算法及其MATLAB实现

    1. **选择操作**:这是遗传算法的核心步骤,通常采用轮盘赌选择、锦标赛选择等方式,根据个体的适应度值来决定其在下一代中出现的概率。适应度函数是评估个体优劣的关键,它应反映解的质量,高适应度的个体有更大...

    【老生谈算法】Matlab旅行商优化问题算法原理.doc

    - 根据设定的迭代次数或达到特定条件后结束遗传操作。 在Matlab中,可以通过编写脚本来实现上述算法,例如`distTSP.txt`文件可能包含了城市间的距离矩阵,用于计算各个染色体的适应度。通过不断迭代和优化,遗传...

    概率抽奖算法Demo(适应刮刮卡和轮盘类等抽奖).zip_DEMO_drawdemo抽奖_抽奖 概率_抽奖抽奖算法_抽奖算法

    在描述中提到的概率抽奖算法,是指根据预先设定的各个奖项的概率进行随机抽取。这意味着不同的奖项有不同的中奖几率,而这些几率必须在算法中精确体现,确保每次抽奖的结果具有不可预测性,同时保持整体概率的正确性...

    8专题 精通模拟退火算法通过matlab建模案例.7z

    在MATLAB中,可以使用循环结构来实现算法流程,包括生成初始解、设定初始温度、定义接受概率函数等步骤。接受概率函数通常采用指数函数形式,用于计算在当前温度下接受新解的概率。在每一步迭代中,根据概率决定是否...

    基于遗传算法的高校排课系统设计与分析

    5. 终止条件:一个遗传算法程序通常需要设定一个终止条件来判断何时停止迭代。条件可以是达到预设的迭代次数、找到一个足够好的解,或是种群进化不再产生显著变化等。 6. 输出结果:当满足终止条件时,输出当前最优...

    基于双重更新策略的粒子群算法.pdf

    即从那些搜索效率低下、成绩较差的个体的历史最优位置(pbest)中随机选择一个个体,更新其速度和位置,使其有机会在全局范围内进行搜索,以此增加跳出局部最优的几率。二是针对群体中表现较好的粒子采取局部搜索...

    改进粒子群算法的移动机器人路径规划.pdf

    粒子群优化算法(Particle Swarm Optimization, PSO)因其概念简单、参数调整少、鲁棒性好等优点,在路径规划问题中得到了广泛的应用。然而,粒子群算法存在一个普遍问题,即随着算法迭代次数的增加,粒子群的多样性...

Global site tag (gtag.js) - Google Analytics