计算机:十大核心考点解析

核心考点一:队列和栈结构的概念理解

栈是仅限制在表的一端进行插入和删除运算的线性表,称插入、删除这一端为栈顶。表中无元素时为空栈。栈的修改是按后进先出的原则进行的。通常栈有顺序栈和链栈两种存储结构。

队列是一种运算受限的线性表,插入在表的一端进行,而删除在表的另一端进行,允许删除的一端称为队头,允许插入的一端称为队尾,队列的操作原则是先进先出的。队列也有顺序存储和链式存储两种存储结构。

1.打印单链表,voidPrintList(Listlist);使用一个指针遍历所有链表节点。

2.两个升序链表,打印tarList中的相应元素,这些元素的序号由SeqList指定,voidPrintLots(ListtarList,ListseqList);使用两个指针分别遍历两个链表,每次取出序列链表的一个序号后,根据该序号,到达目标链表指定节点。

3.两个升序链表的交集,ListIntersect(Listl1,Listl2);

4.两个升序链表的并集,ListJoin(Listl1,Listl2);

5.单链表就地置逆,voidReverse(Listl);使用三个指针表示前驱,当前和后继节点,每次将当前节点的Next指向前驱节点,然后向后遍历直到链表末尾。

核心考点三:二叉树的遍历

遍历的过程就是把非线性结构的二叉树中的结点排成一个线性序列的过程。

二叉树遍历方法可分为两大类,一类是"宽度优先"法,即从根结点开始,由上到下,从左往右一层一层的遍历;另一类是"深度优先法",即一棵子树一棵子树的遍历。

从二叉树结构的整体看,二叉树可以分为根结点,左子树和右子树三部分,只要遍历了这三部分,就算遍历了二叉树。设D表示根结点,L表示左子树,R表示右子树,则DLR的组合共有6种,即DLR,DRL,LDR,LRD,RDL,RLD。若限定先左后右,则只有DLR,LDR,LRD三种,分别称为先(前)序法(先根次序法),中序法(中根次序法,对称法),后序法(后根次序法)。三种遍历的递归算法如下:

1.先序法(DLR)

2.中序法(LDR)

3.后序法(LRD)

核心考点四:完全二叉树中有关结点个数计算

完全二叉树的定义:深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称为完全二叉树。

完全二叉树的叶子数为(n+1)/2取下整。

核心考点五:森林与二叉树之间的转换以及转换过程中结点之间的关系

将一棵树转换为二叉树的方法是:

1.树中所有相邻兄弟之间加一条连线。

2.对树中的每个结点,只保留其与第一个孩子结点之间的连线,删去其与其它孩子结点之间的连线。

3.以树的根结点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明。

森林转换为二叉树的方法如下:

1.将森林中的每棵树转换成相应的二叉树。

2.第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连在一起后,所得到的二叉树就是由森林转换得到的二叉树。

树和森林都可以转换为二叉树,二者的不同是:树转换成的二叉树,其根结点必然无右孩子,而森林转换后的二叉树,其根结点有右孩子。将一棵二叉树还原为树或森林,具体方法如下:

1.若某结点是其双亲的左孩子,则把该结点的右孩子、右孩子的右孩子、……都与该结点的双亲结点用线连起来。

2.删掉原二叉树中所有双亲结点与右孩子结点的连线。

3.整理由1、2两步所得到的树或森林,使之结构层次分明。

核心考点六:对无向连通图特性的理解

无向图的每条边,在顶点计算度的过程中,都要两次参与计算(与边两关联的2个顶点),因此所有顶点的度之和为偶数。

具有n个顶点的无向连通图,其边数大于或等于n-1。

在无向连通图中,所有顶点的度数都有可能大于1。

核心考点七:对m阶B树定义的理解

一棵m阶的B树满足下列条件:

1.每个结点至多有m棵子树。

2.除根结点外,其它每个分支至少有m/2棵子树。

3.根结点至少有两棵子树(除非B树只有一个结点)。

4.所有叶结点在同一层上。B树的叶结点可以看成一种外部结点,不包含任何信息。

5.有j个孩子的非叶结点恰好有j-1个关键码,关键码按递增次序排列。结点中包含的信息为∶(p0,k1,p1,k2,p2,…,kj-1,pj-1)

其中,ki为关键码,且满足ki

核心考点八:带权图的最短路径算法及应用

迪杰斯特拉(Dijkstra)算法求单源最短路径,算法思想:

设S为最短距离已确定的顶点集(看作红点集),V-S是最短距离尚未确定的顶点集(看作蓝点集)。

1.初始化:初始化时,只有源点s的最短距离是已知的(SD(s)=0),故红点集S={s},蓝点集为空。

