蓝桥杯算法|基础笔记(1)

devtools/2025/1/23 19:03:36/

**时间复杂度**

一、概念理解

时间复杂度是用来衡量算法运行时间随输入规模增长而增长的量级。它主要关注的是当输入规模趋向于无穷大时算法执行基本操作的次数的增长趋势,而不是精确的运行时间。

二、分析代码中的基本操作

  1. 确定关键操作
    • 在一段代码中,首先要找出对整体运行时间影响最大的操作。例如,在一个循环中,如果循环体主要是进行简单的算术运算,那么这些算术运算就是基本操作。
    • 对于排序算法,比较元素大小和交换元素位置的操作通常是基本操作。例如在冒泡排序中,比较相邻元素大小并在必要时交换它们的操作是关键操作。
  2. 忽略常量因素
    • 时间复杂度关注的是操作次数的量级,而不是具体的常数。例如,一个算法执行了3n + 5次操作,当n趋向于无穷大时,常数5和系数3相对于n的增长来说影响较小,所以时间复杂度为O(n)。

三、根据代码结构分析

1、常数阶O(1)

没有循环等复杂结构,时间复杂度就都是O(1)。

2、线性阶O(n)

for(int i=0;i<n;i++){......}

3、对数阶O(logN)

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

此处总结:

假设循环x次,寻找x、n的等式关系,转化成“x=——”的形式,看n无穷时关键因素。

 2的x次方等于n,所以,x=log2^n,时间复杂度O(logn)

4、根号阶O(\sqrt{}n)

int i=1;
while(i*i<=n){
i++;
}

5、平方阶O(^{​{_{n}}^{2}}) :循环嵌套

四、不同数据结构对时间复杂度的影响

  1. 数组
    • 随机访问数组元素的时间复杂度为O(1),因为可以通过索引直接定位到元素。但是在数组中查找特定元素(如果没有排序)可能需要遍历整个数组,时间复杂度为O(n)。
  2. 链表
    • 访问链表中的第k个元素,时间复杂度为O(k),因为需要从头节点开始逐个遍历。在链表中查找特定元素也需要逐个节点遍历,平均时间复杂度为O(n)。
  3. 树结构(如二叉树)
    • 对于二叉树的遍历(如先序、中序、后序遍历),时间复杂度为O(n),因为每个节点都需要被访问一次,这里n是树中的节点数量。但是查找操作的时间复杂度取决于树的高度,如果是平衡二叉树,查找的时间复杂度为O(log n),如果是完全不平衡的二叉树(如链表形式的二叉树),查找的时间复杂度为O(n)。

五、范围反推复杂度

**枚举算法**

蓝桥325题​​​​​​

未完待续—》》》


http://www.ppmy.cn/devtools/152948.html

相关文章

如何安装linux版本的node.js

在 Linux 系统上安装 Node.js 可以通过多种方式。以下是一些常见的安装方法&#xff1a; 方法 1: 使用包管理器 Ubuntu / Debian 更新包信息&#xff1a; sudo apt update安装 Node.js 和 npm&#xff1a; sudo apt install nodejs npm验证安装&#xff1a; node -v npm -vCe…

小米Vela操作系统开源:AIoT时代的全新引擎

小米近日正式开源了其物联网嵌入式软件平台——Vela操作系统&#xff0c;并将其命名为OpenVela。这一举动在AIoT&#xff08;人工智能物联网&#xff09;领域掀起了不小的波澜&#xff0c;也为开发者们提供了一个强大的AI代码生成器和开发平台。OpenVela项目源代码已托管至GitH…

WinHttp API接口辅助类实现GET POST网络通讯

1、简述 近期需要在MFC基础上开发网络Http通讯,开始使用的WinINet进行通讯,后面发现WinINet对连接超时这块不支持设置,在网上搜索了几种方式效果都不太好,于是决定用WinHttp API接口进行通讯,分别对GET、POST进行了封装。 2、使用到接口 2.1、WinHttpOpen WinHttpOpen 是…

FPGA 开发工作需求明确:关键要点与实践方法

FPGA开发工作需求明确&#xff1a;关键要点与实践方法 一、需求明确的重要性 在FPGA开发领域&#xff0c;明确的需求是项目成功的基石。FPGA开发往往涉及复杂的硬件逻辑设计、高速信号处理以及与其他系统的协同工作。若需求不明确&#xff0c;可能导致开发过程中频繁变更设计…

C++ 学习:深入理解 Linux 系统中的冯诺依曼架构

一、引言 冯诺依曼架构是现代计算机系统的基础&#xff0c;它的提出为计算机的发展奠定了理论基础。在学习 C 和 Linux 系统时&#xff0c;理解冯诺依曼架构有助于我们更好地理解程序是如何在计算机中运行的&#xff0c;包括程序的存储、执行和资源管理。这对于编写高效、可靠的…

Tensor 基本操作1 unsqueeze, squeeze, softmax | PyTorch 深度学习实战

本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 目录 创建 Tensor常用操作unsqueezesqueezeSoftmax代码1代码2代码3 argmaxitem 创建 Tensor 使用 Torch 接口创建 Tensor import torch参考&#xff1a;https://pytorch.org/tutorials/beginn…

如何实现网页不用刷新也能更新

要实现用户在网页上不用刷新也能到下一题&#xff0c;可以使用 前端和后端交互的技术&#xff0c;比如 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;、Fetch API 或 WebSocket 来实现局部页面更新。以下是一个实现思路&#xff1a; 1. 使用前端 AJAX 或 Fetch…

Linux——线程条件变量(同步)

Linux——多线程的控制-CSDN博客 文章目录 目录 文章目录 前言 一、条件变量是什么&#xff1f; 1、死锁的必要条件 1. 互斥条件&#xff08;Mutual Exclusion&#xff09; 2. 请求和保持条件&#xff08;Hold and Wait&#xff09; 3. 不可剥夺条件&#xff08;No Preemption&…