自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 收藏
  • 关注

原创 28 图、图的存储、图的深度优先遍历和广度优先遍历

图文章目录图1. 图基本介绍1.1 为什么要有图1.2 图的举例说明1.3 图的常用概念2. 图的表示方式2.1 邻接矩阵2.2 邻接表3. 图的邻接矩阵存储方式的代码实现4. 图的深度优先遍历4.1 步骤4.2 代码实现5. 图的广度优先遍历5.1 步骤5.2 代码实现1. 图基本介绍1.1 为什么要有图线性表局限于一个直接前驱和一个直接后继的关系。树也只能有一个直接前驱也就是父节点。当我们需要表示多对多的关系时, 这里我们就用到了图。1.2 图的举例说明图是一种数据结构,其中结点

2020-07-08 10:24:16 380

原创 27 多路查找树

多路查找树文章目录多路查找树1. 二叉树与 B 树2. 多叉树3. B 树的基本介绍4. 2-3 树4.1 2-3 树是最简单的 B 树结构,特点如下4.2 2-3 树应用案例5. B 树、B+ 树和 B* 树5.1 B 树的介绍5.2 B+ 树的介绍5.3 B* 树的介绍1. 二叉树与 B 树二叉树需要加载到内存,如果二叉树的节点较少,没有什么问题,但是如果二叉树的节点很多就会出现如下问题:在构建二叉树时,需要多次进行 IO 操作(数据可能存储在数据库或文件中),所以对构建二叉树的速度会有影响

2020-07-08 10:18:59 827

原创 26 平衡二叉树(左旋、右旋、双旋)

平衡二叉树文章目录平衡二叉树1. 引入2. 基本介绍3. 左旋转4. 右旋转5. 双旋转6. 完整代码1. 引入给出一个数列 {1,2,3,4,5,6},创建一棵二叉排序树,并分析问题。问题一:左子树全部为空,从形式上看,更像是一个单链表。问题二:插入速度没有影响,但是查询速度明显降低,不能发挥 BST 的优势,因为每次还需要比较左子树,其查询速度比单链表还慢 。解决方案:平衡二叉树 AVL 。2. 基本介绍平衡二叉树也叫平衡二叉搜索树又被称为 AVL 树, 可以保证查询效率较高。它

2020-07-05 23:18:39 571

原创 25 二叉排序树的创建、遍历与节点的删除

二叉排序树文章目录二叉排序树1. 引入1.1 一个需求1.2 解决方案分析1.2.1 使用数组1.2.2 使用链式存储1.2.3 使用二叉排序树2. 二叉排序树介绍3. 二叉排序树的创建和遍历3.1 创建3.2 遍历4. 二叉排序树的删除4.1 删除叶子节点4.2 删除只有一棵子树的节点4.3 删除有两棵子树的节点4.4 代码实现1. 引入1.1 一个需求给定 1 个序列(7,3,10,12,5,1,9),要求能够高效的完成对数据的查询和添加。1.2 解决方案分析1.2.1 使用数组数组

2020-07-03 15:22:39 359

原创 24 哈夫曼编码实现字符串的压缩与解压

哈夫曼编码文章目录哈夫曼编码1. 步骤2. 数据压缩3. 数据解压1. 步骤传输的字符串:i like like like java do you like a java。计算各个字符对应的个数。按照字符出现的次数构建一颗赫夫曼树, 次数作为权值。根据赫夫曼树,给各个字符,规定编码 (前缀编码), 向左的路径为 0 向右的路径为 1。则有,o: 1000 u: 10010 d: 100110 y: 100111 i: 101 a : 110 k: 1110 e: 1111 j: 0000

2020-07-02 10:17:56 901

原创 23 哈夫曼树

哈夫曼树文章目录哈夫曼树1. 基本介绍2. 重要概念3. 构成哈夫曼树的步骤4. 代码实现1. 基本介绍给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度 (wpl) 达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树 (Huffman Tree)。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。2. 重要概念路径和路径长度: 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为 1,则

2020-06-22 09:37:59 259

原创 22 堆排序的思想与代码实现

