当前位置: 首页 > news >正文

❀My学习小记录之算法❀

目录

算法:)

一、定义

二、特征

三、基本要素

常用设计模式

常用实现方法

四、形式化算法

五、复杂度

时间复杂度

空间复杂度

六、非确定性多项式时间(NP)

七、实现

八、示例

求最大值算法

求最大公约数算法

九、分类


算法:)

一、定义

算法(algorithm),在数学(算学)计算机科学之中,为任何良定义的具体计算步骤的一个序列,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。

算法中的指令描述的是一个计算,当其运行时能从一个初始状态和初始输入(可能为空)开始,经过一系列有限而清晰定义的状态最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。

形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效可计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、雅克·埃尔布朗和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年埃米尔·莱昂·珀斯特的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。

二、特征

以下是高德纳在他的著作《计算机程序设计艺术》里对算法的特征归纳:

输入:一个算法必须有零个或以上输入量

输出:一个算法应有一个或以上输出量,输出量是算法计算的结果

明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地符合要求或期望,通常要求实际运行结果是确定的。

有限性:依据图灵的定义,一个算法是能够被任何图灵完全系统模拟的一串运算,而图灵机只有有限个状态、有限个输入符号和有限个转移函数(指令)。而一些定义更规定算法必须在有限个步骤内完成任务。

有效性:又称可行性。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。

三、基本要素

算法的核心创建问题抽象的模型和明确求解目标,之后可以根据具体的问题选择不同的模式和方法完成算法的设计。

常用设计模式

完全遍历法和不完全遍历法:在问题的解是有限离散解空间,且可以验证正确性和最优性时,最简单的算法就是把解空间的所有元素完全遍历一遍,逐个检测元素是否是我们要的解。这是最直接的算法,实现往往最简单。但是当解空间特别庞大时,这种算法很可能导致工程上无法承受的计算量。这时候可以利用不完全遍历方法——例如各种搜索法和规划法——来减少计算量。

分治法:把一个问题分割成互相独立的多个部分分别求解的思路。这种求解思路带来的好处之一是便于进行并行计算。

动态规划:当问题的整体最优解就是由局部最优解组成的时候,经常采用的一种方法。

贪心算法:常见的近似求解思路。当问题的整体最优解不是(或无法证明是)由局部最优解组成,且对解的最优性没有要求的时候,可以采用的一种方法。

线性规划法:见条目。

简并法:把一个问题通过逻辑或数学推理,简化成与之等价或者近似的、相对简单的模型,进而求解的方法。

常用实现方法

递归方法迭代方法

顺序计算并行计算分布式计算:顺序计算就是把形式化算法用编程语言进行单线程序列化后执行。

确定性算法非确定性算法

精确求解近似求解

四、形式化算法

算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务,如计算职工的薪水或打印学生的成绩单。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。

五、复杂度

时间复杂度

算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模n的函数f(n),算法的时间复杂度也因此记做T\left ( n \right )=O\left ( f\left ( n \right ) \right )

算法执行时间的增长率f(n)的增长率正相关,称作渐近时间复杂度,简称时间复杂度

常见的时间复杂度有:常数阶O(1),对数阶,线性阶 O(n),线性对数阶,平方阶,立方阶,...,k次方阶,指数阶。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低 。

空间复杂度

算法的空间复杂度是指算法需要消耗的空间资源。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。

六、非确定性多项式时间(NP)

主条目:NP (复杂度)

七、实现

算法不单单可以用计算机程序来实现,也可以在人工神经网络、电路或者机械设备上实现。

八、示例

求最大值算法

这是算法的一个简单的例子。

我们有一串随机数列。我们的目的是找到这个数列中最大的数。如果将数列中的每一个数字看成是一颗豆子的大小,可以将下面的算法形象地称为“捡豆子”:

①首先将第一颗豆子放入口袋中。

②从第二颗豆子开始检查,如果正在检查的豆子比口袋中的还大,则将它捡起放入口袋中,同时丢掉原先口袋中的豆子。反之则继续下一颗豆子。直到最后一颗豆子。

③最后口袋中的豆子就是所有的豆子中最大的一颗。

以上算法在中国大陆的教科书中通常被叫做“打擂法”或者“循环打擂”:在一个for循环中,每轮循环都有新的挑战者。若挑战者胜的话,挑战者做新擂主,否则擂主卫冕。for循环结束后输出最后的擂主。

下面是一个形式算法,用ANSI C代码表示

int max(int *array, int size)
{  int mval = *array;  int i;  for (i = 1; i < size; i++)if (array[i] > mval)          mval = array[i];  return mval;
}

求最大公约数算法

求两个自然数的最大公约数设两个变量{\displaystyle M}和{\displaystyle N}

