语言智能复试简答题猜测整理

机器学习

机器学习,就是找到特征与标签之间的关系,通过数据学得模型的过程就是学习,也称为训练。

机器学习是实现人工智能的途径之一,即以机器学习为手段解决人工智能中的问题。机器学习算法则是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。

机器学习基于学习方式的分类

1)无监督学习

目标:指出数据中的隐藏模式。 当希望找出数据集中隐藏的模式时,可以使用K均值聚类、主成分分析、关联规则、社会网络分析等无监督学习算法。之所以叫无监督学习,是因为我们不知道要找的模式是什么,而是要依靠算法从数据集中发现模式。输入数据中无导师信号,采用聚类方法,学习结果为类别。典型的无导师学习有发现学习、聚类、竞争学习等。

2)监督学习

目标:使用数据中的模式做预测。当需要做预测时,就会需要用到回归分析、K最近邻、支持向量机、决策树、随机森林、神经网络等监督学习算法。之所以叫监督学习,是因为它们的预测都是基于已有模式。输入数据中有导师信号,以概率函数、代数函数或人工神经网络为基函数模型,采用迭代计算方法,学习结果为函数。

3)强化学习

目标:使用数据中的模式做预测,并根据越来越多的反馈结果不断改进。无监督学习模式和监督学习模型在部署之后便无法更改,不同于此,强化学习自身可以通过反馈结果不断改进。以环境反馈(奖/惩信号)作为输入,以统计和动态规划技术为指导的一种学习方法。

机器学习常见算法

深度学习

深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)。

深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。

深度学习在搜索技术、数据挖掘、机器学习、机器翻译、自然语言处理、多媒体学习、语音、推荐和个性化技术,以及其他相关领域都取得了很多成果。

深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。

【监督学习类算法】

回归分析(regresion analysis):

这种监督学习技术用于找出最佳拟合线,使得尽可能多的数据点位于这条线附近。最佳拟合线由带权重的组合预测变量得到。

决策树算法

决策树这种监督学习技术通过一系列二元选择题来拆分数据样本,以获得同质组。虽然决策树容易理解和可视化,但也容易出现过拟合问题。决策树算法充分利用了树形模型,此方法的特点是结构简单、处理数据效率较高。

随机森林(random forest):

这种监督学习技术通过随机选择不同的二元选择题来生成多棵决策树,然后综合这些决策树的预测结果。

支持向量机算法

这种监督学习技术用千把检据点分为两组,具体做法是在两组的外围数据点(也叫支持向量)的中间面一条分界线。它使用核技巧来高效地求得带凸弧的决策边界。

神经网络算法

这种监督学习技术使用神经元层来进行学习和预测。虽然神经网络的预测准确度很高,但其复杂性使得大部分预测结果难以解释。

k最近邻(k-Nearest Neighbors):

这种监督学习技术根据某个数据点周围距离最近的数据点的类型对该数据点进行分类,其中k是用作参考的数据点的个数。

【无监督学习类算法】

k均值聚类(k-means clustering):

这种无监督学习技术用于把相似的数据点划入同一个群组,其中k指群组数量。

EM(期望最大化)算法

是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。
它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM)等等。

隐式马尔科夫算法(HMM)

隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。

隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence)。

序列的每一个位置又可以看作是一个时刻。

朴素贝叶斯算法

贝叶斯方法是以贝叶斯原理为基础,使用概率统计的知识对样本数据集进行分类。由于其有着坚实的数学基础,贝叶斯分类算法的误判率是很低的。

朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。

朴素贝叶斯算法在文字识别, 图像识别方向有着较为重要的作用。

贝叶斯公式:

换个表达形式就会明朗很多,如下:

 

主成分分析

这种无监督学习技术把故据中富含信息的变量组合成新变量,以此减少要分析的变量个账。

最后,人工智能是追求目标,机器学习是实现手段,深度学习是其中一种方法。

训练集、验证集、测试集

[Train set,Validation set and Test set]

训练集用来训练模型;验证集用来确定网络结构或参数(选择最优模型);测试集用来检验最优模型的性能。可以避免过拟合 - 遇到新的数据无法判断

一般来说,训练集、验证集、测试集占原始数据集的比例为3:1:1。

正则化(regularization):

用于防止预测模型出现过拟合问题,具体做法是引入惩罚参数,通过人为增大预测误差对模型复杂度的增加进行惩罚。这使得我们在优化模型参数时需要同时考虑复杂度和准确度。

