算法相关概念

1 算法概述

1.1 算法概念

算法是特定问题求解步骤的描述,也是独立存在的一种解决问题的思想和方法

对于算法而言,实现他的编程语言无关紧要,重要的是思想和方法!!!

公式:程序=算法+数据结构(由wirth提出)

1.2 算法和数据结构的关系

数据结构是静态描述了数据元素直接的关系,一个高效的程序需要选择一个合适的数据结构和一个高效的算法。

算法是为了解决实际问题提出的思想和方法。数据结构是算法需要处理问题的载体。而算法是解决实际问题的灵魂。两者之间是相辅相成的,缺一不可。

1.3 算法效率的度量

一般算法的效率是通过时间复杂度和空间复杂度来度量的,对于现在越来越便宜而且容量越来越大的内存空间来说,我们更关注时间复杂度。当然,在某些特殊场景下,比如在单片机上运行算法时,就有可能‘要考虑空间复杂度。

同一种问题有两种算法A和B来解决,其中A算法的时间复杂度为O(n2),而空间复杂度为O(1),而B算法的时间复杂度为o(n),空间复杂度也为o(n)。如果我们更关注时间上的效率,就要选择B算法,如果在某种情况下空间上的效率更加重要,这时候就要选择算法A。

1.3.1 事后统计法

这种方法可行,但是有两个缺陷

1.要想对算法的性能进行评测,首先要依据该算法选择某种合适的计算机编程语言编制相应的程序:

2.所统计的结果依赖于该算法运行的计算机硬件、软件等环境因素,这些环境因素往往容易掩盖算法本身的优势。

1.3.2 事前分析估算

依据算法本身的策略对算法进行评估,不受外界环境因素影响,算法的评测结果只和算法本身有关。

1.3.3 求解时间复杂度的具体步骤

找出算法中的基本语句(算法中执行次数最多的那条语句就是基本语句),通常是最内存循环的循环体;

计算基本语句的执行次数的数量级,只需要计算基本语句执行次数的数量级,意味着只要保证基本语句执行次数函数中的最高次幂正确即可,可以忽略所有低次幂和系数,这样的话,我们只需要关注最重要的一点:增长率;

用大O记号表示算法的时间性能,将基本语句执行次数的数量级放入大O记号中。

1.3.4 常见的大O表示法相关术语

基本语句执行次数函数非正式术语
18O(1)常数阶
2N+3O(n)线性阶
5n2+7n+8O(n2)平方阶
8logn+19O(logn)对数阶
nlogn+3n+20O(nlogn)nlogn阶
6n3+8n2+9n+100O(n3)立方阶
2n+7n2+9nO(2n2)指数阶

1.3.5 分析下列代码段的时间复杂度

//交换
temp=i;
i=j;
j=temp;

上述代码的时间复杂度为O(1)常数阶。

当一个程序段执行的时间是一个和问题规模n无关的常数时,即算法的执行时间不随着问题的规模n增加而增长,即使算法中有成千山万条语句,其执行时间也不过是一个比较大的常数而已。这类算法的时间复杂度都记为O(1)。

for(i=0;i<n;i++)
{cout<<i;//基本语句,执行n次,时间复杂度为O(n)
}

上述代码的时间复杂度为O(n)。

sum=0;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++){sum++;//基本语句,执行次数的函数是n^2.}
}

上述代码的时间复杂度为O(n2)。

count=1;
while(count<=n)
{count=count*2;
}

上述代码的时间复杂度为O(longn)。

1.3.6 算法的空间复杂度

算法的空间复杂度是对一个算法在运行过程中临时占用存储空间的大小的度量。

一个算法在计算机存储器上所占用的存储空间包括三个部分,包括算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间,算法在运行过程中临时占用的存储空间。

算法本身所占用的存储空间和算法书写的长度成正比,要压缩这方面的空间,就要编写出较短的程序。

算法的输入输出数据所占用的存储空间和要解决的实际问题决定的,它不随着算法的不同而改变。算法在运行过程中临时占用的存储空间大小随着算法的不同而异,有点算法只需要占用少量的临时存储空间,而且不随着问题规模的大小而改变,有点算法占用的临时存储空间和要解决问题的规模有关,它随着n的增大而增大,当n比较大的时候,将占用较多的零食存储空间。

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

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