2.重复以下工作,按路径长度递增次序产生各顶点最短路径,在当前蓝点集中选择一个最短距离最小的蓝点来扩充红点集,以保证算法按路径长度递增的次序产生各顶点的最短路径。当蓝点集中仅剩下最短距离为∞的蓝点,或者所有蓝点已扩充到红点集时,s到所有顶点的最短路径就求出来了。

注意:①若从源点到蓝点的路径不存在,则可假设该蓝点的最短路径是一条长度为无穷大的虚拟路径。②从源点s到终点v的最短路径简称为v的最短路径;s到v的最短路径长度简称为v的最短距离,并记为SD(v)。

核心考点九:堆排序

大根堆的定义:完全二叉树,任一非叶子结点都大于等于它的孩子,也就是说根结点是最大的。而且显然大根堆的任一棵子树也是大根堆。

堆排序的基本思想:记录区的分为无序区和有序区前后两部分;用无序区的数建大根堆,得到的根(最大的数)和无序区的最后一个数交换,也就是将该根归入有序区的最前端;如此重复下去,直至有序区扩展至整个记录区。

具体操作可按下面步骤实现:

1.建大根堆

2.交换根和无序区最后一个数

3.重建大根堆,因为交换只是使根改变了,所以左右子树依然分别是大根堆。

4.比较根,左子树的根和右子树的根,如果根最大,则无须再作调整,树已经是大根堆了;如果左子树的根最大,交换它与根,再递归调整左子树;如果右子树的根最大,交换它与根,再递归调整右子数。

5.递归调整到叶子的时候,树就是大根堆了。

核心考点十:各类排序算法的特点及比较

几种主要的排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序、Shell排序、堆排序等。

冒泡排序算法思想:将待排序的元素看作是竖着排列的"气泡",较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个"气泡"序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即"轻"的元素在下面,就交换它们的位置。

选择排序算法思想:选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置已经是正确的了。

插入排序算法思想:经过i-1遍处理后,L[1..i-1]己排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]又是排好序的序列。

快速排序算法思想:快速排序的基本思想是基于分治策略的。对于输入的子序列L[p..r],如果规模足够小则直接进行排序,否则分三步处理:1.分解(Divide):将输入的序列L[p..r]划分成两个非空子序列L[p..q]和L[q+1..r],使L[p..q]中任一元素的值不大于L[q+1..r]中任一元素的值。2.递归求解(Conquer):通过递归调用快速排序算法分别对L[p..q]和L[q+1..r]进行排序。3.合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在L[p..q]和L[q+1..r]都排好序后不需要执行任何计算L[p..r]就已排好序。

归并排序算法思想:分而治之(divide-conquer)。每个递归过程涉及三个步骤:1.分解,把待排序的n个元素的序列分解成两个子序列,每个子序列包括n/2个元素。2.治理,对每个子序列分别调用归并排序MergeSort,进行递归操作。3.合并,合并两个排好序的子序列,生成排序结果。

Shell排序算法思想:算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。

堆排序算法思想:用大根堆排序的基本思想:1.先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区。2.再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key。3.由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。

