一、数据结构与算法1:
1、插入操作
顺序表的插人运算是指在表的第i(1<=i<=n+1)个位置前插入一个新元素e,使长度为n的顺序表(e₁,…,eᵢ₋₁,e,eᵢ,…,eₙ)变成长度为n+1的顺序表(e₁,…,eᵢ₋₁,e,eᵢ,…,eₙ)(其中n为L的表长度)。
【算法思想】用顺序表作为线性表的存储结构时,由于结点的物理顺序必须和结点的逻辑顺序保持一致,因此必须将原表中位置n,n-1,…,i上的结点,依次后移到位置n+1,n,…,i+1上,空出第i个位置,然后在该位置上插入新结点e。当i=n+1时,是指在顺序表的末尾插入结点,所以无须移动结点,直接将e插入表的末尾即可。
【算法描述】顺序表的插入运算
#define OK 1
#define ERROR 0
int InsList(SeqList * L,int i,ElemType e)
/*在顺序表L中第i个数据元素之前插入一个元素e,i的合法取值范围是1<=i<=L->last+2 */
{
int k;
if((i<1)||(i>L->last+2))/*首先判断插入位置是否合法*/
{ printf("插入位置i值不合法");
ruturn(ERROR);
}
if(L->last>=MAXSIZE-1)
{ printf("表已满,无法插入");
ruturn(ERROR);
}
for(k=L->last;k>=i-1;k--)/*为插入元素而移动位置*/
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;/*在C语言的数组中,第i个元素的下标为i减1*/
L->last++;
return(OK);
}
【算法分析】当在表尾(i=L->last+2)插入元素时,因为循环的终值大于初值,此时不需要移动元素,可直接在表尾插入e。当在表头(i=1)插入元素时,移动元素的语句L->elem[k+1]=L->elem[k]需执行n次,即将表中已存在的n个元素依次后移一个位置才能将e插入。因此,语句L->elem[k+1]=L->elem[k]的语句执行频度与插入位置i有关。
设Eᵢₙₛ为在长度为n的表中插入一个元素所需移动的元素的平均次数,假设Pᵢ为在第i个元素之前插入元素的概率,并假设在任何位置上插入的概率相等,即Pᵢ=1/(n+1),i=1,2,...,n+1,则有
Eᵢₙₛ=
二、Hadoop入门:
(一)分布式系统与集群的区别
分布式系统和集群是两个不同的概念,它们在结构、资源管理和扩展性等方面存在差异。
分布式:分布式的主要工作是分解任务,将职能拆解,多个人在一起做不同的事
集群:集群主要是将同一个业务,部署在多个服务器上,多个人在一起做同样的事
总的来说,分布式系统强调的是将不同的业务分布在不同的地方,而集群则是将多台服务器集中在一起,实现同一业务。两者各有优势,选择使用哪种架构取决于具体的业务需求和技术目标。
注:Hadoop架构模式为主从模式(中心化模式)架构
(二)Hadoop框架
Hadoop是一个用于处理大规模数据集的开源软件框架,它以Java语言编写,能够在计算机集群上进行分布式计算和分析。其核心由以下组件构成:
1. HDFS(Hadoop Distributed File System):这是一个高度可靠、高吞吐量的分布式文件系统,设计用来存储非常大的文件,并提供高吞吐量的数据访问,以便在多台机器上运行数据处理任务。
2. YARN(Yet Another Resource Negotiator):它是一个作业调度和集群资源管理的框架,负责管理计算资源,在多个作业之间进行调度和分配。
3. MapReduce:这是一个编程模型,用于处理大量数据。它通过映射(Map)和归约(Reduce)两个主要阶段来处理数据,用户可以通过实现这两个接口来完成复杂的数据分析任务。
除了这些核心组件,Hadoop生态系统还包括一系列其他工具和项目,如Hive、Pig、HBase等,它们构建在Hadoop之上,提供了更高级的数据处理功能和更方便的用户界面。
Hadoop的优势在于其高可靠性、高扩展性和高效性。它能够处理PB级别的数据,并且可以在成千上万的节点上运行,这使得它在大数据时代成为了一个非常重要的工具。
Hadoop由两个主要的集群组成:HDFS集群和YARN集群。以下是关于这两个集群的详细介绍:
HDFS集群:负责海量数据的存储。它的角色主要包括NameNode、DataNode和SecondaryNameNode。其中,NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问;DataNode则负责处理文件系统的数据存储;SecondaryNameNode辅助NameNode进行元数据备份,以防止数据丢失。
YARN集群:负责海量数据运算时的资源调度。它的组件包括ResourceManager、NodeManager等。ResourceManager负责全局的资源调度,而NodeManager则是每台工作节点上的代理,负责启动和监控容器。
尽管HDFS和YARN在逻辑上是分离的,但在物理部署上它们通常部署在一起,以提高数据处理的效率和便捷性。这种设计允许Hadoop集群能够高效地处理大规模数据任务,同时也保证了系统的可扩展性和可靠性。
Hadoop集群搭建方式主要分为Standalone mode(单机模式)和Cluster mode(集群模式)。