数据结构

Hadoop序列化机制及实例

风格不统一 提交于 2020-04-03 04:26:55
序列化 1、什么是序列化? 将结构化对象转换成字节流以便于进行网络传输或写入持久存储的过程。 2、什么是反序列化? 将字节流转换为一系列结构化对象的过程。 序列化 用途 : 1、作为一种 持久化格式 。 2、作为一种 通信的数据格式 。 3、作为一种数据拷贝、克隆机制。 Java序列化和反序列化 1、创建一个对象实现了 Serializable 2、序列化 : ObjectOutputStream.writeObject(序列化对象) 反序列化: ObjectInputStream .readObject()返回序列化对象 具体实现,可参考如下文章: http://blog.csdn.net/scgaliguodong123_/article/details/45938555 为什么Hadoop不直接使用java序列化? Hadoop 的序列化机制与 Java 的序列化机制不同,它将对象序列化到流中, 值得一提的是java的序列化机制是不断的创建对象, 但在 hadoop 的序列化机制中,用户可以复用对象,这样就减少了java对象的分配和回收,提高了应用效率。 Hadoop序列化 Hadoop的序列化不采用java的序列化,而是实现了自己的序列化机制。 Hadoop通过 Writable 接口实现的序列化机制,不过没有提供比较功能,所以和java中的 Comparable 接口合并

数据结构1 - 04-树5 Root of AVL Tree

筅森魡賤 提交于 2020-04-02 20:23:26
1 #include<stdio.h> 2 #include<math.h> 3 #define MAXN 1000 4 struct node{ 5 int left,right,data,height,parent; 6 }; 7 struct node a[MAXN]; 8 int n; 9 void read(); 10 void updateHeight(int x); 11 int getfactor(int x); 12 int getheight(int x); 13 void L(int x1,int x2); 14 void R(int x1,int x2); 15 int main(){ 16 read(); 17 printf("%d\n",a[a[0].data].data); 18 return 0; 19 } 20 void read(){ 21 int i,data,pre,now; 22 scanf("%d",&n); 23 a[0].data = 0; 24 for(i=1;i<=n;i++){ 25 a[i].left= -1; 26 a[i].right=-1; 27 a[i].height=0; 28 a[i].parent=-1; 29 } 30 for(i=1;i<=n;i++){ 31 scanf("%d",&data); 32 if

C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用

余生长醉 提交于 2020-04-02 08:24:38
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇。 主要针对线性表中的 链表 STL std::list进行分析和总结 。 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表、二叉树、图等。在使用这些数据结构时感到有些吃力,主要是对一些主要的数据结构理解的不够,所以趁着暑假假期,近期一段时间总会抽出时间复习一下数据结构, 參考的教材是王立柱编著的《C/C++与数据结构》 ,在详细的应用中採用的是C++标准模板库STL中相应实现的数据结构,主要 參考的是MSDN文档 。 跟着教材的一步一步推进。如今已经复习完了链表一章节。详细的理论能够參看我的博文: http://blog.csdn.net/lg1259156776/article/details/47018813 本次关注点在list模板类的使用。 正文 回想动态数组类 上一篇总结STL vector动态数组类的时候忘记了对还有一种跟vector很类似的动态数组类deque进行说明。 以下对此进行一下补充。 STL deque类须要包括<deque>和使用std。支持在数组的开头和末尾插入或删除元素,而vector仅仅能在末尾插入或删除

R语言学习笔记——数据结构 & 数据框基本操作

