算法系统学习-在吗?百钱买百鸡呗?(蛮力法)

简介: 该系列是基于有一定语言基础(C,C++,Java等等)和基本的数据结构基础进行的算法学习专栏,如果觉得有点吃力 😥 ,建议先了解前提知识再学习喔!本个专栏会将用更容易理解的表达去学习算法,如果在一些表述上存在问题还请各位多多指点

蛮力法:


基于计算机运行速度快的这一特性,在解决问题时采用的一种“懒惰”策略。这种策略不经过思考,把问题的所有情况和所有过程交给计算机一一尝试,从中找出问题的解。我们常用的:选择,冒泡,插入,顺序查找,朴素的字符串匹配等。比较常用的还有枚举法,穷举搜素算法等等。


枚举法


枚举法也称穷举法,是蛮力策略的一种表现形式,也是一种使用非常普遍的思维方法。它是根据问题中的条件将可能的情况一一列举出来,逐一尝试从中找到满足问题条件的解。用该方法通常要确定数值取值范围和找出约束条件。


Case1:

百元百鸡“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,翁,母,雏各几何?”

算法分析:

首先设定x,y,z,分别代表公鸡,母鸡,雏鸡的数量,由于题意给定了100块买百鸡,若全部买公鸡最多可以买100/5=20只,显然x的取值范围是1-20,同理可得 y的取值范围1-33,z则是1-100

约束条件:

x+y+z=100,5x+3y+z/3=100

算法设计1:

main(){
int x,y,z;
    for(x=1;x<20;i++){
     for(y=1;y<34;y++){
         for(z=1;z<100;z++){
             if(x+y+z=100 && 5x+3y+z/3=100){
             cout<<"公鸡"<<x;
             }
             cout<<"母鸡"<<y;
         }
         cout<<"小鸡"<<z;
     }
    }
}

但是由于for循环的嵌套,导致循环次数的累乘,一共要循环2034100=68000次,显然效率太低了。因此我们

可以稍微进行一个小小的优化,当将约束条件改为:当公鸡,母鸡的数量都知道时,那么小鸡的数量自然而然是100-x-y。因此可以做出算法2设计

算法设计2:

main(){
  int x,y;
    for(x=1;x<20;x++){
      for(y=1;y<34;y++){
           z=100-x-y;
            if(x+y+z=100 && 5x+3y+z/3=100){
               cout<<"公鸡"<<x;
            }
             cout<<"母鸡"<<y;
        }
        cout<<"小鸡"<<z;
    }
}

算法设计2 只需要枚举尝试20*33=660次,实现时约束条件即限定Z能被3整除,进一步提高算法的效率。

Case2:

求3个数的最小公倍数

三个数据最小公倍数的定义为“三个数的公倍数中最小的一个”。用蛮力法直接用最小公倍数的定义算法设计,逐步从小扩大到1,2,3,4,5......测试,直到它的某一倍数正好也是其他两个数据的倍数,也就是说能被其他的两个数据整除,因此就找到问题的解。

算法设计:

首先先选出3个数的最大值,然后对这个最大值从1开始,对其扩大自然数的倍数,知道这个积能被全部3个数整除为止,这个积就是它们的最小公倍数了。

算法如下:

main(){
    int x1,x2,x3,i;
    cout<<"输入3个数";
    cin>>x1>>x2>>x3;
    i=1;
    while(1){
    if(i mod x1=0 and i mod x2=0 and i mod x3=0){
        break;
        i++;
    }
    cout<<x1<<x2<<x3<<"最小公倍数是"<<i;
    }
}

不过该算法虽然简单易懂,但是当三个数据较大时,算法效率非常低,可以使用最小公倍数定义进行算法设计,或者用短除法的思想。

目录
相关文章
|
2月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
2月前
|
算法
基于MPPT算法的光伏并网发电系统simulink建模与仿真
本课题基于MATLAB/Simulink搭建光伏并网发电系统模型,集成PV模块、MPPT算法、PWM控制与并网电路,实现最大功率跟踪与电能高效并网。通过仿真验证系统在不同环境下的动态响应与稳定性,采用SVPWM与电流闭环控制,确保输出电流与电网同频同相,满足并网电能质量要求。
|
3月前
|
数据采集 边缘计算 算法
遗传算法+多目标规划算法+自适应神经模糊系统(Matlab代码实现)
遗传算法+多目标规划算法+自适应神经模糊系统(Matlab代码实现)
124 4
|
4月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
156 0
|
3月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
221 2
|
3月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
221 1
|
3月前
|
机器学习/深度学习 自然语言处理 算法
基于改进鲸鱼优化算法的微网系统能量优化管理研究(Matlab代码实现)
基于改进鲸鱼优化算法的微网系统能量优化管理研究(Matlab代码实现)
121 1
|
3月前
|
机器学习/深度学习 算法 算法框架/工具
256KB内存约束下的设备端训练:算法与系统协同设计——论文解读
MIT与MIT-IBM Watson AI Lab团队提出一种创新方法,在仅256KB SRAM和1MB Flash的微控制器上实现深度神经网络训练。该研究通过量化感知缩放(QAS)、稀疏层/张量更新及算子重排序等技术,将内存占用降至141KB,较传统框架减少2300倍,首次突破设备端训练的内存瓶颈,推动边缘智能发展。
258 6
|
4月前
|
机器学习/深度学习 边缘计算 算法
【状态估计】基于LMS类自适应滤波算法、NLMS 和 LMF 进行系统识别比较研究(Matlab代码实现)
【状态估计】基于LMS类自适应滤波算法、NLMS 和 LMF 进行系统识别比较研究(Matlab代码实现)
160 3
|
3月前
|
机器学习/深度学习 存储 算法
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
116 0

热门文章

最新文章