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

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

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

目录
相关文章
|
21天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
221 55
|
10天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
102 66
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
160 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
3天前
|
算法
基于爬山法MPPT最大功率跟踪算法的光伏发电系统simulink建模与仿真
本课题基于爬山法MPPT算法,对光伏发电系统进行Simulink建模与仿真。使用MATLAB2022a版本,通过调整光伏电池的工作状态以实现最大功率输出。爬山法通过逐步优化工作点,确保光伏系统在不同条件下均能接近最大功率点。仿真结果显示该方法的有效性,验证了模型的正确性和可行性。
|
6天前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
20 7
|
28天前
|
机器学习/深度学习 缓存 人工智能
【AI系统】QNNPack 算法
QNNPACK是Marat Dukhan开发的量化神经网络计算加速库,专为移动端优化,性能卓越。本文介绍QNNPACK的实现,包括间接卷积算法、内存重排和间接缓冲区等关键技术,有效解决了传统Im2Col+GEMM方法存在的空间消耗大、缓存效率低等问题,显著提升了量化神经网络的计算效率。
38 6
【AI系统】QNNPack 算法
|
28天前
|
存储 人工智能 缓存
【AI系统】Im2Col 算法
Caffe 作为早期的 AI 框架,采用 Im2Col 方法优化卷积计算。Im2Col 将卷积操作转换为矩阵乘法,通过将输入数据重排为连续内存中的矩阵,减少内存访问次数,提高计算效率。该方法首先将输入图像转换为矩阵,然后利用 GEMM 库加速计算,最后将结果转换回原格式。这种方式显著提升了卷积计算的速度,尤其适用于通道数较多的卷积层。
50 5
【AI系统】Im2Col 算法
|
28天前
|
存储 机器学习/深度学习 人工智能
【AI系统】Winograd 算法
本文详细介绍Winograd优化算法,该算法通过增加加法操作来减少乘法操作,从而加速卷积计算。文章首先回顾Im2Col技术和空间组合优化,然后深入讲解Winograd算法原理及其在一维和二维卷积中的应用,最后讨论算法的局限性和实现步骤。Winograd算法在特定卷积参数下表现优异,但其应用范围受限。
34 2
【AI系统】Winograd 算法
|
12天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
43 5
|
9天前
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。

热门文章

最新文章