数据结构:绪论之时间复杂度与空间复杂度

数据结构:绪论之时间复杂度与空间复杂度

作者主页

失踪人口回归,陆续回三中。
开辟文章新专栏——数据结构,恳请各位大佬批评指正!


在这里插入图片描述

文章目录

数据结构的基本知识

数据:

数据是信息的载体

数据元素:

数据元素是数据的基本单位,数据项是构成元素不可分割的最小单位。

数据对象:

具有相同性质的数据元素的集合

数据类型:

  1. 原子类型
  2. 结构类型
  3. 抽象数据类型(ADT):描述了数据的逻辑运算和抽象运算,从而构成一个完整的数据结构定义

数据结构:

有一种或多种特定关系的数据元素的集合

逻辑结构:元素之间的逻辑关系

在这里插入图片描述

集合:元素同属于一个集合

线性结构:一对一,除了第一个元素,所有元素都有唯一先驱,除了最后一个元素,所有元素都有唯一后继

树形结构:一对多

网状结构:多对多

存储结构:物理结构

顺序存储:数据存储在相邻存储单元中,可以实现随机存储,但是外部碎片多

链式存储:利用存储地址的指针来表示元素之间的逻辑关系,不会出现碎片现象,但是要存储指针占用额外空间,只能实现顺序存取

索引存储:检索快,但索引表占用额外空间,增删数据时也要修改索引表,花费时间较多

散列存储:根据元素的关键字直接计算出该元素存储地址,也称哈希存储。快,但是如果散列函数不好,会导致冲突浪费时间

数据运算

算法与其评价

算法的概念:

是对特定问题求解步骤的一种描述。程序=数据结构+算法(步骤)

算法具有:有穷性,确定性,可行性,输入,输出

算法是有穷的,程序是无穷的

一个好的算法应该具备:正确性,可读性,健壮性,高效率与低存储量需求

算法效率的评价:

时间复杂度

  • 定义:衡量算法执行时间随输入规模增长的变化趋势,不关注具体执行时长,关注的是输入规模变大时,算法运行时间的增长快慢。
  • 计算规则:
    • 只保留常数项
    • 保留最高项
    • 乘法规则:如果一个算法是嵌套结构,外层操作数量级是(f(n)),内层是(g(n)),那么整体时间复杂度就是两者相乘 。比如外层循环n次,内层循环m次,整体时间复杂度就是(O(n×m)) 。
  • 如何计算:顺序执行的代码只会影响常数项,可以忽略只需挑循环中的一个基本操作分析它的执行次数与n的关系即可如果有多层嵌套循环,只需关注最深层循环几次就行了
  • 三种复杂度:最坏时间复杂度:考虑输入数据“最坏的情况”,执行次数最多的时候平均时间复杂度:考虑所有输入数据都等概率出现的情况最好时间复杂度:考虑输入数据的最好的情况,

量级比较:“常对幂指阶” 是常见时间复杂度量级从小到大的排序,也是保留阶数最高的依据。

在这里插入图片描述

加法规则:当一个算法由多个部分组成时,这意味着在计算总时间复杂度时,取各部分时间复杂度中量级最大的那个。例如,算法一部分时间复杂度是(O(n)),另一部分是(O(n2)),整体时间复杂度就是(O(n2)) 。

