深圳的网站建设公司/网站友情链接查询

深圳的网站建设公司,网站友情链接查询,企业网站开发工资,北京网站建设新闻【Java八股文】10-数据结构与算法面试篇 数据结构与算法面试题数据结构红黑树说一下跳表说一下?LRU是什么?如何实现?布隆过滤器怎么设计?时间复杂度? 排序算法排序算法及空间复杂度 数据结构与算法面试题 数据结构 红…

【Java八股文】10-数据结构与算法面试篇

  • 数据结构与算法面试题
  • 数据结构
    • 红黑树说一下
    • 跳表说一下?
    • LRU是什么?如何实现?
    • 布隆过滤器怎么设计?时间复杂度?
  • 排序算法
    • 排序算法及空间复杂度


数据结构与算法面试题

数据结构

红黑树说一下

红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它在插入和删除操作后能够通过旋转和重新着色来保持树的平衡。红黑树的特点如下:

  • 每个节点都有一个颜色,红色或黑色。
  • 根节点是黑色的。
  • 每个叶子节点(NIL节点)都是黑色的。
  • 如果一个节点是红色的,则它的两个子节点都是黑色的。
  • 从根节点到叶子节点或空子节点的每条路径上,黑色节点的数量是相同的。

红黑树通过这些特性来保持树的平衡,确保最长路径不超过最短路径的两倍,从而保证了在最坏情况下的搜索、插入和删除操作的时间复杂度都为O(logN)。epoll 用了红黑树来保存监听的 socket。

跳表说一下?

跳表(Skip List)是一种基于链表的数据结构,它通过添加多层索引来加速搜索操作。

  • 跳表中的数据是有序的。
  • 跳表中的每个节点都包含一个指向下一层和右侧节点的指针

跳表通过多层索引的方式来加速搜索操作。最底层是一个普通的有序链表,而上面的每一层都是前一层的子集,每个节点在上一层都有一个指针指向它在下一层的对应节点。这样,在搜索时可以通过跳过一些节点,直接进入目标区域,从而减少搜索的时间复杂度。

跳表的平均搜索、插入和删除操作的时间复杂度都为O(logN),但空间复杂度稍高。跳表常用于需要高效搜索和插入操作的场景,如数据库、缓存等。redis 用了跳表来实现 zset。

LRU是什么?如何实现?

LRU 是一种缓存淘汰算法,当缓存空间已满时,优先淘汰最长时间未被访问的数据。

实现的方式是哈希表+双向链表结合。

在这里插入图片描述

  • 使用哈希表存储数据的键值对,键为缓存的键,值为对应的节点。
  • 使用双向链表存储数据节点,链表头部为最近访问的节点,链表尾部为最久未访问的节点。
  • 当数据被访问时,如果数据存在于缓存中,则将对应节点移动到链表头部;如果数据不存在于缓存中,则将数据添加到缓存中,同时创建一个新节点并插入到链表头部。
  • 当缓存空间已满时,需要淘汰最久未访问的节点,即链表尾部的节点。

上面这种思想方式,LRU 算法可以在 O(1) 的时间复杂度内实现数据的插入、查找和删除操作。

布隆过滤器怎么设计?时间复杂度?

布隆过滤器」可以用来解决类似的问题,具有运行快速,内存占用小的特点,它是一个保存了很长的二级制向量,同时结合 Hash 函数实现的。

而高效插入和查询的代价就是,它是一个基于概率的数据结构,只能告诉我们一个元素绝对不在集合内,对于存在集合内的元素有一定的误判率。

  • 初始化:当我们创建一个布隆过滤器时,我们首先创建一个全由0组成的位数组(bit array)。同时,我们还需选择几个独立的哈希函数,每个函数都可以将集合中的元素映射到这个位数组的某个位置。
  • 添加元素:在布隆过滤器中添加一个元素时,我们会将此元素通过所有的哈希函数进行映射,得到在位数组中的几个位置,然后将这些位置标记为1。
  • 查询元素:如果我们要检查一个元素是否在集合中,我们同样使用这些哈希函数将元素映射到位数组中的几个位置,如果所有的位置都被标记为1,那么我们就可以说该元素可能在集合中。如果有任何一个位置不为1,那么该元素肯定不在集合中

排序算法