①如果{\displaystyle M<N},则交换{\displaystyle M}和{\displaystyle N}

②{\displaystyle M}被{\displaystyle N}除,得到余数{\displaystyle R}

③判断{\displaystyle R=0},正确则{\displaystyle N}即为“最大公约数”,否则下一步

④将{\displaystyle N}赋值给{\displaystyle M},将{\displaystyle R}赋值给{\displaystyle N},重做第一步。

用ANSI C代码表示

//交换2数
void swapi(int *x, int *y)
{  int tmp = *x;  *x = *y;  *y = tmp;
}int gcd(int m, int n)
{  int r;  do  {    if (m < n)swapi(&m, &n);        r = m % n;        m = n;    n = r;  } while (r);  return m;
}

利用if函数以及递归则能做出更为精简的代码,更可省去交换的麻烦。(但是也因为递归调用,其空间复杂度提高)

int gcd(int a,int b)
{    if(a%b)        return gcd(b,a%b);    return b;
}

九、分类

本文学习来源:algorithm(计算机术语)_百度百科

  • 基本算法

    • 深度优先搜索

    • 广度优先搜索

    • 启发式搜索

    • 遗传算法

    • 枚举

    • 搜索

  • 数据结构的算法

  • 数论与代数算法

  • 计算几何的算法

    • 凸包算法

  • 图论的算法

    • 哈夫曼编码

    • 树的遍历

    • 最短路径算法

    • 最小生成树算法

    • 最小树形图

    • 网络流算法

    • 匹配算法

    • 分团问题

  • 动态规划

  • 其他

    • 数值分析

    • 加密算法

    • 排序算法

    • 检索算法

    • 随机化算法

    • 关于并行算法,请参阅并行计算一文。

相关文章:

❀My学习小记录之算法❀

目录 算法:) 一、定义 二、特征 三、基本要素 常用设计模式 常用实现方法 四、形式化算法 五、复杂度 时间复杂度 空间复杂度 六、非确定性多项式时间&#xff08;NP&#xff09; 七、实现 八、示例 求最大值算法 求最大公约数算法 九、分类 算法:) 一、定义 …...

Hive-high Avaliabl

hive—high Avaliable ​ hive的搭建方式有三种&#xff0c;分别是 ​ 1、Local/Embedded Metastore Database (Derby) ​ 2、Remote Metastore Database ​ 3、Remote Metastore Server ​ 一般情况下&#xff0c;我们在学习的时候直接使用hive –service metastore的方式…...

码住!8个小众宝藏的开发者学习类网站

1、simplilearn simplilearn是全球排名第一的在线学习网站&#xff0c;它的课程由世界知名大学、顶级企业和领先的行业机构通过实时在线课程设计和提供&#xff0c;其中包括顶级行业从业者、广受欢迎的培训师和全球领导者。 2、VisuAlgo VisuAlgo是一个免费的在线学习算法和数…...

Postman常见问题及解决方法

1、网络连接问题 如果Postman无法发送请求或接收响应&#xff0c;可以尝试以下操作&#xff1a; 检查网络连接是否正常&#xff0c;包括检查网络设置、代理设置等。 确认请求的URL是否正确&#xff0c;并检查是否使用了正确的HTTP方法&#xff08;例如GET、POST、PUT等&#…...

ubuntu图形化登录默认只有guest session账号解决方法

新安装的ubuntu16.x 图形化界面登录默认只有guest账号&#xff0c;只有进入guest账号之后再去手动切换root账号很麻烦&#xff0c;但是这样确实很安全。为了方便希望能够在登录图形化界面的时候以root身份/或者自定义其他身份登录。做一下简单的记录。 使用终端命令行编辑文件…...

全国计算机等级考试| 二级Python | 真题及解析(1)

一、选择题 1. 按照“后进先出”原则组织数据的数据结构是____ A栈 B双向链表 C二叉树 D队列 正确答案: A 2. 以下选项的叙述中,正确的是 A在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 B在循环队列中,只需要队尾指针就能反映队列中元素的动态变…...

Java开发框架和中间件面试题(9)

目录 102.你了解秒杀吗&#xff1f;怎么设计&#xff1f; 103.什么是缓存穿透&#xff1f;怎么解决&#xff1f; 102.你了解秒杀吗&#xff1f;怎么设计&#xff1f; 1.设计难点&#xff1a;并发量大&#xff0c;应用&#xff0c;数据库都承受不了。另外难控制超卖。 2.设计…...

【ARMv8M Cortex-M33 系列 2 -- Cortex-M33 JLink 连接 及 JFlash 烧写介绍】