THE END
1.在线编程——排序算法总结有哪些算法是在线排序算法在线编程——排序算法总结 找实习,阿里一面遇到手写快排,写出来感觉没错(VS2013能通过),但在阿里的测试平台上运行未通过。细思极恐,赶紧总结一波。有幸看到SteveWang的两篇博客:排序算法总结(1)与排序算法总结(2)以及基数排序、计数排序与桶排序,总结的相当详细,我这里算是重新拜读一遍,结合自己的理解写下来。 https://blog.csdn.net/zichen_ziqi/article/details/80419920
2.12VB排序算法双向选择排序视频在线观看超清720P高清 540P 2.0x1.5x1.25x1.0x0.8x 50 跳过片头片尾是|否 恢复默认设置 首页>原创> 12、VB排序算法_双向选择排序 笑口常开 订阅0 分享: 直播热点 下载APP领会员 直播中 小言儿~ 直播中 丽丽感谢家人宠爱 直播中 悠然~https://www.56.com/u85/v_MTY1MDg1NjEw.html
3.MLK机器学习常见算法优缺点了解一下腾讯云开发者社区决策树算法 分类算法 聚类算法 集成算法(AdaBoost算法) 人工神经网络算法 排序算法 关联规则算法(Apriori算法) 01 决策树算法 决策树优点 1、决策树易于理解和解释,可以可视化分析,容易提取出规则。 2、可以同时处理标称型和数值型数据。 3、测试数据集时,运行速度比较快。 https://cloud.tencent.com/developer/article/1485883
4.由浅入深玩转快速排序算法在线工具 首页 话题 文库 我的 更多 商店 码库 Wiki 软件 网址 文章 文稿 书库 图册由浅入深玩转快速排序算法 出处:mp.weixin.qq.com 摘要本文带你了解被誉为20世纪科学和工程领域的十大算法之一的“快速排序”算法。阅读原文 xiaozi 于2024-04-26 分享https://tool.lu/index.php/article/69v/detail
5.如何准备算法面试?算法面试不是高考。 把这个过程看作是和面试官一起探讨一个问题的解决方案。 对于问题的细节和应用环境,可以和面试官沟通。 这种沟通本身很重要,它暗示着你思考问题的方式。 例子 我们需要对一组数据进行排序 设计排序接口,标准库的设计,业务中排序算法。 排序是基础操作,很重要。 解决 快速排序算法:O(nlogn)https://www.imooc.com/article/36452
6.Python3实现对列表按元组指定列进行排序的方法分析python这篇文章主要介绍了Python3实现对列表按元组指定列进行排序的方法,结合实例形式分析了Python3针对列表排序的常见操作技巧与注意事项,需要的朋友可以参考下本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下:Python版本: python3.+ 运行环境: Mac OS IDE: pycharmhttps://www.jb51.net/article/153239.htm
7.快速排序算法算法原理 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。 步骤为: 从数列中挑出一个元素,称为“基准”(pivot), 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任何一边)。在这个分割结束之后,该基准就处于数列https://tool.dreamlikes.cn/algorithm/quicksort
8.MySQL性能优化51CTO博客从数据库处理的查询复杂度来看,第一种为两类很简单的查询,第二种有一条SQL语句有GROUP BY 操作,比第一种解决方案增加了排序分组操作; 从应用程序结果集处理来看,第一种11次结果集的处理,第二种2次结果集的处理,但是第二种解决方案中第二次结果处理数量是第一次的10倍; https://blog.51cto.com/u_13661275/3223259
9.2020届计算机科学方向毕业设计(论文)阶段性汇报图排序的硬件加速器设计 Gorder图排序算法的简单介绍,硬件加速Gorder的基本思路,模拟实验结果。 蒋泽天 多图的批量协同匹配与在线增量式匹配方法第一阶段工作汇报 多图的批量协同匹配与在线增量式匹配方法第一阶段工作汇报,主要包括研究内容回顾,先前方法复原情况,以及理论分析内容进展。 https://zhiyuan.sjtu.edu.cn/html/zhiyuan/announcement_view.php?id=3709
10.快速排序在线编程k6k4在线编程:现在给定一个整数数组,请用快速排序算法对该数组进行排序。https://k6k4.com/code/sshow/aaoxpweyb1597887379356
11.排序算法总结菜鸟教程排序算法 平均时间复杂度 冒泡排序 O(n2) 选择排序 O(n2) 插入排序 O(n2) 希尔排序 O(n1.5) 快速排序 O(N*logN) 归并排序 O(N*logN) 堆排序 O(N*logN) 基数排序 O(d(n+r)) 一. 冒泡排序(BubbleSort) 基本思想:两个数比较大小,较大的数下沉,较小https://www.runoob.com/w3cnote/sort-algorithm-summary.html
12.重现当年AlphaGo神来之笔,DeepMind新AI发现提速70%排序算法因为,无论是排序还是哈希,它们的应用场景从在线购物、云计算到供应链管理等各个场景都能用到,每天会被调用上亿次! 不过,如DeepMind所说: 大家千万不要太兴奋了,AI的力量用于代码效率提升才刚刚开始。 Alpha家族“新贵”发现更快排序算法 这个AI名叫AlphaDev,属于Alpha家族“新贵”,并且基于AlphaZero打造(就是2017年https://m.thepaper.cn/wap/v3/jsp/newsDetail_forward_23406067
13.在线数字排序器对数字进行排序 我们的在线数字排序器使用快速排序算法,其时间复杂度在平均情况下为 O(n log n),在最坏情况下为O(n2),尽管这种行为很少见。快速排序通常被认为是最快的排序算法,并且有许多应用。 Search 数学 ? 最小二乘线性回归计算器? 四分位数间距计算器? 卡方计算器? Z分数计算器? https://www.bchrt.com/tools/number-sorter/
14.智能开放搜索OpenSearch智能搜索搜索引擎大数据基于阿里巴巴自主研发的大规模分布式搜索引擎搭建的一站式智能搜索业务开发平台,目前为包括淘宝、天猫在内的阿里集团核心业务提供搜索服务支持。通过内置各行业的查询语义理解、机器学习排序算法等能力,以及充分开放的文本向量检索引擎能力,助力开发者快速搭建智能搜索服务。 https://www.aliyun.com/product/opensearch
15.快速排序(quicksort)JasonDamon快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。(出自维基百科) https://www.cnblogs.com/Jason-Damon/archive/2013/06/15/3138137.html