数据结构前置知识(上)

1. 初识集合框架

        1.1 什么是集合框架

        在了解集合框架之前,我们先来认识一下数据结构,所谓数据结构就是描述和组织数据的一个东西.

        那什么是集合框架呢?在java里面集合框架(Java Collection Framework),又被称为容器container,说白了就是很多个接口,抽象类,实现类组成的一个包,集合框架的这些实现类和接口被放在java.util下面.主要用来对元素进行增删查改.

        下图是主要的结构:

                接口之间是extends扩展关系,类和类之间是extends继承关系,接口与类之间是

implements实现关系.

        1.2 后续会实现的底层

        1> Collection: 是一个接口,包含了大部分容器常用的一些方法

        2> List: 是一个接口,规范了ArrayList和LinkedList中要实现的方法

                ArrayList: 实现了List接口,底层为动态类型顺序表

                LinkedList: 实现了List接口,底层为双向链表

        3> Stack: 底层是栈,栈式一种特殊的顺序表(先进后出)

        4> Queue: 底层是队列,队列是一种特殊的顺序表(先进先出)

        5> Deque: 是一个接口

        6> Set: 集合,是一个接口里面放的是K模型

                HashSet: 底层是哈希桶,查询的时间复杂度是O(1)

                TreeSet: 底层是红黑树,查询的时间复杂度为O(log2N),关于key有序的

        7> Map: 映射,里面存储的是K-V模型的键值对

                HashMap: 底层是哈希桶,查询的时间复杂度是O(1)

                TreeSet: 底层是红黑树,查询的时间复杂度为O(log2N),关于key有序的

2. 时间复杂度空间复杂度

          2.1 如何衡量一个算法的好坏?

                衡量一个算法的好坏,我们一般分俩种情况

                1> 时间效率

                        时间复杂度,粗略估计用大O的渐进表示法,计算的是算法中的基本操作的执行次数

                2> 空间效率

                        空间复杂度,临时占用存储空间大小的度量.(额外的开销)

                对于一个复杂度,我们一般从这三个方面来考虑

                1> 最好情况下

                2> 平均情况下

                3> 最坏情况下(这个是我们以后默认讨论的情况)

              2.2 时间复杂度

                   算法的时间复杂度是一个数学函数,算法中的基本操作的执行次数,为算法的时间复杂度。

                              2.2.1 大O的渐进表示法

                                几个规则:

                                1> 用常数1 取代运行时间中所有的加法常数

                                2> 在修改后的运行次数函数中,只保留幂次最高的项数(这个和高数的取极限类似,当n比较于无穷的时候幂次最大的项数占主导地位,也叫做取大头)

                                3> 最高阶的项数于之相乘的常数化为1

                经历以上三个步骤就可以算出来大O阶 

                                       我们来看一个详细例子

        

                                 2.2.2 几个小例题

                

               

我们计算递归的话,需要注意一下,我们计算的是 递归的次数*每次递归后执行的次数

相当于等比数列求和:

2^0+2^1+....+2^(n-)

可以得出O(2^n)

                2.3 空间复杂度

                我们之间看题目

我们每次调用dibonacci就会创建一个数组,大小为N,因此空间复杂度为O(N)

这个我们递归了N次,开辟了N个栈帧,因此空间复杂度为O(N)

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

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

相关文章

解决Element-ui input 在搜狗输入法下,限制输入数字时先输入汉字后无法绑定的问题

在使用 Element UI 的 el-input 组件时,如果需要限制用户只能输入数字,并且确保在输入汉字后再输入数字能够正确绑定,以下提供两种解决方案,需要根据情况适当修改 监听 input 事件并处理值: 可以在 el-input 组件上监听…

架构设计笔记-12-信息系统架构设计理论与实践

目录 知识要点 案例分析 1.Java企业级应用系统 2.c/s架构,b/s架构 知识要点 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义了一类架构所共有的特征,主要包括架构定义、架构词汇表和架构约束。 数据挖掘是从数据库的大…

大模型 memory 记忆 缓存的应用

在探讨大模型的“memory”(记忆)功能时,我们通常会涉及缓存、存储以及如何有效管理和利用这些记忆来增强模型的性能。以下是对大模型memory记忆、缓存及相关概念的详细分析: 一、大模型的记忆功能 大模型,特别是大型…

OceanBase 4.x 部署实践:如何从单机扩展至分布式部署

OceanBase 4.x 版本支持2种部署模式:单机部署与分布式部署,同时支持从单机平滑扩展至分布式架构。这样,可以有效解决小型业务向大型业务转型时面临的扩展难题,降低了机器资源的成本。 以下将详述如何通过命令行,实现集…

解决IPv6网络引起的网页与程序卡顿问题-本地DNS解析方案

一、问题环境 连接IPv6WiFi网络时,易出现网页打不开,程序开启无法加载画面。系统环境为Win10。 二、解决思路 在用户端无法触及路由器、网关等管理资源时,只能从本地环境中更改配置。多适用于公共WiFi,私人WiFi可直接从路由器DNS、…

手撕数据结构 —— 队列(C语言讲解)