文章目录 Jlink 工具JLink 命令行示例JFlash 烧写问题Jlink 工具 J-Link 是 SEGGER 提供的一款流行的 JTAG 调试器,它支持多个平台和处理器。JLink.exe 是 J-Link 调试器的命令行接口,它允许用户通过命令行执行一系列操作,例如编程、擦除、调试等。 工具链接: https://ww…...

react pwa应用示例

创建一个基于React的PWA应用&#xff0c;你可以使用create-react-app&#xff0c;它自带PWA支持&#xff0c;但默认是关闭的。以下是创建React PWA应用的步骤&#xff1a; 安装create-react-app 如果你还没有安装&#xff0c;你可以通过npm来安装&#xff1a; npm install -…...

python如何通过日志分析加入黑名单

python通过日志分析加入黑名单 监控nginx日志&#xff0c;若有人攻击&#xff0c;则加入黑名单&#xff0c;操作步骤如下&#xff1a; 1.读取日志文件 2.分隔文件&#xff0c;取出ip 3.将取出的ip放入list&#xff0c;然后判读ip的次数 4.若超过设定的次数&#xff0c;则加…...

RabbitMq知识概述

本文来说下RabbitMq相关的知识与概念 文章目录 概述AMQP协议Exchange 消息如何保证100&#xff05;投递什么是生产端的可靠性投递可靠性投递保障方案 消息幂等性高并发的情况下如何避免消息重复消费confirm 确认消息、Return返回消息如何实现confirm确认消息return消息机制 消费…...

专业级A链接测试特有

A链接普通 A链接添加链接描述带有blank...

Spring Boot 入参校验及全局异常处理

版本依赖 JDK 17 Spring Boot 3.2.0 源码地址&#xff1a;Gitee Spring Boot validation spring-boot-starter-validation是基于hibernate-validator的实现&#xff0c;在Spring Boot项目中直接导入spring-boot-starter-validation即可。 Valid 和 Validated 的区别 适用范围…...

MySQL 和 MySQL2 的区别

MySQL是最流行的开源关系型数据库管理系统,拥有大量的使用者和广泛的应用场景。而MySQL2是MySQL官方团队推出的新一代MySQL驱动&#xff0c;用于取代老版的MySQL模块&#xff0c;提供更好的性能和更丰富的功能。 本文将介绍MySQL2相较于MySQL有哪些优势以及具体的技术区别。 …...

AutoCAD图纸打印后内容不见

用户反映&#xff0c;在CAD里的对象打印出来不显示。其实&#xff0c;这是在CAD的打印对象颜色的问题。&#xff08;在9.2以下版本有这种问题&#xff0c;9.2及以上版本已默认此种颜色&#xff09; 1.当背景色为黑色的时候&#xff0c;这里的颜色是白&#xff0c;如下图 2.当C…...

ASUS华硕ROG幻16 2023款GU603VU VV VI笔记本电脑原厂Win11.22H2系统

链接&#xff1a;https://pan.baidu.com/s/1AgevUZleCHBJgCBcIp5CFQ?pwdhjxy 提取码&#xff1a;hjxy 华硕笔记本2023款幻16原厂Windows11系统自带所有驱动、出厂主题壁纸、Office办公软件、MyASUS华硕电脑管家、Armoury Crate奥创控制中心等预装程序 文件格式&#xff1…...

学习笔记 k8s常用kubectl命令

k8s常用kubectl命令 pod 相关强制删除pod查看 Pod 中指定容器的日志pod 扩容 etcd 备份集群设置集群上下文配置文件切换集群 节点cordondrain pod 相关 强制删除pod pod 状态terminal了&#xff0c;需要强制删除 kubectl delete pod <pod_name> --grace-period0 --force…...

企业数据可视化-亿发数据化管理平台提供商,实现一站式数字化运营

近些年来&#xff0c;国内企业数据化管理升级进程持续加速&#xff0c;以物联网建设、人工智能、大数据和5G网络等新技术的发展&#xff0c;推动了数字经济的蓬勃发展&#xff0c;成为维持经济持续稳定增长的重要引擎。如今许多国内中小型企业纷纷摒弃传统管理模式&#xff0c;…...

网络通信-Linux 对网络通信的实现

Linux 网络 IO 模型 同步和异步&#xff0c;阻塞和非阻塞 同步和异步 关注的是调用方是否主动获取结果 同步:同步的意思就是调用方需要主动等待结果的返回 异步:异步的意思就是不需要主动等待结果的返回&#xff0c;而是通过其他手段比如&#xff0c;状态通知&#xff0…...

mysql修改密码