欠拟合

发生欠拟合时,预测模型过于迟钝,以至于忽略了数据中的基本模式。欠拟合模型很可能忽视数据中的重要趋势,这会导致预测模型对当前数据和未知数据的预测准确度较差。

过拟合

发生过拟合时,预测模型对数据中的随机波动过于敏感,并且将其误以为是持久模式。过拟合模型对当前数据有很高的预测准确度,但是泛化能力不强,即对未知数据的预测效果不佳。

自然语言处理

完整流程

指在人与计算机之间,通过自然语言进行有效通信的各种技术和方法。由于语言的复杂性,处理过程中常常会涉及理解,因此被认为是距离强人工智能最近的任务。

第一步:获取语料

1、已有语料

2、网上下载、抓取语料

第二步:语料预处理

1、语料清洗

2、分词

3、词性标注

4、去停用词

第三步:特征工程

1、词袋模型(BoW)

2、词向量

第四步:特征选择

第五步:模型训练

1、模型

2、注意事项

(1)过拟合

(2)欠拟合

(3)对于神经网络,注意梯度消失和梯度爆炸问题。

在这张图表的正中,是自然语言处理(NLP)最最基础的任务,包括:将句子拆成一个个词语的自动分词、能找出句子中的实体的命名实体识别、能判断句子中每个词词性的词性标注等等;

基于这些基础任务,人们就能完成一些相对复杂的任务:比如语义分析、文本分类、信息检索、自动摘要等等;

基于这些或基础、或复杂的自然语言处理任务,人们就能完成一些可以改变我们生活体验的实用任务:比如机器翻译、问答系统、情感计算、社会计算等等。

机器翻译

机器翻译面临的挑战

 机器翻译任务就是把源语言的句子翻译成目标语言的句子。

 第一个挑战,译文选择。在翻译一个句子的时候,会面临很多选词的问题,因为语言中一词多义的现象比较普遍。

第二个挑战,是词语顺序的调整。由于文化及语言发展上的差异,我们在表述的时候,有时候先说这样一个成份,后面说另外一个成份 ,但是,在另外一种语言中,这些语言成分的顺序可能是完全相反的。

第三个挑战,数据稀疏。据不完全统计,现在人类的语言大约有超过五千种。现在的机器翻译技术大部分都是基于大数据的,只有在大量的数据上训练才能获得一个比较好的效果。而实际上,语言数量的分布非常不均匀的。

机器翻译发展历程

1. 基于规则的翻译翻译知识来自人类专家。找人类语言学家来写规则,这一个词翻译成另外一个。这个成分翻译成另外一个成分,在句子中的出现在什么位置,都用规则表示出来。这种方法的优点是直接用语言学专家知识,准确率非常高。缺点是基于规则的系统开发周期很长,成本很高。还面临规则冲突的问题。随着规则数量的增多,规则之间互相制约和影响。有时为了解决一个问题而写的一个规则,可能会引起其他句子的翻译,带来一系列问题。而为了解决这一系列问题,不得不引入更多的规则,形成恶性循环。

2. 基于统计的方法,约上世纪九十年代出现,我们称之为统计机器翻译。统计机器翻译系统对机器翻译进行了一个数学建模。可以在大数据的基础上进行训练。它的成本是非常低的,因为这个方法是语言无关的。一旦这个模型建立起来以后,对所有的语言都可以适用。统计机器翻译是一种基于语料库的方法,所以如果是在数据量比较少的情况下,就会面临一个数据稀疏的问题。同时,也面临另外一个问题,其翻译知识来自大数据的自动训练,那么如何加入专家知识? 这也是目前机器翻译方法所面临的一个比较大挑战。翻译知识主要来自两类训练数据:平行语料,一句中文一句英文,并且这句中文和英文,是互为对应关系的,也叫双语语料;单语语料,比如说只有英文我们叫单语语料。

从平行语料中能学到什么呢?翻译模型能学到类似于词典这样的一个表,一般称为『短语表』。比如说『在周日』可以翻译成『on Sunday』。后面还有一个概率,衡量两个词或者短语对应的可能性。这样,『短语表』就建立起两种语言之间的一种桥梁关系。

那么我们能够用单语语料来做什么呢?我们用单语语料来训练语言模型。语言模型是做什么事情的呢?就是衡量一个句子在目标语言中是不是地道,是不是流利。比如这里说『read a book』,这个表述是没有问题的,『read a 』后面跟一个『book 』这个词的概率可能是0.5,那么如果说『read a TV』呢?可能性就很低。因为这不符合目标语言的语法。