随声附和 提交于 2020-04-02 07:19:08
参考书籍:R语言实战 数据结构: 1. 向量 : 用于存储数值型、字符型或逻辑型数据的一维数组   1.1 创建 : a <- c(1, 2, 3, 4)   1.2 访问 : a[1] : 1        a[c(2, 4)] : 2 4 (向量a中的第二 个和第四个元素)        a[1:4] : 1 2 3 4 (向量a中的第一个直到第四个元素)   1.3 注意 :       1) 单个向量中的数据必须拥有 相同的类型或模式 (数值型、字符型或逻辑型)       2) 标量是只含一个元素的向量,例如f <- 3 、 g <- "US" 和h <- TRUE。它们用于保存常量 2. 矩阵 : 矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)   2.1 创建 : mymatrix <- matrix(vector, nrow=number_of_row, ncol=number_of_col, byrow=logical_value, dimnames=list(char_vector_rownames,                   char_vector_colnames))        其中vector包含了矩阵的元素, nrow和ncol用以指定行和列的维数, dimnames包含了可选的、以字符型向量表示的行名和列名

设计模式之访问者模式(Visitor)详解及代码示例

一曲冷凌霜 提交于 2020-04-02 06:06:25
一、访问者模式的定义与特点   访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。 二、访问者模式优缺点   访问者(Visitor)模式是一种对象行为型模式,其主要优点如下: 扩展性好。能够在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能。 复用性好。可以通过访问者来定义整个对象结构通用的功能,从而提高系统的复用程度。 灵活性好。访问者模式将数据结构与作用于结构上的操作解耦,使得操作集合可相对自由地演化而不影响系统的数据结构。 符合单一职责原则。访问者模式把相关的行为封装在一起,构成一个访问者,使每一个访问者的功能都比较单一。   访问者(Visitor)模式的主要缺点如下: 增加新的元素类很困难。在访问者模式中,每增加一个新的元素类,都要在每一个具体访问者类中增加相应的具体操作,这违背了“开闭原则”。 破坏封装。访问者模式中具体元素对访问者公布细节,这破坏了对象的封装性。 违反了依赖倒置原则。访问者模式依赖了具体类,而没有依赖抽象类。 三、访问者模式的实现   访问者(Visitor)模式实现的关键是如何将作用于元素的操作分离出来封装成独立的类

数据结构-堆-堆维护-130. 堆化