排序算法及空间复杂度

  • 插入类排序:
    • 直接插入排序:将待排序元素逐个插入到已排序序列的合适位置,形成有序序列。
      • 时间复杂度:平均为O(N2),最好情况下为O(N),最坏情况下为O(N2)。
      • 空间复杂度:因为每回只移动一个所以空间复杂度为O(1)。
      • 稳定性:稳定。
    • 折半插入排序:将排好元素一分为二来进行查找插入的位置。
      • 时间复杂度:平均为O(N^2),最好情况下为O(NlogN),最坏情况下为O(N2)。
      • 空间复杂度:因为每回只移动一个所以空间复杂度为O(1)。
      • 稳定性:稳定。
    • 希尔排序:将待排数组分成若干个稀疏的子序列,分别进行直接插入排序,使得稀疏的子序列较为有序,然后再全部进行次直接插入排序,即可完成。
      • 时间复杂度:业界统一认为为O(N^1.3)。
      • 空间复杂度:因为每回只移动一个所以空间复杂度为O(1)
      • 稳定性:不稳定。
  • 交换类排序
    • 冒泡排序:在扫描的过程中顺次比较相邻的两个元素的大小,若逆序就交换位置。
      • 时间复杂度:平均为O(N2),最好情况下为O(N),最坏情况下为O(N2)。
      • 空间复杂度:因为每回只移动一个所以空间复杂度为O(1)。
      • 稳定性:稳定。
    • 快速排序
      • 时间复杂度:平均为O(NlogN),最好情况下为O(NlogN),最坏情况下为O(N^2)。
      • 空间复杂度:使用递归进行深搜,所以为O(NlogN)。
      • 稳定性:不稳定。
  • 选择排序
    • 简单选择排序:从第一个记录开始,通过n-1次关键字比较,从n个记录中选择出关键字最小的记录,并和第一个记录进行比较。
      • 时间复杂度:平均为O(N2),最好情况下为O(N2),最坏情况下为O(N^2)。
      • 空间复杂度:因为每回只移动一个所以空间复杂度为O(1)。
      • 稳定性:不稳定。
    • 堆排序:把待排序的数字看成一颗完全二叉树的顺序表示,每个结点表示一个记录,第一个记录作为二叉树的根,对剩下的记录依次逐层从左到右顺序排序,(i从0开始)任意节点r[i]的左孩子是r[2r+1],右孩子是r[2i+2],双亲是r[(i+1)/2-1]。对这颗完全二叉树进行调整。大根堆: r[i]>r[2i+1]且r[i]>r[2i+2],也就是父节点大于孩子节点的完全二叉树称为大根堆。
      • 时间复杂度:平均为O(NlogN),最好情况下为O(NlogN),最坏情况下为O(NlogN)。
      • 空间复杂度:因为每回只移动一个所以空间复杂度为O(1)。
      • 稳定性:不稳定。

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

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

相关文章

Docker换源加速(更换镜像源)详细教程(2025.2最新可用镜像,全网最详细)