所以,翻译模型建立起两种语言的桥梁,语言模型是衡量一个句子在目标语言中是不是流利和地道。这两种模型结合起来,加上其他的一些特征,就组成了一个统计机器翻译这样的一个公式。

3. 神经网络翻译近年来迅速崛起。相比统计机器翻译而言,神经网络翻译从模型上来说相对简单,它主要包含两个部分,一个是编码器,一个是解码器。编码器是把源语言经过一系列的神经网络的变换之后,表示成一个高维的向量。解码器负责把这个高维向量再重新解码(翻译)成目标语言。

随着深度学习技术的发展,大约从2014年神经网络翻译方法开始兴起。2015年百度发布了全球首个互联网神经网络翻译系统。短短3、4年的时间,神经网络翻译系统在大部分的语言上已经超过了基于统计的方法。

目前,评价机器翻译的译文质量主要有两种方式。第一种,人工评价。一说人工评价,大家第一时间就会想到『信、达、雅』,这是当年严复老先生提出来。我们用『信』来衡量忠实度,语言是为了交流的,『信』衡量译文是不是忠实地反映了原文所要表达的意思。『达』可以理解为流利度,就像刚才语言模型那样衡量的,译文是不是在目标语言中是一个流畅、地道的表达。至于『雅』,相对比较难衡量,这是仁者见仁、智者见智的。目前来说,机器翻译水平还远没有达到可以用『雅』来衡量的状态。

第二种,自动评价。自动评价能够快速地反映出一个机器翻译的质量好还是不好,相比人工评价而言,自动评价成本低、效率高。

知识图谱

知识图谱,是一个将现实世界映射到数据世界,由节点和边组成的语义网络,其中节点代表物理世界的实体或概念,边则代表实体的属性和它们之间的关系,现实世界的实体之间充满着各种各样的联系,知识图谱就是一种合理摆放他们的方式。

人工智能

人工智能是什么?人工智能应用在什么地方?

人工智能(Artificial Intelligence),英文缩写为AI。

人工智能是研究、开发用于模拟、延伸和扩展人的智能理论、方法、技术及应用系统的一门新的技术科学,它是计算机科学的一个分支。

可以说‍‍这是一门‍‍集数门学科精华的‍‍尖端学科中的尖端学科——因此说人工智能是一门综合学科。

人工智能的应用实例:指纹识别、人脸识别、视网膜识别、虹膜识别、专家系统、智能搜索和博弈等

机器人领域:

人工智能机器人,如RET聊天机器人,它能理解人的语言,用人类语言进行对话,并能够用特定传感器采集分析出现的情况调整自己的动作来达到特定目的

语言识别领域:

该领域其实与机器人领域有交叉,设计的应用是把语言和声音转换成可处理的信息,如语音开锁、语音邮件以及未来的计算机输入等方面

图像识别领域:

利用计算机进行图像处理、分析和理解,以识别各种不同模式的目标和对象的技术;例如人脸识别,汽车牌号识别等。

专家系统:

具有专门知识和经验的计算机智能程序系统,后台采用的数据库相当于人脑,具有丰富的知识储备,采用数据库中的知识数据和知识推理技术来模拟专家解决复杂问题。

推荐系统:

推荐系统是一种信息过滤系统,根据用户的历史行为、社交关系、兴趣等数据,判断用户当前感兴趣的物品或内容。

人工智能具体有哪三种形态呢?

弱人工智能:

弱人工智能 (Artificial Narrow Intelligence, ANI) 是擅长与单个方面的人工智能,比如有能战胜象棋世界冠军的人工智能,但是它只会下象棋,你要问它怎样更好地在硬盘上存储数据,它就不知道怎么回答你了;

强人工智能:

强人工智能 (Artificial General Intelligence, AGI) ,是人类级别的人工智能,强人工智能是指在各方面都能和人类比肩的人工智能,人类能干的脑力活它都能干。创造强人工智能比创造弱人工智能要难得多,我们现在还做不到。Linda Gottfredson教授把智能定义为“一种宽泛的心理能力,能够进行思考、计划、解决问题、抽象思维、理解复杂理念,快速学习和从经验中学习等操作”。强人工智能在进行这些操作时,应该和人类一样得心应手;

超人工智能:

超人工智能 (Artificial Super Intelligence, ASI),牛津哲学家,知名人工智能思想家Nick Bostrom把超级智能定义为“在几乎所有领域都比最聪明的人类大脑都聪明很多,包括科技创新、通识和社交技能”。超人工智能可以是各方面都比人类强一点,也可以是各方面都比人类强万亿倍,超人工智能也正是为什么人工智能这个话题这么火热的缘故,同样也是为什么永生和灭绝这两个词会在本文中多次出现。

人工智能的四大技术分支

人工智能的四大技术分支如下所示:

模式识别:

是指对表征事物或者现象的各种形式(数值的文字、逻辑的关系等等)信息进行处理分析,以及对事物或现象进行描述分析分类解释的过程,例如汽车车牌号的辨识,涉及到图像处理分析等技术;

机器学习:

研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构是指不断完善自身的性能,或者达到操作者的特定要求;

数据挖掘:

知识库的知识发现,通过算法搜索挖掘出有用的信息,应用于市场分析、科学探索、疾病预测等等;

智能算法:

解决某类问题的一些特定模式算法,例如我们最熟悉的最短路径问题,以及工程预算问题等等。

数据挖掘

数据挖掘(Data mining)又译为资料探勘、数据采矿。

它是数据库知识发现(英语:Knowledge-Discovery in Databases,简称:KDD)中的一个步骤。数据挖掘一般是指从大量的数据中通过算法搜索隐藏于其中信息的过程。

应用的技术包括:数据库技术、人工智能技术、数理统计、可视化技术、并行计算等方面。

有目的的从现有的信息中提取数据的模式和模型,以用于未来机器学习和人工智能的数据使用。

其核心目的是找到数据变量之间的关系,A和B可能存在相关关系,但是它无法告诉你A和B存在什么相关关系。

数据挖掘不是一种用来证明假说的方法,而是用来构建各种各样的假说的方法

数据挖掘技术包括关联分析、序列分析、分类、预测、聚类分析及时间序列分析等。

大数据和人工智能的关系是什么?

大数据和人工智能是相辅相成、相互融合的关系。

从广义上来说,可以认为大数据是人工智能的基础,大数据更强调数据的采集和处理,而人工智能更强调深度学习,像人脑一样能够去学习新知识,这是二者的主要差别。

同时,二者很难分开,早在60年前已经有了人工智能,之所以在最近几年得到快速发展主要得益于大数据基础计算能力的提高和数据量的蓬勃发展,如今的智能革命最核心的两个要素就是人工智能和大数据。

大数据定义

大数据:指无法在可承受的时间内用软硬件进行捕捉、管理和处理的数据集合,需要新处理模式才能使数据集合称为具有更强的决策力、洞察力和流程优化等能力的海量、多样化的信息资产。

大数据的特征(4V):

量大(Volume):存储大,计算量大;

样多(Variety):来源多,格式多;

快速(Velocity): 生成速度快,处理速度要求快。

价值(Value):价值密度低,和数据总量的大小成反比。

大数据与云计算之间的关系:

大数据是需求,云计算是解决之道。

云计算是平台,大数据是应用。

云计算之于大数据,云计算是底层平台,大数据是应用。

云计算作为底层平台整合计算、存储和网络等资源,同时提供基础脚骨资源弹性伸缩的能力。

大数据在云计算平台的支撑下,调度下层资源,进行数据源加载,计算和最终结果输出等动作。

数据结构相关

1、数组和链表的区别?

    从逻辑结构来看:数组的存储长度是固定的,数组大小定义之后不能改变,链表能够动态分配存储空间以适应数据动态增减的情况,并且易于进行插入和删除操作。

    从访问方式来看:数组在内存中是一片连续的存储空间,可以通过数组下标对数组进行随机访问,访问效率较高。链表的存储空间不是必须连续的,可以是任意的,因此链表的访问必须从前往后依次进行,访问效率较数组来说比较低。

  数组每一次插入删除都需要往移动元素,时间复杂度都是O(n),而单链插入删除时不需要移动元素,只要改变指针的指向就行,时间复杂度为O(1),大大提高了插入和删除的效率。所以当插入和删除操作频繁时,链表的优势就越明显。

2、单链表结构和顺序存储结构的区别?

    存储分配方式:顺序存储结构是用一段连续的存储空间来存储数据元素,可以进行随机访问,访问效率较高。链式存储结构是用任意的存储空间来存储数据元素,不可以进行随机访问,访问效率较低。

    时间性能:当进行插入和删除操作时,顺序存储结构每次都需要移动元素,而链表不需要移动指针,只需要改变指针的指向。

    空间性能:由于顺序存储结构需要进行预分配存储空间,所以容易造成空间浪费或者溢出。链式存储结构不需要预分配存储空间,可以动态分配存储空间。

