认知算法(一)

简介: 认识算法(一),一起来学习吧。

嗨,欢迎来到异星球,我是小怪同志。这篇文章主要讲认识算法,请一起学习吧。

一、算法是什么

算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度和时间复杂度来衡量。

在计算机中,我们一听算法,可能觉得头大,觉得很难,其实算法在我们日常生活中是普遍存在的。比如我们日常生活的吃穿住行所花费的时间都来源于算法,再比如我们领快递所需要的时间,做核酸所需要的时间,等核酸结果所需要的时间等,都属于算法。

二、算法有什么用

 随着计算机的发展,算法在计算机方面已有广泛的发展及应用,如用随机森林算法来进行头部姿势的估计,用遗传算法来解决弹药装载问题,使用信息加密算法进行网络传输,使用并行算法进行数据挖掘   ,以及协同过滤算法在个性化推荐中的应用等 。

可能上述的很难以理解,那么用通俗的话来讲,算法可以帮助你用更加简洁的方式去计算,去做题,去完成生活中一些很难懂的事情。

三、冒泡排序

1.算法思路
(1)比较相邻的元素,如果第一个比第二个大,就交换它们两个,也就是两两对比。

(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

(3)针对所有的元素重复以上的步骤,除了最后一个。

(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2.算法分析
假如现在有十个元素进行冒泡排序,从小到大排

十个元素分别是:10  9  8  7  6  5  4  3  2  1

十个元素下标是:0  1  2  3  4  5  6  7  8  9

第一趟排序

10  9  8  7  6  5  4  3  2  1

9  10  8  7  6  5  4  3  2  1

9  8  10  7  6  5  4  3  2  1 

9  8  7  10  6  5  4  3  2  1

9  8  7  6  10  5  4  3  2  1

……

9  8  7  6  5  4  3  2   1  10

第二趟排序

9  8  7  6  5  4  3  2  1  10

8  9  7  6  5  4  3  2  1  10

8  7  9  6  5  4  3  2  1  10

8  7  6  9  5  4  3  2  1   10

8  7  6  5  9  4  3  2  1   10

……

8  7  6  5  4  3  2  1  9  10

根据冒泡排序可知

10个元素,要进行9趟冒泡排序。

若n个元素,则进行n-1趟冒泡排序。

第一趟 10个元素→9对

第二趟  9个元素→8对

第三趟  8个元素→7对

·····

3.具体代码

include <stdio.h>

void bubble_sort (int arr[],int sz)
{

// 确定冒泡排序的趟数 sz-1趟 
int i=0;
for (i=0;i<sz-1;i++)
{
//每一趟冒泡排序对比次数 sz-1-i次 
    int j=0;
    for(j=0;j<sz-1-i;j++)
    {
        //每一趟冒泡排序 从小到大排序 
        if(arr[j]>arr[j+1])
        {
            //将对比的元素进行交换 
            int tmp =arr[j];
            arr[j]=arr[j+1];
                        arr[j+1]=tmp;             
        }
    }
}

}
int main ()

{int arr[]={9,8,7,6,5,4,3,2,1,0};
//数组的下标是从0开始的0~9 
int i=0;
     int sz=sizeof(arr)/sizeof(arr[0]); 

//sz计算整个数组的大小,整体就是计算元素个数 //对arr进行排序,从小到大排序
//arr是数组,我们对数组进行传参,实际上传递过去的是数组arr首元素的地址&arr【0】

bubble_sort(arr,sz);  //冒泡排序函数 
for (i=0;i<sz;i++)
{
    printf("%d",arr[i]);    
}
return 0;

}

相关文章
|
存储 SQL Linux
MinIO客户端安装教程(Window版)
MinIO客户端安装教程(Window版)
1770 0
|
运维 监控 网络协议
QT实现TCP通信:从基础到高级的全面解析
QT实现TCP通信:从基础到高级的全面解析
1736 0
|
存储 Linux
btrfs中文件系统扩展属性xattr的实现
介绍Linux中文件系统扩展属性xattr特性的基本概念,btrfs文件系统的基本结构以及对xattr特性的实现方式。
268 1
btrfs中文件系统扩展属性xattr的实现
|
11月前
|
前端开发 JavaScript UED
React 图标库使用指南
本文详细介绍如何在 React 项目中使用 `react-icons` 等图标库,涵盖环境搭建、基础使用、常见问题与易错点、高级用法等内容,并通过代码案例进行说明。适合初学者和进阶开发者参考。
800 8
|
网络安全 开发工具 git
|
12月前
|
数据可视化 项目管理
什么是关键工作?如何识别和管理项目中的关键工作?
项目管理中的关键工作是指那些一旦延迟便会影响整个项目进度的任务。本文从实战角度探讨了关键工作的定义、识别方法及高效管理策略,强调了资源优先配置、预警机制、应急方案及频繁沟通的重要性,并介绍了几款有助于关键任务管理的项目管理工具。
570 1
|
9月前
|
存储 人工智能 运维
摊牌了,代码不是我自己写的
本文介绍了如何使用阿里云函数计算FC部署Qwen2.5开源大模型。Qwen2.5支持128K上下文长度和92种编程语言,通过Ollama托管和Open WebUI交互界面实现快速部署与高效调用。函数计算FC提供免运维环境,支持弹性扩容,开发者只需简单配置即可上线新功能。部署流程包括创建Ollama应用、配置Open WebUI及获取内网访问地址等步骤。应用体验部分展示了如何通过Open WebUI调用Qwen2.5进行多语言交流、解答数学题和文档总结等功能。此外,函数计算FC的自动扩缩容机制可根据请求量动态调整实例数量,提高资源利用率并降低成本。
1068 26
摊牌了,代码不是我自己写的
|
9月前
|
人工智能 运维 监控
别再熬夜调模型——从构想到落地,我们都管了!
本文将以 Qwen2.5 : 7B 为例进行演示,介绍如何通过人工智能平台 PAI实现AI 研发的全链路支持,覆盖了从数据标注、模型开发、训练、评估、部署和运维管控的整个AI研发生命周期。
1241 37
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
922 1
|
Linux 开发工具 C语言
centos7编译安装python3
centos7编译安装python3