嵌入式学习第三十五天!(算法)

算法:解决特定问题求解步骤

1. 算法的设计:

    1. 正确性:语法正确;合法的输入能得到合理的结果;对非法的输入,给出满足要求的规格说明;对精心选择,甚至刁难的测试都能正常运行,结果正确;

    2. 可读性:便于交流,阅读,理解(高内聚低耦合);

    3. 健壮性:输入非法数据,能进行相应的处理,而不是产生异常;

    4. 高效率:运行时间短(时间复杂度低)

    5. 低存储:(空间复杂度)

2. 算法时间复杂度:

     执行这个算法所花时间的度量,时间复杂度越高,效率越低。

    将数据量增长时间增长用函数表示出来,这个函数就叫做时间复杂度

    一般用大O表示:O(n)——>时间复杂度是关于数据n的一个函数,随着n的增加,时间复杂度增长较慢的算法时间复杂度低。

3. 时间复杂度的计算规则:

    1. 用常数1取代运行时间中的所有加法常数;

    2. 在修改后的运行函数中,只保留最高阶项;

    3. 如果最高阶存在且系数不是1,则去除这个项相乘的常数;

    练习:

Fun(int a,int b)  //3 -> 时间复杂度为O(1)
{Int tmp = a;A = b;B = tmp;
}for(i = 0; i < n; i++)    //3n -> 时间复杂度为O(n)
{Int tmp = a;A = b;B = tmp;    
}for(i = 1; i < n; i *= 2)  //2^x = n 即1*2*2*2*2*2*2 < n 时间复杂度为O(logn)for(i = 0; i < n; i++)    //时间复杂度为O(nlogn)
{for(i = 0; i < n; i *= 2)    //时间复杂度为O(logn){}
}for(i = 0; i < n; i++)    //3(n+1)*n/2 -> n^2 时间复杂度为O(n^2)
{for(j = i; j < n; j++){Int tmp = a;A = b;                         B = tmp;  }
}

    时间复杂度排序:

        O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

4. 排序算法:

    1. 冒泡排序:时间复杂度:O(n²)

void Bubble_Sort(int *parry, int len)
{int tmp = 0;for(int i = 0; i < len-1; i++){for(int j = 0; j < len-1-i; j++){if(parry[j] > parry[j+1]){tmp = parry[j];parry[j] = parry[j+1];parry[j+1] = tmp;}}}return;
}

    2. 选择排序:时间复杂度O(n²)

void Select_Sort(int *parry, int len)
{int tmp = 0;for(int i = 0; i < len-1; i++){for(int j = i+1; j < len; j++){if(parry[i] > parry[j]){tmp = parry[i];parry[i] = parry[j];parry[j] = tmp;}}}return;
}

    3. 插入排序:时间复杂度O(n²)

void Insert_Sort(int *parry, int len)
{int tmp = 0;int j = 0;for(int i = 1; i < len; i++){tmp = parry[i];j = i;while(tmp < parry[j-1] && j > 0){parry[j] = parry [j-1];j--;}parry[j] = tmp;}return;
}

    4. 快速排序:时间复杂度O(nlogn)

void Qulik_Sort(int *parry, int head, int tail)
{if(head >= tail){return;}int i = head;int j = tail;int key = parry[i];while(i < j){while(i < j && key <= parry[j]){j--;}parry[i] = parry[j];while(i < j && key >= parry[i]){i++;}parry[j] = parry[i];}parry[i] = key;Qulik_Sort(parry, head, i-1);Qulik_Sort(parry, i+1, tail);
}

        注意:在一个待排的序列中,如果两个相同的数的相对位置没有改变,说明排序算法稳定,所以根据上诉排序算法原理可知:冒泡排序插入排序稳定的排序算法,选择排序快速排序不稳定的排序算法。

    5. 二分查找:必须是一个有序序列才能使用,时间复杂度O(logn)