堆排序1. 堆排序基本思想将待排序序列构造成一个大顶堆;此时,整个序列的最大值就是堆顶的根节点;将其与末尾元素进行交换,此时末尾就为最大值;然后将剩余 n-1 个元素重新构造成一个堆,这样会得到 n 个元素的次小值。如此反复执行,便能得到一个有序序列了。2. 堆排序代码实现import java.util.Arrays;public class HeapSort { public static void main(String[] args) { int[] a

2020-06-19 16:44:42 169

原创 21 线索二叉树 (前序、中序、后序线索化二叉树及遍历)

线索二叉树1. 基本介绍n 个结点的二叉链表中含有 n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")。这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树( Threaded BinaryTree )。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。一个结点的前一个结点,称为前驱结点。一个结点的后一个结点,称为后继结点。2.

2020-06-19 15:07:35 882

原创 20 顺序存储二叉树

顺序存储二叉树文章目录顺序存储二叉树1. 概念2. 特点3. 遍历顺序存储二叉树1. 概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。示意图2. 特点顺序二叉树通常只考虑完全二叉树。第 n 个元素的左子节点为 2 * n + 1 。第 n 个元素的右子节点为 2 * n + 2 。第 n 个元素的父节点为 (n-1) / 2 。n : 表示二叉树中的第几个元素(按 0 开始编号如图所示)。3. 遍历顺序存储二叉树p

2020-06-18 08:42:26 170

原创 19 二叉树删除指定节点

二叉树删除指定节点规定:1.1 如果删除的节点是叶子节点,则删除该节点。1.2 如果删除的节点是非叶子节点,则删除该子树。步骤:2.1 如果树是空树,无需操作直接返回。如果根节点是要删除的节点,则直接将二叉树置空。2.2 如果当前节点的左子节点不为空,并且左子节点就是要删除的节点,就将 this.left = null,并且直接返回。2.3 如果当前节点的右子节点不为空,并且左子节点就是要删除的节点,就将 this.right = null,并且直接返回。2.4 如果第2步和第3步没

2020-06-17 16:10:02 490

原创 18 二叉树查找指定节点

二叉树查找指定节点通过 前序遍历、中序遍历、后序遍历 在二叉树中查找符合条件的节点。代码实现public class BinaryTreeDemo { public static void main(String[] args) { // 手动构建二叉树 Node root = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3);

2020-06-17 14:34:50 416

原创 17 二叉树的前序、中序、后序遍历

二叉树的前序、中序、后序遍历前序遍历: 先输出父节点,再遍历左子树和右子树。中序遍历: 先遍历左子树,再输出父节点,再遍历右子树。后序遍历; 先遍历左子树,再遍历右子树,最后输出父节点。代码实现://需求:遍历上图中的二叉树public class BinaryTreeDemo { public static void main(String[] args) { // 手动构建二叉树 Node root = new Node(1);

2020-06-17 10:37:16 168

原创 16 哈希表的简单实现

哈希表基本介绍: 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。代码实现:import java.util.Scanner;// 测试哈希表public class HashTableDemo { public static void main(String[] args) {

2020-06-16 22:36:03 280

原创 15 斐波那契查找算法的思想与代码实现

1. 斐波那契查找算法思想: 斐波那契查找原理与二分、插值相似,仅仅改变了中间结点(mid)的位置,mid 不再是中间或插值得到,而是位于黄金分割点附近,即 mid=low+F(k-1)-1(F 代表斐波那契数列),如下图所示代码实现import java.util.Arrays;public class FibonacciSearch { public static void main(String[] args) { int[] arr = {1,8,10,8

2020-06-16 11:06:31 248

原创 14 顺序查找、二分查找、插值查找的思想以及代码实现

文章目录1. 顺序查找2. 二分查找3. 插值查找1. 顺序查找思想: 遍历整个数组,查找待查找的元素。代码实现public class SeqSearch { public static void main(String[] args) { int[] arr = {4,7,5,1,9,27,45,33,22}; int index = seqSearch(arr, 29); System.out.println(index);

2020-06-15 11:28:42 193

原创 05 MySQL 之 存储过程

存储过程文章目录存储过程1. 存储过程2. 使用存储过程2.1 执行存储过程2.2 创建存储过程2.3 删除存储过程2.4 使用参数2.5 检查存储过程1. 存储过程概念: 为以后的使用而保存的一条或多条 MySQL 语句的集合。2. 使用存储过程2.1 执行存储过程MySQL 称存储过程的执行为调用,因此 MySQL 执行存储过程的语句为 CALL。CALL 接受存储过程的名字以及需要传递给它的任意参数。CALL procedure(@param1, @param2, @param3

2020-06-15 08:48:04 124

原创 04 MySQL 之 视图

视图文章目录视图1. 视图的规则和限制2. 使用视图3. 注意1. 视图的规则和限制视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。对于可以创建的视图数目没有限制。视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。ORDER BY 可以用在视图中,但如果从该视图检索数据 SELECT 中也含有 ORDER BY ,那么该视图中的 ORDER BY 将被覆盖。视图不能索引,也不能有关联的触发器或默认值。视图可以和表一起使用。例如,编写一条联结表和视图的 SELECT

2020-06-14 22:32:43 107

原创 13 排序算法的总结

算法种类时间复杂度空间复杂度稳定性直接插入排序best: O(n)O(n)O(n)avg: O(n2)O(n^2)O(n2)worst: O(n2)O(n^2)O(n2) O(1)O(1)O(1)稳定折半插入排序avg: O(n2)O(n^2)O(n2)O(1)O(1)O(1)稳定希尔排序avg: O(n1.3)O(n^{1.3})O(n1.3)worst: O(n2)O(n^2)O(n2)O(1)O(1)O(1)不稳定冒泡排序best: O(n...

2020-06-14 17:00:55 125

原创 12 基数排序思想及代码实现

基数排序思想: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。 这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。图解:代码实现:import java.util.Arrays;/** * 基数排序 */public class RadixSort { public static void main(String[] args) { int[] arr = {53, 3, 17, 2

2020-06-14 16:59:44 204

原创 11 快速排序、归并排序的思想以及代码实现

文章目录1. 快速排序2. 归并排序1. 快速排序思想: 却低昂一个基准值,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比基准值小,另一部分所有的数据都必基准值大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 。图解代码实现import java.util.Arrays;public class QuickSort { public static void main(String[] args

2020-06-14 12:19:04 192

原创 10 插入排序、希尔排序思想以及代码实现

文章目录1. 插入排序1.1 思想1.2 代码实现2. 希尔排序2.1 思想2.2 代码实现1. 插入排序1.1 思想插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素**,**无序表中包含有 n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。图示1.2 代码实现import java.util

2020-06-07 17:50:07 161

原创 09 冒泡排序、选择排序的思想以及代码实现

冒泡排序、选择排序的思想以及代码实现文章目录冒泡排序、选择排序的思想以及代码实现1. 冒泡排序1.1 思想1.2 代码实现2. 快速排序2.1 思想2.2 代码实现1. 冒泡排序1.1 思想冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后,依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化: 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此可以在排序过程中设置一

2020-06-05 16:58:07 198

原创 05 Flink Sink

Flink Sink文章目录Flink Sink1. Kafka2. Redis3. JDBC 自定义 sinkFlink 没有类似于 Spark 中 foreach 方法,让用户进行迭代的操作。所以对外的输出操作都要利用 Sink 完成,最后通过类似如下的方式完成整个任务最终的输出操作。stream.addSink(new MySink(...))1. Kafkapom.xml<dependency> <groupId>org.apache.flink

2020-06-03 17:03:18 131

原创 04 电商数仓(用户行为数据仓库 DWS/ADS层)

电商数仓(用户行为数据仓库 DWS/ADS层)文章目录电商数仓(用户行为数据仓库 DWS/ADS层)1. 业务知识准备1.1 业务术语1.2 系统函数1.2.1 collect_set 函数1.2.2 日期处理函数2. 需求一:用户活跃主题2.1 DWS 层:服务数据层2.1.1 每日活跃设备明细2.1.2 每周活跃设备明细2.1.3 每月活跃设备明细2.1.4 DWS 层加载数据脚本2.2 ADS 层:数据应用层2.2.1 活跃设备数2.2.2 ADS 层加载数据脚本3. 需求二:用户新增主题3.1 D

2020-06-02 21:12:32 1518

原创 04 Flink 支持的数据类型

Flink 支持的数据类型文章目录Flink 支持的数据类型1. 基础数据类型2. Java 和 Scala 元组 (Tuples)3. Scala 样例类 (case class)4. Java 简单对象 (POJOs)5. 其他1. 基础数据类型Flink 支持 Java 和 Scala 基础数据类型,如 Int、Double、Long、String …val stream: DataStream[Long] = env.fromElements(1L, 2L, 3L)2. Java

2020-06-01 14:43:07 294

原创 03 Flink 之Transform转换算子

Flink 之 Transform转换算子文章目录Flink 之 Transform转换算子1. map2. flatMap3. filter4. keyBy5. 滚动聚合算子(Rolling Aggregation)6. reduce7. split 和 select7.1 split7.2 select8. connect 和 coMap8.1 connect8.2 coMap 、 coFlatMap9. union10. connect 和 union 的区别1. map作用: 对输入元素

2020-06-01 12:29:04 311

原创 02 Flink 之读取数据

Flink 之读取数据文章目录Flink 之读取数据1. 从集合中读取数据2. 从文件中读取数据3. 从 Kafka 消息队列中的数据作为来源4. 自定义 Source1. 从集合中读取数据import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}import org.apache.flink.api.scala._// 创建样例类case class SensorReading(id

2020-05-29 20:47:54 655

原创 09 DStream 的创建

DStream 的创建文章目录DStream 的创建1. 文件输入源1.1 注意事项1.2 读取 HDFS 目录下的文件2. RDD 队列3. 自定义数据源4. Kafka 数据源1. 文件输入源1.1 注意事项监控的⽂件夹内的所有⽂件必须有相同的数据集格式 。监控的⽬录下创建的⽂件必须是移动或者重命名得到的,如果修改已经存在的⽂件的内容则⽆法被监控到。⼀旦⽂件创建成功, 则不能去更改,所以, 如果在⽂件内追加内容, 追加的数据是不能被 Spark Streaming 读到的。streami

2020-05-27 17:41:53 231

原创 08 Dstream 入门:WordCount

Dstream 入门:WordCount需求: 使用 netcat 工具向 9999 端口不断发送数据,通过 Spark Streaming 读取端口数据并统计不同单词出现的次数。在项目中添加依赖:<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.11</artifactId> <version>2

2020-05-27 15:04:05 129

原创 01 Flink:第一个 WordCount 程序

第一个 WordCount 程序文章目录第一个 WordCount 程序1. 批处理 WordCount2. 流处理 WordCount1. 批处理 WordCountimport org.apache.flink.api.scala._// 批处理 WordCountobject BatchWordCount { def main(args: Array[String]): Unit = { // 1.创建执行环境 val env: ExecutionEnvironmen

2020-05-27 10:12:24 86

原创 07 Spark SQL 之 DataSet

Spark SQL 之 DataSet文章目录Spark SQL 之 DataSet1. 创建 DataSet2. RDD 和 DataSet 的交互2.1 从 RDD 到 DataSet2.2 从 DataSet 到 RDD3. DataFrame 和 DataSet 之间的交互3.1 从 DataFrame 到 DataSet3.2 从 DataSet 到 DataFrame1. 创建 DataSet使用样例类的序列得到 DataSet。scala> case class Person

2020-05-26 20:41:04 109

原创 06 Spark SQL 之 DataFrame

Spark SQL 之 DataFrame文章目录Spark SQL 之 DataFrame1. 创建 DataFrame1.1 通过 `Spark` 的数据源创建1.2 通过已知的 `RDD` 来创建1.3 通过查询一个 `Hive` 表来创建2. DataFrame 语法风格2.1 SQL 语法风格2.2 DSL 语法风格2.3 RDD 和 DataFrame 的交互2.3.1 从 `RDD` 到 `DataFrame`2.3.2 从 DataFrame 到 RDD1. 创建 DataFrame1

2020-05-26 20:40:08 122

原创 05 Spark:RDD行动算子

RDD 行动算子文章目录RDD 行动算子1. reduce(func)2. collect3. count()4. take(n)5. first6. takeOrdered(n, [ordering])7. aggregate(zeroValue)(seqOp, comOp)8. fold9. saveAsTextFile(path)10. saveAsSequenceFile(path)11. saveAsObjectFile(path)12. countByKey()13. foreach(func

2020-05-26 16:44:26 233

原创 04 Spark:RDD转换算子之Key-Value类型

RDD转换算子之Key-Value类型文章目录RDD转换算子之Key-Value类型1. partitionBy(partitioner)2. reduceByKey(func, [numTasks])3. groupByKey()4. aggregateByKey(zeroValue)(seqOp, comOp, [numTasks])5. foldByKey(zeroValue)(func)6. combineByKey[C]7. sortByKey8. mapValues9. join(otherD

2020-05-26 15:50:43 675

原创 03 Spark:RDD转换算子之双Value类型

RDD的转换算子之双Value类型文章目录RDD的转换算子之双Value类型1. union(otherDataSet)2. subtract(otherDataSet)3. intersection(otherDataSet)4. cartesian(otherDataSet)5. zip(otherDataSet)1. union(otherDataSet)作用: 求并集,对源 RDD 和参数 RDD 求并集之后返回一个新的 RDD。示例:scala> val rdd1 = sc

2020-05-26 11:05:21 212

原创 02 Spark:RDD转换算子之单Value类型

RDD的转换算子之单Value类型文章目录RDD的转换算子之单Value类型1. map(func)2. mapPartitions(func)3. mapPartitionsWithIndex(func)4. flatMap(func)5. glom6. groupBy(func)7. filter(func)8. sample(withReplacement, fraction, seed)9. distinct([numTasks])10 coalesce(numPartitions, shuffl

2020-05-26 10:13:33 255

原创 01 第一个 Spark 程序:WordCount

第一个 Spark 程序:WordCount1. 使用 Spark-shell准备数据:创建文件夹 input,以及 Words.txt 文件[zgl@hadoop101 spark-2.1.1]$ mkdir input[zgl@hadoop101 input]$ vim Words.txt在文件中输入数据:hello sparkhello scalahello world进入 spark-shell[zgl@hadoop101 spark-2.1.1]$ bin/spar

2020-05-25 16:48:36 194

原创 15 Scala 泛型、上下界、视图界定、上下文界定

泛型、上下界、视图界定、上下文界定文章目录泛型、上下界、视图界定、上下文界定1. 泛型1.1 基本介绍1.2 案例2. 上下界2.1 上界的介绍和使用2.2 下界的介绍和使用3. 视图界定4. 上下文界定5. 协变、逆变和不变1. 泛型1.1 基本介绍如果我们要求函数的参数可以接受任意类型。可以使用泛型,这个类型可以代表任意的数据类型。例如 List,在创建 List 时,可以传入整型、字符串、浮点数等等任意类型。那是因为 List 在类定义时引用了泛型。比如在 Java 中:public in

2020-05-25 15:06:15 201

原创 14 Scala 实现客户信息管理系统

客户信息管理系统文章目录客户信息管理系统1. AppStart2. CustomerView3. CustomerService4. Customer1. AppStartpackage com.guli.chapter15.appimport com.guli.chapter15.customerView.CustomerViewobject AppStart { def main(args: Array[String]): Unit = { (new CustomerView)

2020-05-25 15:00:48 2868 1

原创 13 Scala 函数式编程高级

函数式编程高级文章目录函数式编程高级1. 偏函数1.1 快速入门1.2 小结1.3 偏函数的简写形式2. 作为参数的函数2.1 基本介绍2.2 案例3. 匿名函数3.1 基本介绍3.2 案例4. 高阶函数4.1 基本介绍4.2 基本使用4.3 高阶函数可以返回函数类型5. 参数类型推断5.1 基本介绍5.2 参数类型推断写法说明5.3 案例6. 闭包6.1 基本介绍6.2 案例7. 函数柯里化7.1 基本介绍7.2 案例8. 控制抽象8.1 基本介绍1. 偏函数1.1 快速入门val list =

2020-05-25 14:57:09 189

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除