考研复试问题总结-数据结构(1)
1. 说一下你对数据结构的理解
我觉得数据结构不仅仅是存数据的“容器”,更是一种思维方式。其实,在我们写程序时,经常会遇到各种各样的数据操作需求,而不同的数据结构能解决问题的效率和方式都不一样,所以选择合适的数据结构非常重要。
举个例子,如果你的程序主要操作是查找,那你可能会选用数组或者哈希表,因为它们支持快速的随机访问;但如果你的操作更多是插入和删除,链表或平衡树可能就更合适,因为它们在这些操作上的开销较低。同时,如果数据本身具有层次结构,比如文件系统或组织架构,那么用树结构能更直观地表示这种关系,而如果数据之间的关系比较复杂,比如社交网络的关系,那图就更适合。
另外,我们在选择数据结构时,还需要考虑算法的时间复杂度和空间复杂度。很多时候为了提高查找效率,我们可能会用更多的内存,比如哈希表就是这样一个典型的例子。还有,具体应用场景也会影响我们的选择:比如在实时性要求高的系统中,我们可能需要那些能提供稳定性能的数据结构;而在对数据动态扩展性要求高的场景中,灵活的结构如链表或者动态数组会更好。
总的来说,选择数据结构其实是一个权衡问题,需要根据具体操作(查找、插入、删除等)、数据规模、内存限制以及业务场景来做出合理选择,就像选工具一样,每种工具都有最适合的应用场景
2. 数据结构在计算机网络和操作系统中的应用
老师好,我从两个学科领域分别说明数据结构的核心应用:
计算机网络方面
- 路由表存储:使用哈希表快速定位目的 IP 对应的下一跳节点
- 流量控制:滑动窗口机制依赖循环队列管理待发送的数据包序列,接收方通过指针移动控制窗口大小
操作系统方面
- 进程调度:优先级队列(通常用堆实现)管理就绪进程
- 内存管理:
- 页表采用哈希表加速虚拟地址到物理页框的映射
- 空闲内存管理使用双向链表合并相邻空闲块
- 同步机制:信号量通过等待队列(链表实现)记录阻塞进程,PV 操作涉及队列的入队/出队原子操作
3. 链表和数组区别
老师,我来简要说说链表和数组的区别:
第一,存储结构不同。
数组存储在连续的内存块中,元素通过索引直接访问(时间复杂度 O(1)),但中间插入或删除元素需要移动后续所有元素(时间复杂度 O(n))。链表则由分散的内存节点组成,每个节点包含数据和指向下一个节点的指针,插入和删除只需调整相邻指针(时间复杂度O(1)),但访问第 k 个元素必须从头部开始遍历(时间复杂度O(n))。
第二,内存占用不同。
数组需预分配固定大小,可能导致内存浪费(如申请过大空间但实际元素少);链表动态按需分配节点,内存利用率更高,但每个节点额外存储指针(约 4-8 字节),总空间略高于数组。此外,数组内存连续,缓存命中率高,适合性能敏感场景。
第三,适用场景不同。
数组适用于数据量大且需频繁随机访问的场景(如图像处理、数据库索引);链表适用于频繁插入/删除或数据规模动态变化的场景(如消息队列、LRU 缓存)。
4. 一个数字数组排序你会选择什么排序算法?
如果只是一个数字数组排序,我会先看一下数据的特点和要求。比如说,如果数组元素较多且数据是随机分布,我通常会选快速排序,因为它在平均情况下能达到O(n log n)的时间复杂度,性能上也非常高效。不过,快速排序在最坏情况下可能退化到O(n²),所以如果对最坏情况有严格要求,可能会考虑堆排序或者归并排序。
堆排序能够在最坏情况下保证O(n log n)的性能,而且是原地排序,但在常数时间上可能略逊色;归并排序稳定性好,尤其适合对排序稳定性有要求的场景,不过需要额外的内存空间。
另外,如果数据接近有序,那么插入排序或者更现代的Timsort可能会表现得更好。总之,选择哪种排序算法得看具体的数据规模、数据分布以及是否有稳定性或者空间上的特殊要求。
5. 说说哈夫曼树以及它的应用
哈夫曼树是一种根据字符出现的频率来创建的最优二叉树。创建的时候,频率最低的两个字符会被合并成一个新节点,直到所有字符合并成一棵树。在这棵树上,频率高的字符离根节点近,编码短;频率低的字符离根节点远,编码长。通过这种方式,数据能得到有效压缩,因为高频字符占用的存储空间更小。 哈夫曼树的应用很广泛,最典型的就是数据压缩,比如在ZIP文件格式和JPEG图片格式中就用了哈夫曼编码。另外,它也被应用在网络通信、语音编码等领域,能有效减少传输数据的成本。这种树结构的好处就是能根据实际数据的特点动态调整编码,使得整个过程非常高效。
6. 图的存储结构
老师,我认为图主要有两种常见的存储结构:邻接矩阵和邻接表。邻接矩阵就是用一个二维数组来存储图的信息。如果图有 n 个顶点,那么我们就用一个 n×n 的矩阵,每个元素表示两个顶点之间是否有边(还可以记录权值)。这种方法的优点是判断两个顶点是否相邻非常快,操作简单;缺点则是对于边较少的稀疏图来说,空间利用率低,会浪费不少空间。邻接表则是为每个顶点建立一个链表,存储所有与之相邻的顶点及相关信息。这样对于稀疏图来说,空间利用更高效,因为只存储实际存在的边;不过,如果要判断两个顶点是否直接相连,可能需要遍历链表,相对来说查找速度不如邻接矩阵。另外,对于有向图,还可以使用十字链表来同时记录每个顶点的入边和出边。
总的来说,选择哪种存储结构主要看图的特点:如果是稠密图,邻接矩阵可能更方便;如果是稀疏图,邻接表能更好地节省空间;
7. 迪杰斯特拉算法
老师,我理解的迪杰斯特拉算法其实就是用来解决单源最短路径问题的一种方法。我们先把起点到各个节点的距离都初始化为无穷大,起点设为 0,然后反复地从还没有确定最短距离的节点中找出一个距离最小的,把这个节点确定下来,再利用它去更新它邻近节点的距离。整个过程就是不断“贪心”地选择当前最短路径,并用这个路径去优化其他路径。这样一步步进行下去,最后就能得到起点到所有其他节点的最短距离。不过,这个算法要求图中的边权都是非负的,如果有负权边,就不能用了。
相关文章:
考研复试问题总结-数据结构(1)
1. 说一下你对数据结构的理解 我觉得数据结构不仅仅是存数据的“容器”,更是一种思维方式。其实,在我们写程序时,经常会遇到各种各样的数据操作需求,而不同的数据结构能解决问题的效率和方式都不一样,所以选择合适的数…...
250301-OpenWebUI配置DeepSeek-火山方舟+硅基流动+联网搜索+推理显示
A. 最终效果 B. 火山方舟配置(一定要点击添加) C. 硅基流动配置(最好要点击添加,否则会自动弹出所有模型) D. 联网搜索配置 E. 推理过程显示 默认是没有下面的推理过程的显示的 设置步骤: 在Functions函…...
RuoYi框架介绍,以及如何基于Python使用RuoYi框架
若依框架(RuoYi)是一款基于Spring Boot和Vue.js的开源快速开发平台,广泛应用于企业级应用开发。它提供了丰富的功能模块和代码生成工具,帮助开发者快速搭建后台管理系统。 主要特点 前后端分离:前端采用Vue.js&#x…...
【算法】图论 —— Floyd算法 python
洛谷 B3647 【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m,分别代表点的个数和边的条数。 接下来 m m m 行,每行三…...
2.数据结构:2.最大异或对
数据结构 2.数据结构:1.Tire 字符串统计 当前题 最大异或对 #include<algorithm> #include<cstring> #include<iostream>using namespace std;const int N100010,M31*N;// M 表示节点个数,每一个数最多有 31 位int n; int a[N]; i…...
剑指 Offer II 031. 最近最少使用缓存
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20031.%20%E6%9C%80%E8%BF%91%E6%9C%80%E5%B0%91%E4%BD%BF%E7%94%A8%E7%BC%93%E5%AD%98/README.md 剑指 Offer II 031. 最近最少使用缓存 题目描述 运用所掌握的…...
Windows 11【1001问】查看Windows 11 版本的18种方法
随着技术的飞速发展,操作系统作为连接硬件与软件的核心桥梁,其版本管理和更新变得尤为重要。对于用户而言,了解自己设备上运行的具体Windows 11版本不仅有助于优化系统性能,还能确保安全性和兼容性。然而,不同场景和需…...
小程序性能优化-预加载
在微信小程序中,数据预加载是提升用户体验的重要优化手段。以下是处理数据预加载的完整方案: 一、预加载的适用场景 跳转页面前的数据准备 如从列表页进入详情页前,提前加载详情数据首屏加载后的空闲时间 在首页加载完成后,预加载…...
vue3中展示markdown格式文章的三种形式
一、安装 # 使用 npm npm i kangc/v-md-editor -S# 使用yarn yarn add kangc/v-md-editor二、三种实现形式 1、编辑器的只读模式 main.ts文件中配置: import VMdEditor from kangc/v-md-editor; import kangc/v-md-editor/lib/style/base-editor.css;const app …...
(视频教程)Compass代谢分析详细流程及python版-R语言版下游分析和可视化
不想做太多的前情解说了,有点累了,做了很久的内容,包括整个分析,从软件安装和报错解决到后期下游python版-R语言版下游分析和可视化!单细胞代谢分析我们写过很多了,唯独少了最“高级”的compass,…...
文件描述符与重定向
1. open系统调用 在 Linux 中, open() 系统调用用于打开一个文件或设备,并返回一个文件描述符,通过该描述符可以进行文件读写操作。open() 可以用于创建新文件或打开已存在的文件,具体行为取决于传递给它的参数。 需要包含的头文件…...
为什么深度学习选择Tensor而非NumPy数组?核心优势深度解析
简短总结: 支持 GPU 加速:Tensor 提供对 GPU 的原生支持,能够有效加速计算,而 NumPy 则通常只能在 CPU 上运行。支持自动求导:深度学习模型的训练依赖于参数的优化,而 Tensor 提供了自动求导功能ÿ…...
python把html网页转换成pdf标题没有乱码,正文都乱码
在使用Python将HTML网页转换成PDF时,遇到标题没有乱码但正文乱码的问题,通常是由于字符编码处理不当或字体支持问题导致的。以下是一些可能的原因和解决方案: 原因分析 字符编码不匹配: HTML文件的编码与PDF转换工具或库所使用的…...
基于fast-whisper模型的语音识别工具的设计与实现
目录 摘 要 第1章 绪 论 1.1 论文研究主要内容 1.1.1模型类型选择 1.1.2开发语言的选择 1.2 国内外现状 第2章 关键技术介绍 2.1 关键性开发技术的介绍 2.1.1 Faster-Whisper数据模型 2.1.2 Django 第3章 系统分析 3.1 构架概述 3.1.1 功能构架 3.1.2 模块需求描述 3.2 系统开…...
详解:事务注解 @Transactional
创作内容丰富的干货文章很费心力,感谢点过此文章的读者,点一个关注鼓励一下作者,激励他分享更多的精彩好文,谢谢大家! Transactional 是 Spring Framework 中常用的注解之一,它可以被用于管理事务。通过使用…...
场内、场外期权怎么开户?期权佣金是多少?
期权交易需要一定的知识和经验,以有效管理风险和制定策略。 场内期权开户(以50ETF为例) 场内期权开户的各种方式大差不差,咱们就先以50ETF期权为例子看下。 场内期权开户条件包括: 首先是资金的要求,50万…...
Linux:进程概念
目录 1 冯诺依曼体系 2 操作系统(Operator System) 3 如何理解管理 3.1计算机管理硬件 3.2 管理逻辑图 3.3 怎样管理 4 什么是进程? 5 查看进程 5.1 ps ajx显示所有进程信息 5.2 /proc(内存文件系统) 5.2.1 ls /proc/PID 5.2.2 ls /proc/PID -al 5…...
Rabbit MQ 高频面试题【刷题系列】
文章目录 一、公司生产环境用的什么消息中间件?二、Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优缺点?三、解耦、异步、削峰是什么?四、消息队列有什么缺点?五、RabbitMQ一般用在什么场景?六、简单说RabbitMQ有哪些角…...
破解密码防线:渗透测试中的密码攻击手法汇总
密码是网络安全中的一道重要防线,然而,若密码策略不严密,往往会为攻击者提供可乘之机。本文将简要介绍渗透测试中关于密码的几种常见攻击思路和手法。 1. 确认使用默认及常见的账号密码 在渗透测试的初期,攻击者通常会尝试使用系…...
大模型在白血病诊疗全流程风险预测与方案制定中的应用研究
目录 一、绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与内容 二、大模型技术与白血病相关知识 2.1 大模型技术原理与特点 2.2 白血病的病理生理与诊疗现状 三、术前风险预测与手术方案制定 3.1 术前数据收集与预处理 3.2 大模型预测术前风险 3.3 根据…...
5-2JVM内存的各种应用
一、堆区(Heap)——对象实例的存储池 实际应用场景: 对象实例化:所有通过 new 关键字创建的对象实例均存储在堆中。例如: java Person person new Person(“张三”); // person对象实例分配在堆区1,4,6 大对象直…...
【NLP 28、一文速通NLP文本分类任务 —— 深度学习】
目录 一、深度学习 — pipeline 流水线 1.配置文件 config.py Ⅰ、路径相关 Ⅱ、模型相关 Ⅲ、训练相关 2.数据加载 loader.py Ⅰ、类初始化 Ⅱ、加载数据并预处理 Ⅲ、文本编码 Ⅳ、对输入序列截断或填充 Ⅴ、返回数据长度 Ⅵ、返回对应索引位置元素 Ⅶ、加载词表 Ⅷ、封装数据…...
nvidia驱动更新,centos下安装openwebui+ollama(非docker)
查看centos内核版本 uname -a cat /etc/redhat-release下载对应的程序(这个是linux64位版本通用的) https://cn.download.nvidia.cn/tesla/550.144.03/NVIDIA-Linux-x86_64-550.144.03.run cudnn想办法自己下一下,我这里是12.x和11.x通用的…...
UnrealEngine UE5 可视化 从地球观察火星 金星 土星 运动轨迹
视频参考:https://www.bilibili.com/video/BV1KpXSYdEdo/ 从地球观察土星的运动轨迹 从地球观察火星 轨迹 从地球观察金星的运动轨迹...
蓝桥杯 五子棋对弈
五子棋对弈 问题描述 “在五子棋的对弈中,友谊的小船说翻就翻?” 不!对小蓝和小桥来说,五子棋不仅是棋盘上的较量,更是心与心之间的沟通。这两位挚友秉承着"友谊第一,比赛第二"的宗旨ÿ…...
springmvc热点面试题开胃菜
1. Spring MVC的核心组件有哪些?它们的作用是什么? 答案: Spring MVC的核心组件包括以下部分,每个组件都有其特定的作用: DispatcherServlet: 前端控制器,是Spring MVC的核心。它负责接收所有H…...
关于深度学习的一份介绍
在这篇文章中,我将介绍有关深度学习的东西,主要是它与神经网络的关系、目前主要的网络有哪些,以及加深神经网络的意义等。 一、联系 在之前的文章中,我曾介绍过神经网络,而所谓的神经网络其实就是深度学习的一种架构…...
JavaScript系列02-函数深入理解
本文介绍了JavaScript函数相关知识,包括 函数声明与函数表达式 - 解释两者的区别,提升行为,以及使用场景箭头函数特性 - 讲解语法、词法this、不能作为构造函数等特点this绑定机制 - 详细讲解四种绑定规则:默认绑定、隐式绑定、显…...
Netty是怎么实现Java NIO多路复用的?(源码)
目录 NIO多路复用实现事件循环是什么?核心源码(1)调用 NioEventLoopGroup 默认构造器(2)指定 SelectorProvider(3)创建 Selector(4)创建单线程和队列(5&#…...
SourceTree配置SSH步骤详解
1. 生成SSH密钥对 如果尚未生成SSH密钥,需先创建: Windows/macOS/Linux通用方法 打开终端(或Git Bash)。 输入以下命令(替换为你的邮箱): bash 复制 ssh-keygen -t ed25519 -C "your_em…...
