什么是算法

算法的概念

算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。
简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵魂


一、算法的特征

1. 可行性: 算法中执行的任何计算步骤都可以分解为基本可执行的操作步骤,即每个计算步都可以在有限时间里完成(也称之为有效性)

2. 确定性: 算法的每一步都要有确切的意义,不能有二义性。例如“增加x的值”,并没有说增加多少,计算机就无法执行明确的运算。

3. 有穷性: 算法的有穷性是指算法必须在执行有限个步骤后终止。操作次数不宜过大,不能超过人们事先设定的时间限制。

4. 输入: 算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法已经给出了初始条件。

5. 输出: 一个算法可能有1个或多个输出,以反映输入数据加工后的代码,没有输出的算法是没有意义的!


二、算法的评价

一个好算法应该达到一下目标:

1. 正确性: 算法应该正确的解决问题。
2. 可读性: 算法应该具有较好的可读性,让人们理解算法的作用。
3. 健壮性: 输入非法数据时,算法也可以做出适当的反应,而不会产生奇奇怪怪的输出。


三、算法复杂度

算法复杂度: 指算法在变为可执行程序后所消耗的时间资源和内存
时间复杂度: 评估程序所需要的时间
空间复杂度: 评估程序所需要的储存空间(一般不做考虑,一般都优先考虑时间复杂度)

常见时间复杂度

