热门标签 | 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中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 堆是一种常见的数据结构,广泛应用于计算机科学领域。它通常表示为一棵完全二叉树,并可通过数组实现。堆的主要特性是每个节点的值与其父节点的值之间存在特定的关系,这使得堆在优先队列和排序算法中非常有用。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
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社区 版权所有