mysql -u root -p ALTER USER USER() IDENTIFIED BY root; FLUSH PRIVILEGES; 其它cmd&#xff1a; ①查看端口&#xff0c;找到占用3306端口的进程&#xff1a;命令行输入 netstat -aon &#xff0c;找到端口号为3306的对应的PID ②结束占用端口3306的进程&#xff1a;命令…...

百考通:AI全流程智能化驱动数据分析,让数据价值高效落地

在数字化浪潮席卷各行各业的今天&#xff0c;数据已成为核心生产要素&#xff0c;但如何从海量数据中挖掘价值、辅助决策&#xff0c;始终是企业与个人面临的核心难题。传统数据分析流程繁琐、技术门槛高、周期漫长&#xff0c;让许多非专业人士望而却步。百考通&#xff08;ht…...

测试自动化维护成本:如何实现50%降本增效

一、自动化测试维护成本的核心痛点 1.1 成本构成分析 脚本维护成本&#xff08;占总成本60%-70%&#xff09; 页面改版导致的元素定位失效&#xff08;平均每次影响30%脚本&#xff09; 业务逻辑变更引发的用例重构&#xff08;单次维护耗时2-8小时&#xff09; 环境维护成…...

别再为UVM环境发愁了!用路科V0虚拟机+《UVM实战》源码,10分钟搞定VCS/Verdi仿真

10分钟零配置玩转UVM验证&#xff1a;路科V0虚拟机《UVM实战》全攻略 当我在三年前第一次接触UVM验证时&#xff0c;花了整整三天时间在环境配置上——从EDA工具安装、环境变量配置到Makefile调试&#xff0c;每一步都踩过坑。直到发现路科V0预配置虚拟机这个"神器"&…...

ECharts 进阶:用pictorialBar打造沉浸式3D数据看板

1. 从立体柱状图到3D数据看板的进化之路 第一次看到pictorialBar这个配置项时&#xff0c;我正对着产品经理要求的"科技感大屏"发愁。传统柱状图在会议室大屏上就像黑白电视一样乏味&#xff0c;直到发现ECharts这个隐藏技能——用几行代码就能把平面图表变成带光影效…...

ReAct让AI像人一样“边想边做”,轻松搞定复杂问题!

写在前面 欢迎回到我们的智能体架构系列。上一期我们聊了工具调用&#xff0c;让智能体“长出了手”&#xff0c;能去外部世界获取信息。但很快我们就发现&#xff0c;光有手还不够。面对“谁是《沙丘》制片公司的CEO&#xff0c;以及该公司最近一部电影的预算&#xff1f;”这…...

cv_resnet50_face-reconstruction多场景落地解析:医疗影像预处理与教育人脸建模

cv_resnet50_face-reconstruction多场景落地解析&#xff1a;医疗影像预处理与教育人脸建模 1. 项目简介&#xff1a;一个开箱即用的人脸重建工具 如果你正在寻找一个能快速上手、无需复杂配置的人脸重建工具&#xff0c;那么cv_resnet50_face-reconstruction项目值得你关注。…...

SQLAdvisor终极调优指南:如何根据业务特点优化工具参数

SQLAdvisor终极调优指南&#xff1a;如何根据业务特点优化工具参数 【免费下载链接】SQLAdvisor 输入SQL&#xff0c;输出索引优化建议 项目地址: https://gitcode.com/gh_mirrors/sq/SQLAdvisor SQLAdvisor是由美团点评公司技术工程部DBA团队开发的一款强大的SQL索引优…...

八位行波进位加法器设计全攻略:从理论到Quartus II实现

八位行波进位加法器设计全攻略&#xff1a;从理论到Quartus II实现 在数字电路设计中&#xff0c;加法器是最基础也是最重要的运算单元之一。无论是简单的计算器还是复杂的CPU&#xff0c;都离不开高效可靠的加法器设计。八位行波进位加法器作为入门级但实用性极强的设计案例&a…...

Knife4j在SpringBoot3中的高级配置:自定义首页、多语言支持与安全认证

Knife4j在SpringBoot3中的高级配置&#xff1a;自定义首页、多语言支持与安全认证 当你的SpringBoot3项目已经完成Knife4j的基础集成&#xff0c;接下来可能会面临这样的需求&#xff1a;如何让API文档更符合企业品牌形象&#xff1f;如何为国际团队提供多语言支持&#xff1f…...

206_深度学习进阶:模型选择、过拟合与欠拟合的生存法则

在机器学习中&#xff0c;我们的目标是发现泛化&#xff08;Generalization&#xff09;模式&#xff0c;即在未见过的数据上也能预测准确。然而&#xff0c;模型往往会陷入两个极端&#xff1a;要么学得太浅&#xff08;欠拟合&#xff09;&#xff0c;要么记住了噪音&#xf…...