复杂度标记符号说明
常量O(1)操作数量为常数,与输入数据的规模无关
对数O(log2 n)与输入数据的比例是 log2(n
线性O(n)与输入数据成正比
平方O(n²)与输入数据规模的比例为平方
立方O(n³)与输入数据规模的比例为立方
指数O(2ⁿ)
O(kⁿ)
O(n!)
快速增长,尽量减少这种代码

代码

1.O(1)级代码

//计算长方形面积
int a,b;
cin>>a>>b;
int s = a*b;
cout<<s;

2.O(log2 n)级代码

//二分查找
int search(int nums[], int size, int target) //nums是数组,size是数组的大小,target是需要查找的值
{int left = 0;int right = size - 1;	// 定义了target在左闭右闭的区间内,[left, right]while (left <= right) {	//当left == right时,区间[left, right]仍然有效int middle = left + ((right - left) / 2);//等同于 (left + right) / 2,防止溢出if (nums[middle] > target) {right = middle - 1;	//target在左区间,所以[left, middle - 1]} else if (nums[middle] < target) {left = middle + 1;	//target在右区间,所以[middle + 1, right]} else {	//既不在左边,也不在右边,那就是找到答案了return middle;}}//没有找到目标值return -1;
}

3.O(n)级代码

//计算n的阶乘
int n;
cin>>n;
int ji = 1;
for(int i = 1 ; i<=n ; i++){ji*=i;
}
cout<<ji<<endl;

4.O(n²)级代码

//相邻比较法排序
int a[10000],n;
cin>>n;
for(int i = 1 ; i<=n ; i++) cin>>a[i];
for(int i = 1 ; i<=n ; i++){for(int j = i+1 ; j<=n+1 ; j++){if(a[i]>a[j])swap(a[i],a[j])}
}

5.O(n*log2 n)级代码

//STL快速排序
sort(a+1,a+n+1);

6.可以估算时间的代码

#include<iostream>
#include<ctime>
using namespace std;
int cnt;
int main()
{int begintime = clock();for(int i = 0 ;i<5e8 ; i++) cnt++;int endtime = clock();cout<<"开始时间"<<begintime<<endl;cout<<"结束时间"<<endtime<<endl;cout<<"运行时间"<<endtime-begintime<<endl;return 0;
}

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

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

相关文章

云计算迎来中场战役,MaaS或将成为弯道超车“新赛点”

科技云报道原创。 没有人能预见未来&#xff0c;但我们可以因循常识&#xff0c;去捕捉技术创新演进的节奏韵脚。 2023年最火的风口莫过于大模型。 2022年底&#xff0c;由美国初创企业OpenAI开发的聊天应用ChatGPT引爆市场&#xff0c;生成式AI成为科技市场热点&#xff0c…

ES6:Object.assign方法详解

ES6&#xff1a;Object.assign方法详解 1、前言2、语法3、基本用法3.1 目标对象和源对象无重名属性3.2 目标对象和源对象有重名属性3.3 有多个源对象3.4 其他情况3.4.1 只有一个参数时&#xff0c;Object.assign会直接返回该参数3.4.2 如果该参数不是对象&#xff0c;则会先转成…

每日一道面试题之介绍一下Iterator

Iterator是Java中的一个接口&#xff0c;用于遍历集合&#xff08;Collection&#xff09;中的元素。通过Iterator&#xff0c;可以按顺序访问集合中的每个元素&#xff0c;而无需了解集合的内部实现细节。 使用Iterator的一般步骤如下&#xff1a; 通过调用集合的iterator()…

SOC FPGA之HPS模型设计(二)

根据SOC FPGA之HPS模型设计(一)&#xff0c; Quartus工程经过全编译后会产生Handoff文件夹、SOPCINFO文件、SVD文件 二、生成Preloader镜像文件 通过信息交换文件Handoff文件生成Preloader&#xff0c;需要用到SOC EDS Preloader也被称为spl(Second Program Loader)或u-boot…

【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念&#xff1f; 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 一、Kubern…

基于Ko-time的Springboot单体化调用链追踪实践

目录 前言 一、关于Ko-Time 1、是什么&#xff1f; 2、ko-time更新时间线 二、Ko-time怎么用&#xff1f; 1、依赖引入 2、配置集成 3、权限放行 三、链路追踪 1、系统运行 2、链路追踪 3、长时间调用模拟 总结 前言 熟悉微服务的老司机一定了解&#xff0c;在微服务模…

Web端即时通讯技术(SEE,webSocket)

目录 背景简介个人见解被动推送轮询简介实现 长轮询&#xff08;comet&#xff09;简介实现 比较 主动推送长连接&#xff08;SSE&#xff09;简介实现GETPOST 效果 webSocket简介WebSocket的工作原理:WebSocket的主要优点:WebSocket的主要缺点: 实现用法一用法二 **效果** 比较…

学习笔记|大模型优质Prompt开发与应用课(二)|第四节:大模型帮你写代码,小白也能做程序

文章目录 01软件开发产业趋势与技术革新软件开发产业趋势与技术革新技术性人才很受欢迎软件开发产业趋势与技术革新技术门槛越来越低 02 大模型驱动的软件开发需求分析prompt 产品设计开发和测试prompt输出回复promptpromptprompt回复 发布和部署promptprompt 维护和更新prompt…

Docker中的网络

文章目录 网络网桥&#xff08;bridge&#xff09;创建网桥接口hostnonecontaineroverlayoverlay底层原理 网络 网桥&#xff08;bridge&#xff09; 在Docker中&#xff0c;网桥&#xff08;Bridge&#xff09;是一种网络驱动&#xff0c;用于实现Docker容器之间和容器与宿主…

SpringBoot中接口幂等性实现方案-自定义注解+Redis+拦截器实现防止订单重复提交

场景 SpringBootRedis自定义注解实现接口防刷(限制不同接口单位时间内最大请求次数)&#xff1a; SpringBootRedis自定义注解实现接口防刷(限制不同接口单位时间内最大请求次数)_redis防刷_霸道流氓气质的博客-CSDN博客 以下接口幂等性的实现方式与上面博客类似&#xff0c;…

MySQL - 记一次 HikariDataSource + Etcd 组合技打爆数据库连接数

问题描述 如题所述&#xff0c;我们每新增一个数据源并且往 etcd 去生产的时候&#xff0c;etcd 消费者收到监听到的内容去消费&#xff0c;产生大量的数据库连接&#xff08;通过 SHOW PROCESSLIST 查到&#xff09; 原因分析 故事是因为项目本身有一个多租户功能&#xff0…

剑指YOLOv7改进最新MPDIoU损失函数(23年7月首发论文):论文实测YOLOv7模型涨点,超越现有多种G/D/C/EIoU,高效准确的边界框回归的损失

💡本篇内容:剑指YOLOv7改进最新MPDIoU损失函数(23年7月首发论文):论文实测YOLOv7模型涨点,超越现有多种G/D/C/EIoU,高效准确的边界框回归的损失 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv7 按步骤操作运行改进后的代码即可 💡:重点:该专栏《剑指YOLOv7原…

python pygbag教程 —— 在网页上运行pygame程序(全网中文教程首发)

pygame是一款流行的游戏制作模块&#xff0c;经过特殊的方式编译后&#xff0c;可以在浏览器web网页上运行。web上的打包主要使用第三方模块pygbag。 pygame教程&#xff1a;Python pygame(GUI编程)模块最完整教程&#xff08;1&#xff09;_pygame模块详解_Python-ZZY的博客-…

【配置环境】Windows下 VS Code 远程连接虚拟机Ubuntu

一&#xff0c;环境 Windows 11 家庭中文版VMware Workstation 16 Pro &#xff08;版本&#xff1a;16.1.2 build-17966106&#xff09;ubuntu-22.04.2-desktop-amd64 二&#xff0c;关键步骤 Windows下安装OpenSSHVS Code安装Remote - SSH插件 三&#xff0c;详细步骤 在Ubun…

kotlin获取泛型集合的类型信息

通过 reified 关键字和内联函数来实现 inline fun <reified T> getClassFromList(list: List<T>): Class<T> {return T::class.java }fun main() {val list listOf("Hello", "World")val clazz getClassFromList(list)println(clazz)…

React 前端应用中快速实践 OpenTelemetry 云原生可观测性(SigNoz/K8S)

OpenTelemetry 可用于跟踪 React 应用程序的性能问题和错误。您可以跟踪从前端 web 应用程序到下游服务的用户请求。OpenTelemetry 是云原生计算基金会(CNCF)下的一个开源项目&#xff0c;旨在标准化遥测数据的生成和收集。已成为下一代可观测平台的事实标准。 React(也称为 Re…

【K8s】k8s配置存储卷PersistentVolumeClaim里的readwriteonce是什么意思

示例 参考这个示例 对于其中的ReadWriteOnce参数 ReadWriteOnce是Kubernetes PersistentVolume的访问模式之一。具体来说&#xff1a; ReadWriteOnce&#xff1a;卷可以被一个节点以读写模式挂载。ReadOnlyMany&#xff1a;卷可以被多个节点以只读模式挂载。ReadWriteMany&…

Kotlin 内联函数语法之let、apply、also、run、with的用法与详解

一、介绍 kotlin的语法千奇百怪&#xff0c;今天我们将介绍项目中频率使用比较高的几个内联函数。 二、什么叫内联函数&#xff1f; 内联函数 的语义很简单&#xff1a;把函数体复制粘贴到函数调用处 。使用起来也毫无困难&#xff0c;用 inline关键字修饰函数即可。 语法&a…

详解zookeeper安装使用

目录 1.概述 1.1.功能 1.2.特点 1.3.数据结构 2.安装 2.1.Windows 2.2.Linux 3.基础操作 3.1.增 3.2.删 3.3.改 3.4.查 3.5.监听 4.JAVA操作Zookeeper 4.1.依赖 4.2.客户端 4.3.增 4.4.删 4.5.查 4.6.改 1.概述 1.1.功能 zookeeper&#xff0c;Apache旗下…

amd的cpu有哪些型号(amd的cpu系列介绍)

1、amd处理器有什么系列&#xff1f; 2、AMD各系列CPU和对应的主板型号有哪些&#xff1f; 3、AMD双核CPU有哪几个型号? amd处理器有什么系列&#xff1f; amd处理器的系列有: 1、锐龙&#xff1a;AMD Ryzen是AMD开发并推出市场的x86微处理器品牌&#xff0c;AMD Zen微架构…