3、头指针和头结点的区别?

    头指针:是指向第一个节点存储位置的指针,具有标识作用,头指针是链表的必要元素,无论链表是否为空,头指针都存在。

    头结点:是放在第一个元素节点之前,便于在第一个元素节点之前进行插入和删除的操作,头结点不是链表的必须元素,可有可无,头结点的数据域也可以不存储任何信息。

4、逻辑结构与物理结构?

    数据的逻辑结构包括4种,(1)集合:数据元素之间除了有相同的数据类型再没有其他的关系 (2)线性结构:数据元素之间是一对一的关系 (3)树形结构:数据元素之间是一对多的关系 (4)图状结构:数据元素之间是多对多的关系。

    物理结构也有4种,(1)顺序存储结构 (2)链式存储结构 (3)索引存储结构 (4)散列存储结构

5、邻接矩阵与邻接表的区别?

    邻接矩阵表示:无向图的邻接矩阵是对称的,矩阵的行或列的有效元素的个数之和是节点的度。有向图的邻接矩阵不一定对称,矩阵中行的有效元素的个数之和是节点的出度,列的有效元素的个数之和是节点的入度。

    邻接表表示:无向图的每条边在邻接表中存储两次,若想知道节点的度,只需要求出对应链表中节点的个数即可。有向图的边在邻接表中仅存储一次,若想知道节点的出度,则需要遍历对应的链表,若要求节点的入度则还需要遍历其他的链表。

    邻接矩阵的优点是可以很方便的知道两个节点之间是否存在边;缺点是如果邻接矩阵中节点个数比较少容易造成存储空间的浪费。

    邻接表的优点是只给实际存在的边分配存储空间;缺点是在涉及度时可能需要遍历整个链表。

6、用循环比递归的效率高吗?

    循环和递归两者是可以互换的,不能决定性的说循环的效率比递归高。

    递归的优点是:代码简洁清晰,容易检查正确性;缺点是:当递归调用的次数较多时,要增加额外的堆栈处理,有可能产生堆栈溢出的情况,对执行效率有一定的影响。

    循环的优点是:结构简单,速度快;缺点是:它并不能解决全部问题,有的问题适合于用递归来解决不适合用循环。

7、贪心算法和动态规划以及分治法的区别?

    贪心算法就是做出在当前看来是最好的结果,它是局部最优解。贪心算法从上往下,从顶部一步一步最优,得到最后的结果,它不能保证全局最优解,与贪心策略的选择有关。

    动态规划是把问题分解成子问题。前一个子问题的解对后一个子问题产生一定的影响。在求解子问题的过程中保留哪些有可能得到最优的局部解,丢弃其他局部解,直到解决最后一个问题时也就是初始问题的解。动态规划是从下到上,一步一步找到全局最优解。

    分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

8、单链表和双链表?

    数组存储数据类型一样的元素,数组可以根据下标进行随机访问,但数组有一个缺陷是不能动态的进行插入和删除操作,而链表对于元素的插入和删除很方便,但是访问的效率下降了很多。

    单链表是只有一个指针指向其后继节点的地址,只要知道单链表的首地址便能够遍历整个链表,由于单链表不能进行随机访问,只有通过next指针才能够访问到下一个节点。单链表只能向后访问,而不能够逆向访问。双链表,在单链表的基础上添加一个指向其前驱节点的指针域,实现双向遍历,但是也只能顺序访问,用空间换取了时间上的性能改进。

9、栈和队列的区别?

    队列是允许在一段进行插入另一端进行删除的线性表。进入队列的元素按“先进先出”的规则处理,在表头进行删除在表尾进行插入。在对队列进行操作之前要判断队列是否为空或是否已满。可以用链表来动态存储队列。

    栈是只能在栈顶进行插入和删除操作的线性表。对于插入到栈的元素按“后进先出”的规则处理,插入和删除操作都在栈顶进行。由于进栈和出栈都是在栈顶进行,因此要有一个Size变量来记录当前栈的大小,当进栈时size不能超过数组长度,出栈时栈不为空。

