热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

保研考研面试数据结构

上岸某中流985,下面主要是数据结构的核心内容:贪心算法和动态规划的区别贪心算法:局部最优,划分的每个子问题都最优&#x

上岸某中流985,下面主要是数据结构的核心内容:


贪心算法和动态规划的区别

贪心算法:局部最优,划分的每个子问题都最优,得到全局最优,但是不能保证是全局最优解。

动态规划:将问题分解成重复的子问题,每次都寻找左右子问题解中最优的解,一步步得到全局的最优解。


快速排序的算法思想与步骤

二分分治的思想,

对于high,首先从后半部分开始,如果扫描到的值大于基准数据就让high减1,如果发现有元素比该基准数据的值小,就将high位置的值赋值给low位置 ,结果如下:

对于low: 然后开始从前往后扫描,如果扫描到的值小于基准数据就让low加1,如果发现有元素大于基准数据的值(如上图46=>tmp),就再将low位置的值赋值给high位置的值

此外,解释一下归并排序,


稳定的算法有哪些?

归并,插入、冒泡等(记住归并即可)


解决哈希表冲突的办法

1) 线性探测法

2) 平方探测法

3) 伪随机序列法

4) 拉链法


简述 ALV算法与红黑树,B,B+

ALV即平衡二叉树,任何一节点的左子树高度与右子树高度之差不能超过1

优点:减少二叉树元素查找的深度,从而提升平均查找效率。

B树:平衡多路查找树,

image-20210202103949411

B树的查找方法:

从 B树的根节点出发,在结点的有序表中进行查找,执行如下操作:

①若 Ki 关键字小于 该查询值 ,继续查找

②ki等于 该值 ,查找成功;

③ki大于该值 , 查找 ki左边指针指向的子树 结点并继续查找

④若遍历到结点最后一个关键字 ,查找 ki右边指针指向的子树 结点并继续查找

这样若一直查找到叶节点时,继续查找到失败结点则查找失败

B树优点:

B树一般用来作为磁盘存取的数据结构,定位是磁盘的存取中花费时间比较大的一块,我们可以根据B类树的特点,构造一个多阶的B类树,然后在尽量多的在结点上存储相关的信息,保证层数尽量的少,以便后面我们可以更快的找到信息,磁盘的I/O操作也少一些。

B+树:

image-20210202115128774

与B树的区别:


BB+
关键字与分支n关键字对应n+1分支n关键字对应n分支
关键字数量叶子结点不包含关键字,不重复叶子结点包含全部关键字
结点的作用B树的任何结点都包含了关键字以及记录的存储地址(也是有记录的)非叶子结点的作用是索引作用,只有最大关键字以及指向子树的指针,没有关键字的存储地址
关键字个数取值范围m/2 -1 m/2

优点:

① 非叶子节点不会带上ROWID,这样,一个块中可以容纳更多的索引项,一是可以降低树的高度。二是一个内部节点可以定位更多的叶子节点。

② B+树中所有叶子节点都是通过指针连接在一起,而B树不会。

红黑树:

从根节点叶子节点的最长路径不能超过最短路径的2倍


希尔排序的思想与步骤

把记录按下标的一定增量分组,若刚开始增量为5 ,则每隔4个元素为1组,组内排序并交换位置。然后增量递减,再次重复上述步骤一直到增量为1 。

此外,还有归并排序,堆排序


简述图,dfs,bfs

一种有边和顶点组成

dfs:

从顶点出发,找到与之相邻未访问的的第一个节点,以该节点为新的起始点,递归操作到相邻节点均已访问,则回溯上一层继续做上述操作。

bfs:从一个顶点出发,依次遍历相邻的未访问的节点,并执行入队操作,接着以队首作为新的起始点作如上操作一直到队列为空。


最小生成树

所有节点都可到达的最短距离和。

prim 和克鲁斯卡尔算法

prim 算法:将边按照权值从小到达依次排序,刚开始是只含有顶点的图,并将当前最小权值的,且连接后不成环边连接,一直连n-1条

克鲁斯卡尔算法:

将顶点分成访问、未访问的两个集合。刚开始所有顶点都在未访问集合里面,

选择一个顶点,放入访问集合

从未访问节点集合里面寻找一顶点,他满足:到访问节点集合中某一点的距离最短,并将该点移到访问集合里。


🅰️ 最短路径

迪杰斯特拉:

算法描述:

初始化:从某一节点出发到各个节点的距离,不相邻则无穷大

接着循环执行如下操作:

① 选择当前最短距离的节点,标记并加入最优路径集合

②计算刚加入的节点A的临近节点B(不包含标记的节点),

若&#xff08;从起始点节点A的距离&#43; A到相邻点B的距离 <当前起始点到B的距离&#xff0c;则更新&#xff09;

image-20210821100254721

floyd 算法&#xff1a;

循环遍历每个顶点V&#xff0c;将v作为中间过程节点&#xff0c;对于每一个&#xff08;i,j) 之间的最短路径&#xff0c;判断&#xff1a;

dis(i,j) > dis(i,v) &#43; dis(v,j) ? dis(i,v) &#43; dis(v,j), dis(i,j)

遍历二叉树&#xff0c;先序中序后序实现办法

后序&#xff1a;

节点入栈到左孩子为空&#xff0c;

若右孩子未访问且不为空&#xff0c;则执行上述步骤

否则&#xff0c;则出栈并访问。


数据结构算法