相关文章

数据库基础与核心操作:从概念到实战的全面解析

目录 1 基本概念2 基本操作2.1 DCL2.2 DDL2.3 DML2.4 DQL(高级查询) 3 高级功能3.1 视图&#xff08;无参函数&#xff09;3.2 存储过程(有参函数)3.3 触发器 4 约束4.1 主键约束4.2 UNIQUE KEY&#xff08;唯一键约束&#xff09;4.3 FOREIGN KEY&#xff08;外键约束&#xf…

打造惊艳的渐变色下划线动画:CSS实现详解

引言&#xff1a;为什么需要动态下划线效果&#xff1f; 在现代网页设计中&#xff0c;微妙的交互效果可以显著提升用户体验。动态下划线特效作为一种常见的视觉反馈方式&#xff0c;不仅能够引导用户注意力&#xff0c;还能为页面增添活力。本文将深入解析如何使用纯CSS实现一…

【11408学习记录】考研英语语法核心:倒装句考点全解+真题演练

倒装句 英语语法总结——特殊句式倒装全部倒装介词短语形容词副词There be 部分倒装否定副词或词组位于句首only位于句首虚拟条件句省略if 每日一句词汇第一步&#xff1a;找谓语第二步&#xff1a;断句第三步&#xff1a;简化主句定语从句 英语 语法总结——特殊句式 倒装 …

upload-labs PASS 1-5通关

PASS-01 前端javascript检查 1&#xff0c;第一个提示javascript对上传的文件进行审查 2&#xff0c;javascript工作在前端页面&#xff0c;可以直接删除具有审查功能的代码 3&#xff0c;删除之后再上传一句话木马 上传成功&#xff0c;可以使用蚁剑进行连接&#xff0c;控制网…

GoogleTest:在Ubuntu22.04安装

1.首先克隆GoogleTest $ mkdir gtest $ cd gtest $ git clone git@github.com:google/googletest.git 克隆后的文件目录结构为 gtest/googletest$ tree -L 1 ├── build ├── BUILD.bazel ├── ci ├── CMakeLists.txt ├── CONTRIBUTING.md ├── CONTRIBUTORS ├─…

Transformer-LSTM-SVM回归

题目&#xff1a;Transformer-LSTM-SVM回归 文章目录 题目&#xff1a;Transformer-LSTM-SVM回归前言一&#xff1a;Transformer1. Transformer的原理1.1 Transformer的核心结构1.2 注意力机制1.4 位置编码1.5 损失函数 2. 完整案例 LSTMSVM 前言一&#xff1a;Transformer 1.…

AI正当时,国内AI HR领先厂商易路如何从“单点突破”到“全面融合”

所谓AI HR‌&#xff0c;是指将人工智能&#xff08;AI&#xff09;技术&#xff08;如机器学习、自然语言处理、大数据分析等&#xff09;应用于人力资源管理的各个环节&#xff0c;以提升效率、优化决策并改善员工体验。典型场景有&#xff1a; 在招聘、考勤、薪酬计算等重复…

浅析localhost、127.0.0.1 和 0.0.0.0的区别

文章目录 三者的解释三者的核心区别总结使用场景示例什么是回环地址常见问题开发工具中的地址使用为什么开发工具同时支持localhost和127.0.0.1&#xff1f;实际应用示例VSCode中的Live Server插件VSCode中的VUE项目IDEA中的Spring Boot应用 最佳实践建议 localhost、 127.0.0…

微信小程序鲜花销售系统设计与实现

概述 在鲜花电商行业快速发展的背景下&#xff0c;移动端销售平台成为花店拓展业务的重要渠道。幽络源平台今日分享一款功能完善的微信小程序鲜花销售系统&#xff0c;该系统实现了多角色管理、在线订购、会员服务等核心功能&#xff0c;为鲜花行业提供了完整的电商解决方案。…

端到端电力电子建模、仿真与控制及AI推理

在当今世界&#xff0c;电力电子不再仅仅是一个专业的利基领域——它几乎是每一项重大技术变革的支柱。从可再生能源到电动汽车&#xff0c;从工业自动化到航空航天&#xff0c;对电力转换领域创新的需求正以前所未有的速度增长。而这项创新的核心在于一项关键技能&#xff1a;…