10、栈和队列的相同之处和不同之处?

    相同点:(1)栈和队列都是线性结构 (2)栈和队列在插入时都是在表尾进行 (3)栈和队列都可以用顺序结构或者链表表示 (4)栈和队列插入和删除操作的时间复杂度和空间复杂度都一样。

    不同点:(1)在删除元素时位置不同,栈在表尾进行,队列在表头进行 (2)用链表存储时,栈可以实现多栈空间共享(共享栈),队列却不行。

11、算法的特点?

    算法的五大特性:确定性、有穷性、可行性,有0个或多个输入、有1个或多个输出

    时间复杂度:算法的执行时间与原操作的执行次数之和成正比

    空间复杂度:如果输入数据所占空间只取决于问题本身,而与算法无关,只需要分析除了输入和程序之外的辅助变量所占用的空间即可。

12、线性链表?

    线性链表中每一个存储节点包括两部分,分别是指针域和数据域,指针域用来存储指向下一个或前一个节点的地址,数据域用来存储数据元素的值。链式存储结构中,存储空间是可以不连续的,链式存储结构可以用来表示线性结构也可以用来表示非线性结构。

13、树与二叉树的相关概念?

    树是非线性结构,其元素之间有明显的层次关系。在树的结构中,每个节点都只有一个前件称为父节点,没有前件的节点为树的根节点,简称为树的根;每个节点可以有多个后件成为节点的子节点,没有后件的节点称为叶子节点。

    在树的结构中,一个节点所拥有的子节点个数称为该节点的度,树中最大的节点的度为树的度,树的最大的层次称为树的深度

    二叉树:在二叉树中只有一个根节点,一个节点最多只能有两个子节点,称为左子树和右子树。

    满二叉树:满二叉树是指除了最后一层外其他节点均有两颗子树,第k层有2^(k-1)个节点,深度为m的树共有2^m-1个节点

    完全二叉树:完全二叉树是指除了最后一层外,其他任何一层的节点数均达到最大值,且最后一层也只是在最右侧缺少节点

  二叉树的存储:二叉树可以用链式存储结构来存储,满二叉树和完全二叉树可以用顺序存储结构来存储

    二叉树的遍历:二叉树有先序遍历(根左右),中序遍历(左根右)和后续遍历(左右根)

14、图的相关概念?

    图的表示:G=(V,E)=(顶点,边);无向完全图有n(n-1)/2条边,有向完全图有n(n-1)条边

    迪杰斯特拉(dijkstra)算法:

迪杰斯特拉算法是经典的单源最短路径算法,用于求某一顶点到其他顶点的最短路径,它的特点是以起始点为中心层层向外扩展,直到扩展的终点为止,迪杰斯特拉算法要求边的权值不能为负权。

    弗洛伊德(Floyd)算法:

弗洛伊德算法是经典的求任意顶点之间的最短路径,其边的权值可为负权,该算法的时间复杂度为O(N^3),空间复杂度为O(N^2)。

    普里姆(prim)算法:

用来求最小生成树,其基本思想为:从联通网络N={V,E}中某一顶点u0出发,选择与他关联的最小权值的边,将其顶点加入到顶点集S中,此后就从一个顶点在S集中,另一个顶点不在S集中的所有顶点中选择出权值最小的边,把对应顶点加入到S集中,直到所有的顶点都加入到S集中为止。

    克鲁斯卡尔(kruskal)算法:

用来求最小生成树,其基本思想为:设有一个有N个顶点的联通网络N={V,E},开始时建立一个只有N个顶点,没有边的非连通图T,T中每个顶点都看作是一个联通分支,从边集E中选择出权值最小的边且该边的两个端点不在一个联通分支中,则把该边加入到T中,否则就再从新选择一条权值最小的边,直到所有的顶点都在一个联通分支中为止。

15、深度优先搜索步骤?

    (1)访问起始点v

    (2)若v的第一个邻接点没有被访问过,则深度遍历该邻接点;

    (3)若v的第一个邻接点已经被访问,则访问其第二个邻接点,进行深度遍历;重复以上步骤直到所有节点都被访问过为止

16、广度优先搜索的步骤?

    (1)访问起始点v

    (2)依次遍历v的所有未访问过得邻接点

    (3)再依次访问下一层中未被访问过得邻接点;重复以上步骤,直到所有的顶点都被访问过为止

