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

简介: 该系列是基于有一定语言基础(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;
    }
}

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

目录
相关文章
|
25天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
11天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
43 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
11天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
52 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
18天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
36 3
|
21天前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
25天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
25天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
25天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
25天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
25天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
下一篇
无影云桌面