Elastic Cloud Serverless 现在在 Google Cloud 上正式发布

作者&#xff1a;来自 Elastic Yuvraj Gupta Elastic Cloud Serverless 提供了启动和扩展安全、可观察性和搜索解决方案的最快方式 — 无需管理基础设施。 今天&#xff0c;我们很高兴宣布 Elastic Cloud Serverless 在 Google Cloud 上正式发布 — 现在已在爱荷华&#xff08;…

deepseek_ai_ida_plugin开源插件,用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试

一、软件介绍 文末提供程序和源码下载 deepseek_ai_ida_plugin开源插件&#xff0c;用于使用 DeepSeekAI 将函数反编译并重命名为人类可读的视图。该插件仅在 ida9 上进行了测试。FunctionRenamerDeepseekAI.cpp 此文件包含 Hex-Rays 反编译器的主要插件实现。它反编译当前函数…

信息系统项目管理工程师备考计算类真题讲解十一

一、运筹学 1&#xff09;线性规划 分析&#xff1a;设为获得最大利润&#xff0c;S应生产X件&#xff0c;K生产Y件 10X20Y<120 8X8Y<80 求MAX(12X16Y) 计算下面的方程式&#xff1a; 10X20Y120 8X8Y80 X8 2)交通运输问题&#xff1a; 分析&#xff1a; 此题采…

深入学习解读:《数据安全技术 数据分类分级规则》【附全文阅读】

该文详细阐述了数据安全技术的数据分类分级规则,内容分为基本原则、数据分类规则、数据分级规则及数据分类分级流程四大部分。 基本原则强调科学实用、动态更新、就高从严及53原则(虽表述不清,但可理解为多重原则的结合),同时要求边界清晰、点面结合。 数据分类规…

连接私有数据与大语言模型的强大框架----LlamaIndex详细介绍与案例应用

什么是LlamaIndex&#xff1f; LlamaIndex&#xff08;原GPT Index&#xff09;是一个先进的数据框架&#xff0c;用于将自定义数据源与大语言模型&#xff08;LLM&#xff09;连接起来。它提供了高效的工具来索引、检索和将私有或特定领域的数据集成到LLM应用中&#xff0c;解…

GBDT算法原理及Python实现

一、概述 GBDT&#xff08;Gradient Boosting Decision Tree&#xff0c;梯度提升决策树&#xff09;是集成学习中提升&#xff08;Boosting&#xff09;方法的典型代表。它以决策树&#xff08;通常是 CART 树&#xff0c;即分类回归树&#xff09;作为弱学习器&#xff0c;通…

WordPress开心导航站_一站式网址_资源与资讯垂直行业主题模板

一款集网址、资源与资讯于一体的导航类主题&#xff0c;专为追求高效、便捷用户体验的垂直行业网站而设计无论您是构建行业资讯门户、资源聚合平台还是个人兴趣导航站&#xff0c;这款开心版导航主题都能成为您理想的选择。 核心特色: 一体化解决方案:整合了网址导航、资源下载…

马井堂-区块链技术:架构创新、产业变革与治理挑战(马井堂)

区块链技术&#xff1a;架构创新、产业变革与治理挑战 摘要 区块链技术作为分布式账本技术的革命性突破&#xff0c;正在重构数字时代的信任机制。本文系统梳理区块链技术的核心技术架构&#xff0c;分析其在金融、供应链、政务等领域的实践应用&#xff0c;探讨共识算法优化、…

从像素到驾驶决策:Python与OpenCV赋能自动驾驶图像识别

从像素到驾驶决策:Python与OpenCV赋能自动驾驶图像识别 引言:图像识别的力量驱动自动驾驶 自动驾驶技术正以令人惊叹的速度改变交通方式,而其中最核心的技术之一便是图像识别。作为车辆的“视觉系统”,图像识别可以实时获取道路信息,识别交通标志、车辆、行人等关键目标…

Spring计时器StopWatch 统计各个方法执行时间和占比

Spring计时器StopWatch 用法代码 返回结果是毫秒 一毫秒等于千分之一秒&#xff08;0.001秒&#xff09;。因此&#xff0c;如果你有一个以毫秒为单位的时间值&#xff0c;你可以通过将这个值除以1000来将其转换为秒。例如&#xff0c;500毫秒等于0.5秒。 import org.springf…