17、拓扑排序的概念以及实现?

    拓扑排序在工程中的应用十分重要,它可以决定哪些子工程必须要先执行,哪些子工程要在某些工程完成后才能执行。以顶点为活动,边为活动间先后顺序关系的有向图成为顶点活动网,简称为AOV网。一个AOV网应该是有向无环图,不应该存在回路。在AOV网中如果不存在回路,则可以把所有的活动排列成一个序列,称该序列为拓扑序列,拓扑序列并不是唯一的。形成拓扑序列的过程称为拓扑排序。

    拓扑排序的步骤:

    (1)在有向图中任意选择一个没有前驱的节点输出

    (2)从图中删去该节点以及与他相连的边

    (3)重复以上步骤,直到所有的顶点都输出或者当前图中不存在无前驱的顶点为止,后者代表该图是有环图,所以可以通过拓扑排序来判断一个图是否存在环。

18、关键路径的相关概念?

    AOE网是一种以顶点为事件,弧为活动,权为活动的持续时间的带权有向无环图,通常AOE网用来估算工程的完成时间。

    关键路径:在AOE网中,从起始点到终点的最大路径长度的路径为关键活动。最大路径长度是指:该路径上的活动持续时间之和最大。

    关键活动:关键路径上的活动为关键路径,关键活动的最早开始时间等于最晚开始时间。完成整个工程的时间应该是从始点到终点的最大路径长度,关键路径长度即为工程的最短完成时间。

19、对各种查找方法的概括?

查找分为静态查找表和动态查找表;静态查找表包括:顺序查找、折半查找、分块查找;动态查找包括:二叉排序树和平衡二叉树。

    (1)顺序查找:

把待查关键字key放入哨兵位置(i=0),再从后往前依次把表中元素和key比较,如果返回值为0则查找失败,表中没有这个key值,如果返回值为元素的位置i(i!=0)则查找成功,设置哨兵的位置是为了加快执行速度。时间效率为O(n)

    (2)折半查找:

要求查找表为顺序存储结构并且有序,若关键字在表中则返回关键字的位置,若关键字不在表中时停止查找的

    (3)分块查找:

先把查找表分为若干子表,要求每个子表的元素都要比他后面的子表的元素小,也就是保证块间是有序的(但是子表内不一定有序),把各子表中的最大关键字构成一张索引表,表中还包含各子表的起始地址。他的特点是:块间有序,块内无序,查找时块间进行索引查找,块内进行顺序查找。

    (4)二叉排序树:

二叉排序树的定义为:一棵具有如下特点的树:如果该树有左子树,则其左子树的所有节点值小于根的值;若该树有右子树,则其右子树的所有节点值均大于根的值;其左右子树也分别为二叉排序树。在查找时可以进行动态的插入,插入节点要符合二叉排序树的定义

    (5)平衡二叉树:

是一棵具有如下特点的树:他的左子树和右子树的高度差的绝对值不能大于1,且他的左右子树也都是平衡二叉树。

    平衡因子:是指左子树的高度减去右子树的高度,它的值只能为1,0,-1

    如果一个平衡二叉树中插入一个节点可能造成失衡,这时就要进行树结构的调整,即平衡旋转。包括4中情况:在左子树的左子树上插入节点时向右进行单向旋转;在右子树的右子树上插入节点时向左进行单向旋转;在左子树的右子树插入节点时先向左旋转再向右旋转;在右子树的左子树插入节点时先向右旋转再向左旋转。

20、哈希表的概念、哈希函数的构造方法、哈希冲突的解决办法?

    哈希表又称为散列表,是根据关键字码的值直接进行访问的数据结构,即它通过把关键码的值映射到表中的一个位置以加快查找速度,其中映射函数叫做散列函数,存放记录的数组叫做散列表。

    哈希函数的构造方法包括:直接定址法,除留余数法,数字分析法,平方取中法,折叠法,随机数法

    (1)直接定址法:取关键字的某个线性函数值作为散列地址,H(key)=a*key+b。

    (2)除留余数法:取关键字对p取余的值作为散列地址,其中p<m,即H(key)=key%p (p<m)。

    (3)数字分析法:当关键字的位数大于地址的位数,对关键字的各位分布进行分析,选出分布均匀的任意几位作为散列的地址,适用于所有关键字都已知的情况。

    (4)平方取中法:对关键字求平方,再取结果中的中间几位作为散列地址。

    (5)折叠法:将关键字分为位数相同的几部分,然后取这几部分的叠加和作为散列地址。适用于关键字位数较多,且关键字中每一位上数字分布大致均匀。

    (6)随机数法:选择一个随机函数,把关键字的随机函数值作为散列地址。适合于关键字的长度不相同时。

    哈希冲突的解决方法包括:开放定址法和拉链法,当冲突发生时,使用某种探测技术形成一个探测序列,然后沿此序列逐个单单元查找,直到找到该关键字或者碰到一个开放的地址为止,探测到开放的地址表明该表中没有此关键字,若要插入,则探测到开放地址时可将新节点插入该地址单元。其中开放定址法包括:线性探查法,二次探查法,双重散列法

    (1)线性探查法:基本思想,探查时从地址d开始,首先探查T[d],在探查T[d+1]...直到查到T[m-1],此后循环到T[0],T[1]...直到探测到T[d-1]为止。

    (2)二次探查法:基本思想,探查时从地址d开始,首先探查T[d],再探查T[d+1^2],T[d+2^2]...等,直到探查到有空余地址或者探查到T[d-1]为止,缺点是无法探查到整个散列空间。

    (3)双重散列法:基本思想,使用两个散列函数来确定地址,探查时从地址d开始,首先探查T[d],再探查T[d+h1(d)],T[d+2*h1(d)]...

    链接法:将所有关键字为同义词的节点链接在同一个单链表中,凡是散列地址为i的节点均插入到头指针为i的单链表中。