给定一个单链表&#xff0c;只给出头指针h&#xff1a;
1、如何判断是否存在环&#xff1f;
2、如何知道环的长度&#xff1f;
3、如何找出环的连接点在哪里&#xff1f;
4、带环链表的长度是多少&#xff1f;

1、快慢指针

2、2L &#61; L &#43; x&#xff0c;x&#61;L

image-20210911161555156

3、在1的基础上&#xff0c;快慢相遇以后&#xff0c;在起始位置再放一个指针&#xff0c;两个指针一倍速前进&#xff0c;相遇的地方就是气质起始位置

image-20210911161609328

4、在三的基础上&#xff0c;增加一个计数的指

4、在三的基础上&#xff0c;增加一个计数的指针&#xff0c;这样就可以计算出L-x长度&#xff0c; 这样 &#xff0c;L-x&#43;L就是答案。


Topk

① 我们可以选择相应的排序算法进行处理&#xff0c;目前来看快速排序&#xff0c;堆排序和归并排序都能达到O(nlogn)的时间复杂度。

② 堆排序


N个骰子出现和为m的概率

1.现在变量有&#xff1a;骰子个数&#xff0c;点数和。当有k个骰子&#xff0c;点数和为n时&#xff0c;出现次数记为f(k,n)。那与k-1个骰子阶段之间的关系是怎样的&#xff1f;

2.当我有k-1个骰子时&#xff0c;再增加一个骰子&#xff0c;这个骰子的点数只可能为1、2、3、4、5或6。那k个骰子得到点数和为n的情况有&#xff1a;
(k-1,n-1)&#xff1a;第k个骰子投了点数1
(k-1,n-2)&#xff1a;第k个骰子投了点数2
(k-1,n-3)&#xff1a;第k个骰子投了点数3

(k-1,n-6)&#xff1a;第k个骰子投了点数6
在k-1个骰子的基础上&#xff0c;再增加一个骰子出现点数和为n的结果只有这6种情况&#xff01;
所以&#xff1a;f(k,n)&#61;f(k-1,n-1)&#43;f(k-1,n-2)&#43;f(k-1,n-3)&#43;f(k-1,n-4)&#43;f(k-1,n-5)&#43;f(k-1,n-6)

3.有1个骰子&#xff0c;f(1,1)&#61;f(1,2)&#61;f(1,3)&#61;f(1,4)&#61;f(1,5)&#61;f(1,6)&#61;1。


推荐阅读
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 计算机视觉初学者指南:如何顺利入门
    本文旨在为计算机视觉领域的初学者提供一套全面的入门指南,涵盖基础知识、技术工具、学习资源等方面,帮助读者快速掌握计算机视觉的核心概念和技术。 ... [详细]
  • 【Java数据结构和算法】008栈
    目录0、警醒自己一、栈的应用场景和介绍1、栈的应用场景一个实际的场景:我的思考:2、栈的介绍入栈演示图:出栈演示图 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • LeetCode 104. 二叉树的最大深度 - 深度优先与广度优先策略
    本题探讨了如何通过深度优先搜索(DFS)和广度优先搜索(BFS)两种算法策略来求解二叉树的最大深度问题。二叉树的最大深度定义为从根节点到最远叶子节点的最长路径上的节点数目。 ... [详细]
  • 本文详细记录了一位Java程序员在Lazada的面试经历,涵盖同步机制、JVM调优、Redis应用、线程池配置、Spring框架特性等多个技术点,以及高级面试中的设计问题和解决方案。 ... [详细]
  • RabbitMQ 核心组件解析
    本文详细介绍了RabbitMQ的核心概念,包括其基本原理、应用场景及关键组件,如消息、生产者、消费者、信道、交换机、路由键和虚拟主机等。 ... [详细]
  • 深入解析Java并发之ArrayBlockingQueue
    本文详细探讨了ArrayBlockingQueue,这是一种基于数组实现的阻塞队列。ArrayBlockingQueue在初始化时需要指定容量,因此它是一个有界的阻塞队列。文章不仅介绍了其基本概念和数据结构,还深入分析了其源码实现,包括各种入队、出队、获取元素和删除元素的方法。 ... [详细]
  • 分布式计算助力链力实现毫秒级安全响应,确保100%数据准确性
    随着分布式计算技术的发展,其在数据存储、文件传输、在线视频、社交平台及去中心化金融等多个领域的应用日益广泛。国际知名企业如Firefox、Google、Opera、Netflix、OpenBazaar等均已采用该技术,推动了技术创新和服务升级。 ... [详细]
  • SPFA算法详解与应用
    当图中包含负权边时,传统的最短路径算法如Dijkstra不再适用,而Bellman-Ford算法虽然能解决问题,但其时间复杂度过高。SPFA算法作为一种改进的Bellman-Ford算法,能够在多数情况下提供更高效的解决方案。本文将详细介绍SPFA算法的原理、实现步骤及其应用场景。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 我整理了HMOV四大5G旗舰的参数,可依然没能拯救我的选择困难症
    伊瓢茕茕发自凹非寺量子位报道|公众号QbitAI报道了那么多发布会,依然无法选出要换的第一部5G手机。这不,随着华为P40系列发布,目前国 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本周三大青年学术分享会即将开启
    由雷锋网旗下的AI研习社主办,旨在促进AI领域的知识共享和技术交流。通过邀请来自学术界和工业界的专家进行在线分享,活动致力于搭建一个连接理论与实践的平台。 ... [详细]
author-avatar
无心无嗔_170
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有