小鸡购买问题
来源:互联网 发布:license管理系统源码 编辑:程序博客网 时间:2024/04/27 17:09
小鸡购买穷举算法之性能优化
一、穷举算法介绍
穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。
二、穷举算法解决问题一般流程
1.先了解问题求解,简化模型。
2.列出问题可以简化的最小解范围。
3.拟定一个顺序,一一带入解进行运算,直至得出正解。
4.优化算法。
三、穷举算法程序设计模板
void solve()
{
for (i == 解最小范围; i <最大范围; 递进值加入)
{
If(解的判定程序)
printf(输出语句);
}
}
***可以增加循环语句,进一步增加值控。
四、穷举算法优化策略
1. 消除一些无关紧要的条件。
2. 简化一些便于简化的值范围
3. 减少循环次数,转化为数学式子。
五、问题实例剖析
1.问题描述
百元买百鸡问题
用一百元去买鸡,要买的数量为一百只,要刚好用完一百元,并买一百只鸡。约束条件为,公鸡五元一只,母鸡三元一只,小鸡一元三只,三种鸡都要买。
2.程序流程
void solve()
{
for(i= 大鸡最小值; i < 大鸡最大值; 大鸡数量递进关系)
for(j = 母鸡最小值;j < 母鸡最大值;母鸡数量递进关系)
for(k= 小鸡最小值;k < 小鸡最大值;小鸡数量递进关系)
{
If(I + j + k == 100 && 5 * i + 3 * j + z / 3 = =100)
printf(可能的所有值输出);
}
}
3.运行结果与分析
程序虽然计算机可以较为简单的做此类计算,但程序循环次数还是较多,小鸡的最大数目的改变,公鸡,母鸡,小鸡之间的关系的表达,都可以解决,使得算法更加简练。
4.优化策略及其实现
优化一
本次优化,优化策略是在公鸡数量出现之后,利用公鸡数量来计算母鸡最大可买数量,然后再用公鸡及母鸡数量确定小鸡数量最大值。这样可以简化很多不必要循环,排除多个无效值。
优化2
本次优化,不去循环求解小鸡的值,而是在公鸡和母鸡已知情况下,直接算出小鸡的值,这样便有少了许多小鸡的循环值。
优化三
本次优化是在优化二的基础上利用5x+3y+Z/3=100和x+y+z=100这两个式子导出x(公鸡)和y(母鸡)之间的关系y=(200-14x)/8,这样就又简略了一重循环,其实在这之后只简化到20次循环,但由于利用数量关系5x+z/3<100和x+z=100可以简化一部分答案,这是因为当公鸡数量出来时,只剩小鸡和母鸡来填充100这个数量,又由于小鸡比较便宜,必定成为数量填充主力军,但当公鸡数量比较大时,剩下的钱买的小鸡都不够填充100这个数量,必定会舍弃后面一个范围的值。
5.过程及结果过分析比较
整个优化过程还是比较有系统性的,总体本着减少循环,减少范围的方向去,利用题目数量之间的关系得出各变量之间关系式,导出互相关系以剃去坏值,但当循环减少时计算的数量在增加,所以有必要在处理时间和循环次数之间取得平衡。
六、总结
本次对小鸡算法的探讨,在一定程度上改变了我对算法的认知,从六万多次循环到十几次,让我明白一个好的算法设计,对一个程序的影响非常之大,也明白算法并不是去放给电脑的东西,而且还是一个具有程序员生命的东西。所以重视算法是一个软件成功具有美丽UI而完善其“内涵”的重要环节。
- 小鸡购买问题
- 购买问题
- 面试题——关于小鸡问题
- 线性回归问题(小鸡版)
- java递归-小鸡吃米问题
- 关于三只母鸡和三只小鸡过河问题
- 利用python来解决 小鸡,公鸡,母鸡的数学问题
- 内部购买问题
- 购买商品房交税问题
- 拯救小鸡
- 拯救小鸡
- 购买 Windows Vista 问题集锦
- 桃、李、橄榄购买问题
- 丢番图与麦乐鸡购买问题
- 火车票购买问题模拟-同步
- 购物车--购买数量问题
- .net(简单的解密小程序和小鸡问题的求解)
- java基础_公鸡母鸡小鸡的买法问题,100元买100只鸡
- UIKit框架-基础控件Swift版本: 6.UITextField方法/属性详解
- Iterator和ListIterator
- keil编译没有main函数的工程的方法
- ServerSocket 的建立与使用(多线程)
- 筛沙机新秀:自走式全自动筛沙机
- 小鸡购买问题
- 三维空间坐标的相似变换原理与实现
- Android---3---布局之LinearLayout
- (others)PPPOE协议分析1
- iPhone防盗,不知道的可以来看看
- 安卓基础
- abstract与virtual的区别
- 第4周项目2-体验常成员函数
- Android OpenGL ES: 第一个程序