数据结构前置知识(上)

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,一经查实,立即删除!

相关文章

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

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

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…

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

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

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. 构造 / 析构…

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

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

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

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

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…

外卖点餐系统小程序的设计

管理员账户功能包括:系统首页,个人中心,外卖员管理,餐厅管理,用户管理,菜品分类管理,菜品信息管理,外卖订单管理,订单配送管理 微信端账号功能包括:系统首页…

OKHTTP 如何处理请求超时和重连机制

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

Linux下Docker方式Jenkins安装和配置

一、下载&安装 Jenkins官方Docker仓库地址:https://hub.docker.com/r/jenkins/jenkins 从官网上可以看到,当前最新的稳定版本是 jenkins/jenkins:lts-jdk17。建议下在新的,后面依赖下不来 所以,我们这里,执行doc…

VS+QT 自定义插件变成动态库加载及使用

一、前言 有个界面需要重复使用某个自定义的控件,希望自定义控件能够像动态库文件那样,添加引用lib就能使用,经过多次太坑后,总结如下 二、实现方式 ① 新建项目,选择"Qt Designer Custom Widget" 创建自定…

python爬虫 - 进阶正则表达式

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、匹配中文 (一)匹配单个中文字符 (二…

JavaEE-进程与线程

1.进程 1.1什么是进程 每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运 ⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可 以说是计算机科学…

【动态规划】子数组系列(上)

1. 最大子数组和 53. 最大子数组和 状态表示:以 i 位置为结尾时的所有子数组中的最大和 状态转移方程: i 位置为结尾的子数组又可以分为长度为 1 的和大于 1 的,长度为 1 就是 nums[i] ,长度不为 1 就是 dp[i - 1] nums[i]&…

Prometheus + Grafana 监控 MySQL 数据库

文章目录 1、前置介绍2、搭建流程2.1、安装 Docker2.2、安装 MySQL2.3、安装 MySQL Exporter2.4、安装 Prometheus2.5、安装 Grafana 1、前置介绍 本次监控平台搭建,我使用2台阿里云服务器来完成本次的搭建部署操作,配置如下: 阿里云ECS1&am…

【宝可梦】游戏

pokemmo https://pokemmo.com/zh/ 写在最后:若本文章对您有帮助,请点个赞啦 ٩(๑•̀ω•́๑)۶