文章目录 前言可用镜像源汇总换源方法1-临时换源换源方法2-永久换源(推荐)常见问题及对应解决方案1.换源后,可以成功pull,但是search会出错 补充1.如何测试镜像源是否可用2.Docker内的Linux换源教程 换源速通版(可以直…

华为云deepseek大模型平台:deepseek满血版

华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 1、注册: 华为云deepseek大模型平台注册:https://cloud.siliconflow.cn/i/aDmz6aVN 说明:填写邀请码的话邀请和被邀请的账号都会获得2000 万 Tokens;2个帐号间不会与其他关联…

51c大模型~合集71

我自己的原文哦~ https://blog.51cto.com/whaosoft/12260659 #大模型推理加速技术的学习路线 EfficientQAT 可以在 41 小时内在单个 A100-80GB GPU 上完成对 2-bit Llama-2-70B 模型的量化感知训练。与全精度模型相比,精度仅下降了不到 3%(69.48 v…

单片机 code RO-data RW-data ZI-data以及OTA学习

带着问题去学习:这些数据是什么?分别放在哪里, 是什么:我个人的理解 code 和RO-data 分别是代码和只读数据,RW-data以及ZI-data分别是读写数据和初始化数据。 codeRO-data的大小正好是所占用ROM的大小,RO…

EasyRTC低延迟通信与智能处理:论嵌入式WebRTC与AI大模型的技术融合

在当今数字化时代,实时通信的需求日益增长,视频通话作为一种高效、直观的沟通方式,广泛应用于各个领域。WebRTC技术的出现,为实现浏览器之间的实时音视频通信提供了便捷的解决方案。而基于WebRTC技术的EasyRTC视频通话SDK&#xf…

10、k8s对外服务之ingress

service和ingress的作用 service的作用 NodePort:会在每个节点开放一个端口,端口号30000-32767。 也是只能用于内网访问,四层转发。实现负载均衡。不能基于域名进行访问。 clusterip:service的默认类型,只能在集群…

Java数据结构---栈

目录 一、栈的概念 二、栈的基本方法 三、栈的模拟实现 四、栈的练习 1、括号匹配 2、出栈入栈次序匹配 一、栈的概念 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底…

从CNN到Transformer:遥感影像目标检测的未来趋势

文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践(遥感图像场景分类)专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…

php-fpm

摘要 php-fpm(fastcgi process manager)是PHP 的FastCGI管理器,管理PHP的FastCGI进程,提升PHP应用的性能和稳定性 php-fpm是一个高性能的php FastCGI管理器,提供了更好的php进程管理方式,可以有效的控制内存和进程,支…

open webui 部署 以及解决,首屏加载缓慢,nginx反向代理访问404,WebSocket后端服务器链接失败等问题

项目地址:GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 选择了docker部署 如果 Ollama 在您的计算机上,请使用以下命令 docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gatewa…

VMware安装Centos 9虚拟机+设置共享文件夹+远程登录

一、安装背景 工作需要安装一台CentOS-Stream-9的机器环境,所以一开始的安装准备工作有: vmware版本:VMware Workstation 16 镜像版本:CentOS-Stream-9-latest-x86_64-dvd1.iso (kernel-5.14.0) …

欧洲跨境组网专线:企业出海的高效网络解决方案

在全球化的背景下,越来越多的企业将业务拓展至海外市场,并在欧洲等地设立分支机构。然而,跨境办公中常常面临公网网络延迟高、打开速度慢、丢包严重等问题,这不仅影响办公效率,还增加了IT维护的难度和成本。针对这一痛…

面阵工业相机提高餐饮业生产效率

餐饮行业是一个快节奏、高要求的领域,该领域对生产过程中每一个阶段的效率和准确性都有很高的要求。在食品加工、包装、质量控制和库存管理等不同生产阶段实现生产效率的优化是取得成功的关键步骤。面阵工业相机能够一次性捕捉对象的二维区域图像,并支持…

Renesas RH850 IAR编译时变量分配特定内存

文章目录 1. 核心作用2. 典型使用场景3. 示例代码4. 编译器与链接脚本协作5. 注意事项6. 调试验证在RH850系列微控制器的开发中,#pragma location = "FIRST_RAM" 是一条编译器指令,其核心含义是 将变量或函数分配到名为 FIRST_RAM 的特定内存段。以下是详细解释: …

C++面试题,进程和线程方面(1)

文章目录 前言进程和线程有什么不同进程,线程的通讯方式什么是锁为什么说锁可以使线程安全加锁有什么副作用总结 前言 这是个人总结进程和线程方面的面试题。如果有错,欢迎佬们前来指导!!! 进程和线程有什么不同 进程…

Unity摄像机与灯光相关知识

一、Inspector窗口 Inspector窗口可以查看和编辑对象的属性以及设置 其中包含各种组件,例如用Cube对象来举例 1.Sphere(Mesh)组件: 用来决定对象的网格属性,例如球体网格为Sphere、立方体网格为Cube 2.Mesh Renderer组件: 用来设置…

基于vue和微信小程序的校园自助打印系统(springboot论文源码调试讲解)

第3章 系统设计 3.1系统功能结构设计 本系统的结构分为管理员和用户、店长。本系统的功能结构图如下图3.1所示: 图3.1系统功能结构图 3.2数据库设计 本系统为小程序类的预约平台,所以对信息的安全和稳定要求非常高。为了解决本问题,采用前端…

Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory

安装C 简介 Windows 版的 GCC 有三个选择: CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系统上运行的工具集,用于在 Windows 环境下进行开发和编译。 Cygwin 是一个在 Windows 上运行的开源项目,旨在提供类Uni…

MKS SERVO42E57E 闭环步进电机_系列10 STM32_脉冲和串口例程

文章目录 第1部分 产品介绍第2部分 相关资料下载2.1 MKS E系列闭环步进驱动资料2.2 源代码下载2.3 上位机下载 第3部分 脉冲控制电机运行示例第4部分 读取参数示例4.1 读取电机实时位置4.2 读取电机实时转速4.3 读取电机输入脉冲数4.4 读取电机位置误差4.5 读取电机IO端口状态 …

vue从入门到精通(十一):条件渲染

条件渲染 1.v-if 写法: (1).v-if“表达式” (2).v-else-if“表达式” (3).v-else“表达式” 适用于:切换频率较低的场景。 特点:不展示的DOM元素直接被移除。 注意:v-if可以和:v-else-if、v-else一起使用,但要求结构不能被“打断” 2.v-show 写法:v-show“…