21、对各种内部排序的概括与总结?

    排序:是指把一个任意元素的序列排列成一个按关键字key有序的序列。内部排序包括:插入排序、选择排序、交换排序、归并排序、基数排序。其中插入排序包括:直接插入排序、希尔排序;选择排序包括:简单选择排序,堆排序;交换排序包括:冒泡排序、快速排序。

    (1)直接插入排序(稳定):

基本思想为:将序列分为有序部分和无序部分,从无序部分依次选择元素与有序部分比较找到合适的位置,将原来的元素往后移,将元素插入到相应位置上。时间复杂度为:O(n^2),空间复杂度为O(1)

    (2)折半插入排序(稳定):

基本思想为:设置三个变量low high mid,令mid=(low+high)/2,若a[mid]>key,则令high=mid-1,否则令low=mid+1,直到low>high时停止循环,对序列中的每个元素做以上处理,找到合适位置将其他元素后移进行插入。他的比较次数为O(nlog2n),但是因为要后移,因此时间复杂度为O(n^2),空间复杂度为O(1)。

    (3)希尔排序(不稳定):

基本思想为:先将序列分为若干个子序列,对各子序列进行直接插入排序,等到序列基本有序时再对整个序列进行一次直接插入排序。优点是:让关键字值小的元素能够很快移动到前面,且序列基本有序时进行直接插入排序时间效率会提升很多,空间复杂度为O(1)。

    (4)简单选择排序(不稳定):

基本思想为:将序列分为2部分,每经过一趟就在无序部分找到一个最小值然后与无序部分的第一个元素交换位置。优点是:实现起来特别简单,缺点是:每一趟只能确定一个元素的位置,时间效率低。时间复杂度为O(n^2),空间复杂度为O(1)。

    (5)堆排序(不稳定):

设有一个任意序列,k1,k2,...,kn,当满足下面特点时称之为堆:让此序列排列成完全二叉树,该树具有以下特点,该树中任意节点均大于或小于其左右孩子,此树的根节点为最大值或者最小值。优点是:对大文件效率明显提高,但对小文件效率不明显。时间复杂度为O(nlog2n),空间复杂度为O(1)。

    (6)冒泡排序(稳定):

基本思路为:每一趟都将元素进行两两比较,并且按照“前小后大”的规则进行交换。优点是:每一趟不仅能找到一个最大的元素放到序列后面,而且还把其他元素理顺,如果下一趟排序没有发生交换则可以提前结束排序。时间复杂度为O(n^2),空间复杂度为O(1)。

    (7)快速排序(不稳定):

基本思路为:在序列中任意选择一个元素作为中心,比它大的元素一律向后移动,比它小的元素一律向前移动,形成左右两个子序列,再把子序列按上述操作进行调整,直到所有的子序列中都只有一个元素时序列即为有序。优点是:每一趟不仅能确定一个元素,时间效率较高。时间复杂度为O(nlog2n),空间复杂度为O(log2n).

    (8)归并排序(稳定):

基本思想为:把两个或者两个以上的有序表合并成一个新的有序表。时间复杂度为O(nlogn),空间复杂度和待排序的元素个数相同。

    (9)基数排序:

对于n个记录进行链式基数排序的时间复杂度为O(d(n+rd)),其中每一趟分配的时间复杂度为O(n),回收的时间复杂度为O(rd)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值