目录 1.什么是队列 2.如何实现队列 3.队列的实现 Queue.h中接口总览 具体实现 结构的定义 初始化 销毁 入队列 出队列 取队头元素 取队尾元素 判断是否为空 获取队列的大小 4.完整代码附录 Queue.h Queue.c 1.什么是队列 队列是一种特殊的线性表&#xff0…

【uni-app】HBuilderX安装uni-ui组件

目录 1、官网找到入口 2、登录帐号 3、打开HuilderX 4、选择要应用的项目 5、查看是否安装完成 6、按需安装 7、安装完毕要重启 8、应用 前言:uniapp项目使用uni-ui组件方式很多,有npm安装等,或直接创建uni-ui项目,使用un…

linux命令之less用法

less 分屏上下翻页浏览文件内容 补充说明 less命令 的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页&…

【Oracle数据库进阶】001.SQL基础查询_查询语句

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :&#x1…

时尚的社会心理机制:求同和树异这对互为矛盾的心理动机,使得人们在社会生活中互相模仿、互相追逐、互相竞争,使得时尚的钟摆永不停息。

文章目录 引言I 时尚时尚的社会心理机制时尚的分类时尚的特点时尚的表现形式II 术语时装周服饰引言 时尚(fad)又称流行,它指在一定时期内社会上或一个群体中普遍流行的,并为大多数所仿效的生活方式或行为模式。 人的心理动机常常是互相矛盾的,既要求同于人,又要求异于人。…

uniapp x 样式 uvue css 样式节选

uniapp的下一版本uniapp x已经发布,uniapp x支持的样式为uvue css。 1、css模块 模块App支持情况备注背景与边框√不支持背景图盒子模型√Flex 布局√Inline 布局Inline-Block 布局Block 布局字体√详见Positioned 布局√CSS AnimationxCSS Transition√CSS Varia…

Aria2Cloudreve任意文件写入到RCE

什么是Aria2 Aria2 是一个轻量级的命令行下载工具,支持多种下载协议,如 HTTP、FTP、SFTP、BitTorrent 和 Metalink。它以其强大的多源下载能力而著称,可以同时从多个服务器或对等节点下载文件,加快下载速度。Aria2 占用资源少&am…

【C++】拆分详解 - vector

文章目录 一、vector的介绍二、vector的使用1. 构造2. 迭代器3. vector 空间增长问题4. 增删查改5. vector 迭代器失效问题5.1 底层空间改变(扩容、缩容)5.2 指定位置元素的删除操作5.3 Linux与VS平台差异 三、vector 模拟实现0. 整体框架1. 构造 / 析构…

基于Python的自然语言处理系列(31):SpaCy + Training Neural Network

1. 介绍 在自然语言处理的多个任务中,训练神经网络模型是一个至关重要的步骤,它能帮助我们实现更精准的模型预测。对于特定的任务,如命名实体识别(NER)或文本分类,使用自定义的训练数据对模型进行微调是提高模型表现的有效方式。在这篇文章中,我们将深入探讨如何从零开始…

专业软件许可证监测系统的设计与实现

摘要:整车企业每年投入大量资金采购各类专业软件,为掌握软件许可证的真实需求,建立了专业软件许可证监测系统,实现在公司范围内软件集中管理和统一监控,节约软件投资成本。该研究提出了软件许可证监测系统的设计思路和…

图解 微信开发者工具 小程序源码 调试、断点标记方法 , 微信小程序调试器,真机调试断点调试方法,小程序网络API请求调试方法 总结

在我们使用微信开发者工具进行微信小程序开发的时候,在这个微信开发者工具的代码编辑框里面我们是无法像使用vscode, idea等IDE工具时那样直接对代码打断点进行调试, 原因是小程序实际上他就是一个web浏览器应用的包装, 在其内部使用的还是类似chrome的…

塔吊识别数据集 yolo格式 共5076张图片 已划分好训练验证 txt格式 yolo可直接使用

塔吊识别数据集 yolo格式 共5076张图片 已划分好训练验证 txt格式 yolo可直接使用。 类别:塔吊(Tower-crane) 一种 训练数据已划分,配置文件稍做路径改动即可训练。 训练集: 4724 (正面3224 负面1500) 验证集&#xf…

若依框架生成多个sheet的Excel方法

步骤: 1,创建一个Excel的sheet的实体类 package com.XXX.common.utils.poi; import java.util.List;public class ExcelExp {private String fileName;// sheet的名称private String[] handers;// sheet里的标题private List dataset;// sheet里的数据集…

C#实现Punycode编码/解码

测试代码 string word "我爱你"; string idn "我爱你.中国"; string wordCode PunyCode.Encode(word); string punycode PunyCode.IDN2Punycode(idn);Console.WriteLine(word); Console.WriteLine(wordCode); Console.WriteLine(PunyCode.Decode(word…

Docker:容器化技术的革命力量

Docker:容器化技术的革命力量 在当今的软件开发和部署领域,Docker 无疑是一颗璀璨的明星。它以其独特的魅力和强大的功能,改变了我们构建、交付和运行应用程序的方式。本文将深入探讨 Docker 的方方面面,带你领略它的魅力所在。 …