♀尐吖头ヾ 提交于 2020-04-01 11:54:39
2020-04-01 08:15:56 问题描述: 给出一个整数数组,堆化操作就是把它变成一个最小堆数组。 对于堆数组A,A[0]是堆的根,并对于每个A[i],A [i * 2 + 1]是A[i]的左儿子并且A[i * 2 + 2]是A[i]的右儿子。 样例 输入 : [3,2,1,4,5] 输出 : [1,2,3,4,5] 解释 : 返回任何一个合法的堆数组 挑战 O(n)的时间复杂度完成堆化 问题求解: 由于堆有一个性质就是其是完全二叉树,那么我们就可以从非叶子节点开始向下过滤,具体的操作就是从上往下将最小的置为根。 通过对每次过滤的节点数的估算,即n / 2 + n / 4 + ... + 1 = n。 时间复杂度:O(n) public void heapify(int[] A) { for (int i = A.length / 2; i >= 0; i--) { siftdown(A, i); } } private void siftdown(int[] A, int idx) { if (idx >= A.length) return; int k = idx; if (idx * 2 + 1 < A.length && A[idx * 2 + 1] < A[k]) k = idx * 2 + 1; if (idx * 2 + 2 < A.length && A

数据结构 02-线性结构4 Pop Sequence

Deadly 提交于 2020-04-01 11:08:12
刚开始拿到这道题的时候错误的做法: 1 //相邻之间的数小于等于M 2 //首先弹出来的数小于等于M 3 #include<stdio.h> 4 #include<math.h> 5 #define MAXN = 1000000; 6 int M,N,K; 7 int main(){ 8 int pre,now,i,j,flag=0; 9 scanf("%d %d %d",&M,&N,&K); 10 for(i=0;i<K;i++){ 11 flag = 0; 12 scanf("%d",&now); 13 if(now>M) flag=1; 14 for(j=1;j<N;j++){ 15 pre = now; 16 scanf("%d",&now); 17 if(abs(pre-now)>M) flag=1; 18 } 19 if(flag==1) printf("NO\n"); 20 else printf("YES\n"); 21 } 22 23 return 0; 24 } 后来发现问题后,重新选择的方法: 1 #include<stdio.h> 2 #define MAXN 10000 3 int M,N,K; 4 int b[MAXN],stack[MAXN],top; 5 int detect(); 6 int main(){ 7 int p,i,j,flag=0;

初探数据结构之“树”的定义和二叉树定义及性质

匆匆过客 提交于 2020-04-01 08:25:36
这周学习了数据结构中的树,看了郝斌的数据结构视频。。。虽然讲的很浅很浅但是对于我这么笨的人来说刚好能看懂。又通过小组学姐的讲解对树有了一个初步的认识,现在将学到的知识总结一下=、= 一、树的定义 树是由n(n>=0)个节点构成的有限集合,n = 0时称为空树。在任意一颗非空树中: 1)、有且只有一个根节点 2)、除根节点以外,其余节点分成m(m > 0)个互不相交的有限集合T1、T2、。。。Tm,其中每一个集合又都是一棵树 =、=好吧,我承认这是抄书的。下图就一棵树,怎么长得不像树。。。确实不像树,像葡萄(=、=) (图片来自维基百科) 二、树中的术语 1)、结点:包含一个数据元素或指向其他元素的索引(就是上图中的一个小圆圈=、=) 2)、结点的度:一个结点的子树个数(上图中一个圆圈后边跟的几条线,注意是它后边挂的,不包括挂它的那根) 3)、树的度:树中结点的最大度 4)、终端结点(叶子结点):度为零的结点(图中那些挂在最后孤单的那些圆圈=、=) 5)、分支结点:度不为零的结点,也成非终端结点 6)、孩子结点:一个结点对的直接后继(就是直接挂在它后边的圆圈) 7)、双亲结点:一个结点的直接前驱(挂它的那个圈、问:为什么叫双亲结点而不叫父结点或母结点?答:男女平等=、=) 8)、结点的层次:根为第一层,根的孩子结点为第二层,以此类推。。。 9)、树的高度(深度):树中结点的最大层次

javascript数据结构之栈

£可爱£侵袭症+ 提交于 2020-04-01 02:20:19
接下来我会试着用javascript来是实现常见数据结构,今天先写栈。 首先我们得知道,栈是一种遵循后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。在JavaScript中变量保存和函数调用都是用栈存储的。 首先创建一个类来表示一个栈,需要一种数据结构来保存栈里的元素。这里我们就选择数组来存放栈内部的数据:var array = [ ]; 注意此时数组array的末端相当于栈的顶端。 接下来,为我们的栈声明一些方法: push():添加一个(或几个)新元素到栈顶 pop():移除栈顶的元素,同时返回被移除的元素 peek():获取栈顶的元素,不对栈做出任何修改 isEmpty():如果栈里没有任何元素就返回true,否则返回false clear():清空栈 size():返回栈元素的个数 function Stack(){ var array = []; //定义内部数组用来存储数据,用数组的末端来模拟堆栈的顶端 this.push = function(data){ //添加元素到栈顶 array.push(data); } this.pop = function(){ //移除栈顶元素 return array.pop(); } this.isEmpty = function()

数据结构和算法

一个人想着一个人 提交于 2020-04-01 01:04:55
1. 数据结构 物理数据结构 数组 链表 逻辑数据结构 栈 队列 散列表(哈希表) 树 堆 (一棵完全二叉树) 图 2. 算法 查找算法 顺序查找 二分查找 插值查找 斐波那契查找 数表查找 分块查找 哈希查找 排序 直接插入排序 希尔排序 直接选择排序 堆排序 冒泡排序 快速排序 归并排序 桶排序/基数排序 来源: https://www.cnblogs.com/zswordsman/p/shu-ju-jie-gou-he-suan-fa.html