voidloveyou(int n){//1次int i =1;//3001次while(i<=n){//3000*2次 i++;printf("i love you ");}}intmain(){loveyou(3000)}//T(n)=1+3001+3000*2//T(n)=3n+3

常用技巧

在这里插入图片描述

表述方法:用大 O 符号(Big O notation)表示,如 O (1)、O (n)、O (n²) 等。通过分析算法中基本操作的执行次数与输入规模 n 的关系来确定,忽略低阶项和常数系数,保留最高阶项表示量级 。

在这里插入图片描述

空间复杂度

  • 空间复杂度的定义:空间复杂度(Space Complexity)是衡量算法在执行过程中临时占用存储空间大小的量度。它反映了算法所需存储空间与输入数据大小之间的关系。空间复杂度通常用大O表示法来表示。2.2 空间复杂度的分析同时间复杂度一样用大O表示法表示;也是表示一个数量级。记作:
  • 2.3 常见的空间复杂度常数阶:如果算法的空间复杂度不随问题规模 n 的变化而变化,即算法所需的存储空间是一个常数,那么空间复杂度为 O(1)。线性阶:如果算法所需的存储空间与问题规模 n 成正比,即算法所需的存储空间随着 n 的增加而线性增加,那么空间复杂度为O(n)。多项式阶:如果算法所需的存储空间与问题规模 n 的关系可以表示为多项式函数,即空间复杂度为 O(n^k),其中 k 是一个正整数。对数阶:如果算法所需的存储空间与问题规模 n 的关系可以表示为对数函数,即空间复杂度为 O(log n)。指数阶:如果算法所需的存储空间与问题规模 n 的关系可以表示为指数函数,即空间复杂度为 O(2^n)。

多项式函数,即空间复杂度为 O(n^k),其中 k 是一个正整数。

对数阶:

如果算法所需的存储空间与问题规模 n 的关系可以表示为对数函数,即空间复杂度为 O(log n)。

指数阶:

如果算法所需的存储空间与问题规模 n 的关系可以表示为指数函数,即空间复杂度为 O(2^n)。

Read more

Llama3-8B对话体验差?open-webui界面调优实战案例

Llama3-8B对话体验差?open-webui界面调优实战案例 1. 为什么Llama3-8B在open-webui里“不好用” 你是不是也遇到过这种情况:明明拉下了Meta-Llama-3-8B-Instruct的GPTQ-INT4镜像,显卡是RTX 3060,vllm也跑起来了,open-webui网页也打开了,可一输入问题,响应慢、回复短、上下文断连、甚至反复重复同一句话?不是模型不行,而是默认配置没对上——就像给跑车装了自行车刹车片。 Llama3-8B本身素质过硬:80亿参数、原生8k上下文、英语指令遵循能力对标GPT-3.5、MMLU 68+、HumanEval 45+,单卡3060就能跑。但它对对话系统层的调度逻辑非常敏感。open-webui作为前端界面,默认采用的是通用型API调用策略,而没针对Llama3系列的tokenizer行为、stop token设计、streaming节奏做适配。结果就是: * 模型已生成完,界面还在等“结束信号”; * 多轮对话中,system prompt被意外截断或覆盖; * 中文输入时,因token边界识别不准,

By Ne0inhk
【Linux网络系列】:JSON+HTTP,用C++手搓一个web计算器服务器!

【Linux网络系列】:JSON+HTTP,用C++手搓一个web计算器服务器!

🔥 本文专栏:Linux网络Linux实践系列 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录:别害怕选错,人生最遗憾的从不是‘选错了’,而是‘我本可以’。每一次推倒重来的勇气,都是在给灵魂贴上更坚韧的勋章。 ★★★ 本文前置知识: 序列化与反序列化 引入 在之前的博客中,我详细介绍了序列化 与反序列化 的概念。对于使用 TCP 协议进行通信的双方,由于 TCP 是面向字节流的,在发送数据之前,我们通常需要定义一种结构化的数据来描述传输内容,并以此作为数据的容器。在 C++ 中,这种结构化数据通常表现为对象或结构体。然而,我们不能直接将结构体内存中对应的字节原样发送到另一端,因为直接传递内存字节会引发字节序 和结构体内存对齐 的问题。不同平台、不同编译器所遵循的内存对齐规则可能不同,这可能导致接收方在解析结构体字段时出现错误。 因此,我们需要借助序列化 。序列化 是指将结构化的数据按照预定的规则转换为连续的字节流。其主要目的是屏蔽平台差异,使得位于不同平台的进程能够以统一的方式解析该字节流。序列化通常分为两种形式:文本序列化 与二进制序列化 。 文

By Ne0inhk
前端实现B站视频画中画功能 - 完整代码实现主页面和小窗同步视频控制功能

前端实现B站视频画中画功能 - 完整代码实现主页面和小窗同步视频控制功能

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战 🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解 🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用 🍎 《前端技术》专栏以实战为主介绍日常开发中前端应用的一些功能以及技巧,均附有完整的代码示例 ✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧 💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程 🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整 👍《Spring Security》专栏中我们将逐步深入Spring Security的各个

By Ne0inhk

前端国际化全流程落地:TSF / TSP 翻译工具实战指南(Vue 版)

导读 本文详细讲解前端项目国际化翻译的全流程落地方案,涵盖「翻译平台配置→工具初始化→开发实现→发布上线→回滚操作」核心环节,重点介绍 TSF 翻译工具、TSP 平台的实操配置与最佳实践,解决翻译文件管理、多环境发布、缓存处理等核心问题,适配 Vue 技术栈的国际化开发场景。 一、整体概览 api请求服务 返回翻译文件 业务开发 业务开发 npx spc-tsf update npx spc-tsf upload npx spc-tsf export 终端 i18n, $gt, tsp 平台初始化,集成翻译 TSP 平台对 key 进行分环境版本管理,包括发布,回滚操作 短文案,不易变的文案,使用

By Ne0inhk