int Binary_Search(int *parry, int len, int data)
{int left = 0;int right = len-1;while(left <= right){int middle = left + (right-left)/2;if(data < parry[middle]){right = middle - 1;}else if(data > parry[middle]){left = middle + 1;}else{return middle;}}return -1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装、使用及常用命令

一、Docker是什么&#xff1f; Docker是一种开源的容器化技术&#xff0c;允许开发者将应用及其运行环境打包在一个轻量级、可移植的容器中。这样&#xff0c;不论在开发、测试还是生产环境中&#xff0c;应用都能在任何Docker支持的平台上无缝运行。Docker使用Dockerfile来自…

Linux 多进程开发

0、程序和进程 程序 是包含一系列信息的文件&#xff0c;这些信息描述了如何在运行时创建一个进程。 进程 是正在运行的程序的实例。是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 1、区别 程序是静态的&#xff0c;进程是动态的&#xff0c;程序是存储在某…

1689 ssm社区老人危机干预系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm社区老人危机干预系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主…

常见加解密算法03 - RC4逆向认识

各位聪明绝顶&#xff0c;才高八斗的读者们你们好&#xff01;今天我们主要讨论编译之后的RC4算法识别。 题外话&#xff0c;之前看到一个蛋疼的小知识&#xff0c;说“势”这个字最好不好查词典释义。我是很好奇的&#xff0c;果然后来无法直视势不可挡这个成语。 言归正传&am…

如何隐藏一个元素的滚动条

要隐藏一个元素的滚动条&#xff0c;同时仍然允许内容可以滚动&#xff08;特别是在那些支持自定义滚动条样式的浏览器中&#xff09;&#xff0c;你可以使用几种不同的方法。以下是一些常见的方法&#xff1a; 1&#xff0c;使用WebKit的伪元素&#xff08;适用于基于WebKit的…

【MySQL】常见的数据类型

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;MySQL 目录 &#x1f449;&#x1f3fb;常见的数据类型bit类型enumset集合查询函数find_ in_ set &#x1f449;&#x1f3fb;浮点类型float类型decimal &am…

Ansys Zemax|HUD 设计实例

说明 本文介绍了HUD设计实例。 实例说明 规格如下&#xff1a; 显示器尺寸&#xff1a;24*8mm 眼盒尺寸&#xff1a;100*40mm 放大倍率&#xff1a;5 &#xff08;虚像尺寸 120*40mm&#xff09; 虚像距离&#xff1a;1.8m 最终光学系统的整体布局如下图所示。 从HUD发出的…

官宣!招商工作全面启动“2024南京智博会”众多企业踊跃报名

2024南京智博会&#xff0c;作为一场盛大的科技盛宴&#xff0c;经过多年的发展与沉淀&#xff0c;已经成功跻身国内顶尖的高新技术产品及解决方案的展示平台之列&#xff0c;成为了引领行业趋势的风向标。本届智博会不仅汇聚了众多知名科技企业&#xff0c;更展现了国内外最前…

中北大学软件学院javaweb实验三JSP+JDBC综合实训(一)__数据库记录的增加、查询

目录 1.实验名称2.实验目的3.实验内容4.实验原理或流程图5.实验过程或源代码&#xff08;一&#xff09;编程实现用户的登录与注册功能【步骤1】建立数据库db_news2024和用户表(笔者使用的数据库软件是navicat)【步骤2】实现用户注册登录功能(与上一实验报告不同的是&#xff0…

kafka创建topic并且查看topic情况

创建topic find / -name kafka-topics.sh/opt/kafka_2.13-2.8.1/bin./kafka-topics.sh --bootstrap-server localhost:9092 --topic hello --create查询某个topic的情况 kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic hello

哪个品牌led灯好?五大好用护眼台灯推荐

哪个品牌led灯好&#xff1f;目前LED护眼台灯当中做得比较好的有明基、松下、书客等品牌。在如今LED灯市场的海洋中&#xff0c;选择一款可靠的护眼台灯变得愈发重要。然而&#xff0c;众多品牌和产品的涌现也让消费者面临着选择困难。为了帮助大家找到最合适的LED台灯&#xf…

在SQL Server中使用临时表与普通表的性能差异分析

在SQL Server中&#xff0c;临时表和普通表的性能确实存在差异&#xff0c;具体表现和影响因素如下&#xff1a; 临时表和普通表的区别 存储位置&#xff1a; 临时表&#xff1a;存储在tempdb数据库中&#xff0c;生命周期仅限于当前会话或批处理。当会话结束或批处理完成时&a…

Chromium 调试指南2024 Windows11篇-使用日志来辅助调试(八)

1. 日志&#xff1a;你的第一个调试工具 日志是开发者最简单也是最常用的调试工具之一&#xff0c;它能够提供程序运行时的详细记录。通过合理的日志记录策略&#xff0c;开发者可以快速定位问题发生的上下文&#xff0c;理解程序的运行流程和状态。 2. 如何在Chromium中使用…

百度云防护自定义访问策略URI使用说明

百度云防护的创建防御模板里的自定义访问策略功能是一个不错自定义拦截功能。 其中URI拦截策略是一种非常不错的拦截手段&#xff0c;今天我们来说明下如何使用URI。 首先什么是URI&#xff1f;关于什么是URI百度上写了很多&#xff0c;不过对于小白来说&#xff0c;是非常难…

中国平安发布“绿美广东·平安古树守护行动” 为广东古树名木提供超2600万风险保障

为响应国家关于生态文明建设的号召&#xff0c;发展绿色金融&#xff0c;助力构建“绿美广东”生态建设新格局&#xff0c;5月11日&#xff0c;中国平安在广东省韶关市南华寺成功举办“绿美广东平安古树守护行动”活动&#xff0c;并发布“我为古树上保险”计划&#xff0c;将为…

Qt实现水平方向流式布局FlowLayout简单又实用!

Qt中常见的布局管理器有&#xff1a; QHBoxLayout&#xff1a;水平布局&#xff08;常用&#xff09; QVBoxLayout&#xff1a;垂直布局&#xff08;常用&#xff09; QGridLayout&#xff1a;表格布局&#xff08;常用&#xff09; QFormLayout&#xff1a;表单布局&#…

4.分支与循环

逻辑控制分为三部分&#xff1a; 1.顺序结构---》顺序执行代码 2.分支结构---》if语句和switch语句 3.循环执行---》for语句 while语句 和do while语句 顺序结构比较简单&#xff0c;按照代码书写的顺序一行一行执行 分支结构&#xff08;if、switch语句&#xff09; 也就是…

StarCloud开源行动:激发算力调度的创新潜力

01 关于StarCloud OpenCSG StarCloud 是一个集开源系统(Kubernetes ,K8S)与高性能计算(High Performance Computing,HPC)一体的混合算力调度平台。它专注于大模型训练和推理&#xff0c;并提供一站式服务&#xff0c;包括从训练到部署&#xff0c;以及多模型比较等。除了在人…

【OpenVINO™】在 C# 中使用OpenVINO™ 部署PP-YOLOE实现物体检测

前言 OpenVINO™ C# API 是一个 OpenVINO™ 的 .Net wrapper&#xff0c;应用最新的 OpenVINO™ 库开发&#xff0c;通过 OpenVINO™ C API 实现 .Net 对 OpenVINO™ Runtime 调用&#xff0c;使用习惯与 OpenVINO™ C API 一致。OpenVINO™ C# API 由于是基于 OpenVINO™ 开发…

DevOps 温故知新

【引】伴随着微服务架构以及云技术的广泛使用&#xff0c;DevOps相应地引起了人们的关注&#xff0c;尤其在互联网企业展开了大量的探索和实践。去年赋闲在家的时候&#xff0c; 有幸精读了三本书&#xff0c;分别是《持续架构实践——敏捷和DevOps时代下的软件架构》&#xff…