热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

数据结构学习总结(用于考研复试)

自己整理的哈,有错误还请各位大哥指正!1.什么是OO表示算法复杂度,他需要通过时间复杂度和空间复杂度来描述。①时间复杂度:一个语句的频度即该语句被执行的次数,程序中所有语句的频度之

自己整理的哈,有错误还请各位大哥指正!

1.什么是O

O表示算法复杂度 ,他需要通过时间复杂度和空间复杂度来描述。

①时间复杂度:一个语句的频度即该语句被执行的次数,程序中所有语句的频度之和记为T(n),时间复杂度就是T(n)的数量级函数,其中n表示问题的规模。

如常见的冒泡排序最坏时间复杂度为O(n^2),即初始数据为逆序排序。

②空间复杂度:算法所耗费的存储空间,也是问题规模n的函数。

若算法所需辅助空间为常量,则空间复杂度是O(1),即原地工作。

2.数据结构三要素

①逻辑结构:指数据之间的逻辑关系,与存储关系无关。主要有集合;线性(一对一);树形(一对多);图(多对多)四类。

②存储结构:指数据在计算机中的表示。只要有顺序存储;链式存储;索引存储;散列存储。

③数据的运算:施加在数据上的运算。

3.循环与递归

递归优点:代码简洁清晰

  缺点:每递归一层,就会在内存生成一个栈保存递归的信息,如果递归深度过深,有栈溢出的问题。循环则不会有这样的问题。

循环优点:结构简单易实现

  缺点:没有递归简介明了(我认为所有递归都可以写成循环,但比较麻烦)

4.贪心,dp及分治的区别

贪心:只考虑当前最优解,而非全局最优。

dp:考虑到全局最优,求解子问题过程中保留可能的局部最优解,从下往上,一步步对比出全局最优解。

分治:顾名思义分而治之,将问题分为若干规模小且与原问题相似的子问题,递归解决再合并结果。如归并排序。

5.顺序表和链表:

空间上:顺序表需要连续存储空间

内存上:链表有指针额外占用空间

随机存取上:顺序表支持

插入删除上:链表只需修改指针,而顺序表需大量移动元素

6.头指针和头节点:

头指针:不管有没有头节点,永远指向链表第一个节点。作用:具有标识作用。

头节点:带头节点链表中的第一个节点,通常不存储信息。作用:使得第一个节点和其他节点的操作统一;使得空表和非空表操作统一。

7.栈和队列:

栈:先进后出,只能在一端进行插入删除。

队列:先进先出,只能在一端插入另一端删除。

相同点:都可链式顺序存储,都是操作受限的线性表。

8.共享栈:

两个顺序栈共享一个一维数组空间,栈底分别设在两端,插入数据时向中间延申,所以只有空间被占满时才上溢。

9.判断循环队列的空满:

一般牺牲一个单元格:当(队尾+1)%maxnum=队头时则为队满;当队头=队尾时则为队空。

也可以增设一个数据成员表示队内元素个数来判断:个数=0队空,个数=maxnum为队满。

10.kmp算法中next数组的计算:

当第j个字符匹配失败时,记1~j-1的字符串为S;则next【j】=S的模式串最长相等前后缀长度+1,特别地next【1】=0。

改进后的nextvel数组:记next【j】的值为x,当模式串下标为x的字符=当前模式串所指字符,说明就算移动也会匹配失败,所以直接nextvel【j】=nextvel【x】(即参考前面的相同字符的nextval值。

11.线索二叉树:

作用:使得不用遍历的情况下直接找到某结点的前驱或后继。

先序线索化不能直接找前驱,后序线索化不能直接找后继

12.二叉排序树

空树或:左子树结点的值小于他,右子树结点的值大于他,且左右都是二叉排序树。

13.平衡二叉树

空树或:左右子树高度差绝对值不超过1且左右都是平衡二叉树。

14.哈夫曼树

带权路径最小的树,也称为最优二叉树

14.树的存储结构

顺序存储和链式存储(一般二叉树才有可能用顺序存储)

三种方法:双亲表示法(存该结点的父亲),孩子表示法(链式存储该节点的所有孩子),孩子兄弟表示法(左边存孩子右边存兄弟)

15.B树(多路平衡查找树)m阶B树的结点最多m个子树

要求根的子树个数为【2,m】,关键字数=【1,m-1】;非根的子树为【m/2,m】;关键字数=【(m/2)-1,m-1】

查找:同二叉排序树(大了往右,小了往左),只不过不是两路分支而是多路分支

插入:同二叉排序树一样找到位置插入,然后不满足B树条件时进行不断分裂(中间位置的关键字去父节点中,左边的关键字不动,右边的关键字新生成一个结点)

删除:①直接删:删除后仍满足B树条件。

   ②兄弟够借:父子互换法,兄弟顶替被删的关键字且父子互换。

      ③兄弟不够借:父亲下坠法,父亲下来与兄弟合并。

16.B树和B+树区别:

B+树是应数据库所需而出现的一种B树的变形。

B+树结点的子树个数=关键字个数。而B树子树个数-1=关键字个数。

B+树仅在叶子节点存储索引对应信息(而B树则每个节点中都存放了索引对应信息),所以一个磁盘可以存下更多的索引元素,大大减少磁盘访问操作。这也是为什么大多数数据库选择B+树的主要原因。

B+树叶子节点间有双向的指针,支持顺序查找、范围查找。

17.数据库为什么用B+树不用B树:因为查询操作需要读磁盘,而磁盘是慢速设备,所以当然是读的次数越少越好,也就是树的高度越小越好。而B+树相对B树而言,它的非叶子节点不存储关键字对应信息,只存储关键字,所以规定的磁盘空间就能存放更多关键字,树也越矮,查找速度更快。且叶子节点有双向的指针,支持顺序查找、范围查找。

18.排序

d是关键字数,r时队列数,n是待排序数。

 19.快排复杂度怎么来的:

最好为O(nlogn)。每次需要将数组分成两半进行比较交换,最好情况下每次都分为等长两个部分,则需要logn次划分。最差情况下分为n-1个元素和0个元素,则需n次划分。

不管最好还是最差划分 每趟排序都需要对元素进行n次比较,所以最好为nlogn,最差为n^2。

改进:每次随机选择基准元素可以使得最坏情况几乎不会发生。

20.基数排序:

将所有待比较数统一为同样的长度,不足的前面补零 。然后对每个数的第i位数进行比较,插入相应的队列,最后将队列用指针链接。如此循环直到最高位比较完毕。

时间复杂度为d(n+r),其中d为关键字个数。r为队列数,n为排序数。



推荐阅读
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 在给定的数组中,除了一个数字外,其他所有数字都是相同的。任务是找到这个唯一的不同数字。例如,findUniq([1, 1, 1, 2, 1, 1]) 返回 2,findUniq([0, 0, 0.55, 0, 0]) 返回 0.55。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 深度学习理论解析与理解
    梯度方向指示函数值增加的方向,由各轴方向的偏导数综合而成,其模长表示函数值变化的速率。本文详细探讨了导数、偏导数、梯度等概念,并结合Softmax函数、卷积神经网络(CNN)中的卷积计算、权值共享及池化操作进行了深入分析。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
author-avatar
布瓜Pourqu2502854853
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有