自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

段渣渣推轮子的飙车场

轮子推不好,怎么能飙车?

  • 博客(50)
  • 收藏
  • 关注

原创 索引堆及其优化

索引堆基本理解最小生成树算法, 还是最短路径算法, 我们都需要使用索引堆进行优化。索引堆解决普通堆的一些局限性 堆中存储的元素结构复杂,交换元素的代价很大堆建成后改变了原本他在数组中的位置,我们如果想要修改某个元素的值,将会很困难,如果添加一个元素表示他原来的位置的话,我们需要遍历一遍堆才能找到进行修改,这样的性能也是低效的对于索引堆来说,我们将数据和索引这两部分分开存储。真正表...

2018-07-31 12:32:40 325

原创 原地堆排序

原地堆排序基于堆相关的操作,我们可以很容易的定义堆排序。例如,假设我们已经读入一系列数据并创建了一个堆,一个最直观的算法就是反复的调用extractMax函数,因为该函数总是能够返回堆中最大的值,然后把它从堆中删除,从而对这一系列返回值的输出就得到了该序列的降序排列。真正的原地堆排序使用了另外一个小技巧。堆排序的过程创建一个堆H[0...n−1]H[0...n−1]H[0...n...

2018-07-31 12:31:45 267

原创 堆排序及其优化

堆排序堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。排序过程图示 首先,将元素进行重排,以匹配堆的条件。图中排序过程之前简单的绘出了堆树的结构复杂度分析分类 排序算法 数据结构 数组 最坏时间复杂度O(nlogn)O(nl...

2018-07-31 12:31:11 678

原创 优先队列与最大堆

优先队列与最大堆什么是优先队列优先队列:出队顺序与入队顺序无关,和优先级有关 普通队列:先进先出,后进后出不同底层结构底层实现优先队列的时间 底层机构 入队 出队(拿出最大元素) 普通线性结构 O(1) O(n) 顺序线性结构 O(n) O(1) 堆 O(logn) O(logn)可以看出普通与顺序的...

2018-07-30 21:32:42 957 1

原创 快速排序及其优化——随机化标定点、双路快排、三路快排

快速排序及其优化——随机化标定点、双路快排、三路快排快速排序基本概念快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序 n个项目要 O(nlog n)(大O符号)次比较。在最坏状况下则需要 O(n2)O(n2)O(n^{2})次比较,但这种状况并不常见。事实上,快速排序...

2018-07-29 23:12:50 645

原创 归并排序及其优化

归并排序基本概念归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为 O(n\log n)}(大O符号)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。算法步骤递归法(Top-down) 1. 申请空间,使其大小为两...

2018-07-29 23:10:29 1668 1

原创 插入排序

插入排序简单理解插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法步骤一般来说,插入...

2018-07-28 22:04:11 212

原创 选择排序

选择排序基本理解选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,...

2018-07-28 22:03:07 139

原创 红黑树

红黑树大名鼎鼎的红黑树 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。 它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里...

2018-07-26 10:06:55 146

原创 基于二分搜索树的集合的实现

基于二分搜索树的集合的实现集合是一种存放不同元素的抽象数据结构,底层可以用不同的方式实现,但是不同的方式会有不同的性能。比如用二分搜索树会比链表快很多,用红黑树又会比链表快很多。实现思路二分搜索树实现集合的具体思路 首先实现二分搜索树类,然后实现集合的接口。 二分搜索树类package SetBasicsAndBSTSet;import java.util....

2018-07-26 10:06:05 200

原创 希尔排序

希尔排序基本概念希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: + 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率 + 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位算法过程(wiki百科)原始的算法实现在最坏的情况下需要进行...

2018-07-28 22:02:04 125

原创 冒泡排序

冒泡排序冒泡排序基本概念冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序对 n个项目需要O(n^2)的比较次数,且可以原地排序。尽管这个算法是最简单了解和实现的排序算法之一,但它对于包含大量的元...

2018-07-28 21:58:15 458

原创 线段树

线段树首先什么是线段树: 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩。 线段树经常用于基于区间的统计查询 线段树大概长这个样子 ...

2018-07-26 10:07:22 341

原创 哈希表

哈希表什么是哈希表 哈希表,又叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希冲突的常用解决方法 链地址法(拉链法) 开放寻址法 再哈希法具体实现代码(具体的细节问题看注释)package HashTable;im...

2018-07-26 10:05:33 235

原创 Trie(字典树,前缀树)

Trie(字典树,前缀树)字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 三个基本性质: + 根节点不包含字符,除根节点外每一个节点都只包含一个字符; + 从根节...

2018-07-26 10:04:54 143

原创 用动态数组实现栈

用动态数组实现栈栈的定义 栈是一种后进先出的数据结构Last in first out(LIFO)栈的定义 栈应该至少实现以下接口package StacksAndQueues.ArrayStack;/** * @ Description: Stack接口 标准的栈应该具有以下5个对外方法 * @ Date: Created in 19:00 11/07/2018 ...

2018-07-26 10:01:41 421

原创 并查集

并查集什么是并查集 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。这是一种很不一样的树的结构,他是子节点指向父节点的结构。 并查集算法不支持分割一个集合。 并查集一般只支持两个操作Union 和isConnected 也就是并和查 并查集的优化常用的有两种,基于rank的优化和路径压缩优化(具体实现都在代码中)具体代码实现...

2018-07-25 15:52:54 158

原创 带虚拟头结点的链表的实现

带虚拟头结点的链表的实现链表是一种动态的线性数据结构。数据存储在节点内。链表与数组的对比 数组最好用于索引有语意的情况数组的最大优点在于支持随机访问链表不适合用于索引有语义的情况链表最大的特点是动态,但是不支持随机访问带虚拟头结点链表的实现package LinkedList;/** * @ Description: 带虚拟节点的链表 * @ Date: Cre...

2018-07-25 15:52:30 785

原创 基于链表的映射的实现

基于链表的映射的实现映射接口package SetBasicsAndBSTSet;/** * @ Description: 映射接口 * @ Date: Created in 21:54 20/07/2018 * @ Author: Anthony_Duan */public interface Map<K, V> { void add(K key, ...

2018-07-25 15:52:07 262

原创 利用动态数组实现队列

利用动态数组实现队列队列是一种先进先出的数据结构First in First out(FIFO)队列的至少应该实现以下接口package StacksAndQueues.ArrayQueue;/** * @ Description: Queue接口 * @ Date: Created in 20:49 11/07/2018 * @ Author: Anthony_Dua...

2018-07-25 15:51:39 398

原创 利用动态数组实现循环队列

利用动态数组实现循环队列循环队列主要是为了解决利用动态数组作为底层实现时出队操作的时间复杂度为O(n)这一问题基于动态数组的循环队列的实现package StacksAndQueues.LoopQueue;/** * @ Description: 循环动态队列的实现 * @ Date: Created in 21:56 11/07/2018 * @ Author: An...

2018-07-25 15:51:11 451

原创 使用链表实现栈

使用链表实现栈根据链表的性质,对头结点的操作的时间复杂度为O(1),可以很自然的想到链表是作为栈实现的非常好的底层数据结构。因为栈就是对栈顶进行操作的一种抽象数据结构具体实现代码 LinkedList类package LinkedList.LinkedListStack;/** * @ Description:带虚拟节点的链表 * @ Date: Created in ...

2018-07-25 15:50:41 462

原创 使用带尾指针的链表实现队列

使用带尾指针的链表实现队列普通链表在头部删除和添加节点是快速的,但是在尾部操作时间复杂度过高。如果要实现队列,则带尾指针的链表可以解决在尾部操作时间复杂度的问题。入队与出队的时间复杂度都为O(1)。具体实现代码package LinkedList.LinkedListQueue;/** * @ Description: 使用链表实现队列 * @ Date: Created...

2018-07-25 15:49:48 2162

原创 二分搜索树的底层实现

二分搜索树的底层实现二分搜索树是一个二叉树,二分搜索树的每个节点都大于其左子树的所有节点,并且小于其右子树的所有节点。因此二分搜索树中的元素必须具有可比较性。另外二分搜索树的每一颗之树也是二分搜索树。二分搜索树的具体实现,包括前中后序遍历与利用队列实现层序遍历,以及用栈实现前序遍历等操作。package BinarySearchTree;import java.util.Li...

2018-07-25 15:48:59 196

原创 Trie(字典树,前缀树)

Trie(字典树,前缀树)字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 三个基本性质: + 根节点不包含字符,除根节点外每一个节点都只包含一个字符; + 从根节...

2018-07-25 15:48:16 265

原创 AVL树

AVL树什么是AVL树 AVL树是最早的自平衡二叉树。他通过标注节点的高度,计算节点的平衡因子,通过左右旋转保持树结构的平衡。 平衡二叉树:对于任意一个节点,左子树和右子树的高度差不能为超过1。平衡二叉树的高度和节点数量之间的关系也是O(logn)的具体实现(注意看注释)package AVLTree;import SetBasicsAndBSTSet.FileOpera...

2018-07-25 15:47:11 205

原创 数据结构之动态数组

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ 数据结构之动态数组实现动态数组的关键方法是 resize方法 private void resize(int newCapacity) { E[] newData = (E[]) new Object[newCapacity]; for (int i = 0; i <...

2018-07-11 17:34:12 361

原创 Scala连接MySQL数据库

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala连接MySQL数据库package com.anthonyimport java.sql.{Connection, DriverManager, ResultSet, Statement}/** * @ Description: * @ Date: Created in 21:54 10/0...

2018-07-11 12:45:23 962

原创 Scala读XML文件

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala读XML文件在Scala2.10版本后,XML,Swing,parser-combinators模块不在包含在Scala包中,如果需要使用需要手动添加依赖 这里是用Maven构建项目。 scalaBinaryVersion 指的是你的版本的大号,比如你用的是2.11.8 scalaBinaryVersio...

2018-07-11 12:44:35 1203

原创 Scala中的隐式类

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中的隐式类隐式类指的是用implicit关键字修饰的类。在对应的作用域内,带有这个关键字的类的主构造函数可用于隐式转换。隐式类有以下限制条件:只能在别的trait/类/对象内部定义构造函数只能携带一个非隐式参数。虽然我们可以创建带有多个非隐式参数的隐式类,但这些类无法用于隐式转换。在同一作用域内,...

2018-07-11 12:43:53 1836

原创 Scala中的隐式参数

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中的隐式参数隐式参数的定义:指的是在函数或者方法中,定义一个用implicit修饰的参数,此时Scala会在作用域内尝试寻找一个指定类型的,用implicit修饰的对象,即隐式值,并注入参数作用域规则:插入的隐式转换必须以单一标识符的形式处于作用域中,或与转换的源或目标类型关联在一起。 Scala 编译器...

2018-07-11 12:43:08 485

原创 Scala中Tuple的简单用法

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中Tuple的简单用法package com.anthony/** * @ Description: * @ Date: Created in 14:39 10/07/2018 * @ Author: Anthony_Duan */object tuple_test extends A...

2018-07-10 18:14:20 1654

原创 Scala数据类型的几个知识点

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala数据类型的几个知识点package com.anthony/** * @ Description: scala关于数据类型的几个知识点 * @ Date: Created in 20:24 28/06/2018 * @ Author: Anthony_Duan */object hell...

2018-07-10 18:11:59 396

原创 Scala中的类

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中的类Scala中类的定义Scala也是面向对象的语言,所以类的定义与java中的区别并不太大,核心内容都有,只是语法不太一样在Scala中,编译器默认会生成getter、setter的方法,所有不需要手动编写。但是getter、setter的生成跟字段的可变性与可见性有关,所以getter、set...

2018-07-10 18:10:52 180

原创 Scala中的模式匹配

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中的模式匹配package com.anthony/** * @ Description: * @ Date: Created in 15:07 10/07/2018 * @ Author: Anthony_Duan */object match_test extends App {...

2018-07-10 18:09:59 188

原创 Scala中的定长数组与可变数组

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中的定长数组与可变数组package com.anthony/** * @ Description: * @ Date: Created in 12:32 10/07/2018 * @ Author: Anthony_Duan */object Array_test extends ...

2018-07-10 18:08:36 1800

原创 Scala中的函数柯里化

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中的函数柯里化package com.anthony/** * @ Description:柯里化函数 * @ Date: Created in 16:33 10/07/2018 * @ Author: Anthony_Duan */object currying_test exten...

2018-07-10 18:07:24 280

原创 Scala中的几种循环

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中的几种循环package com.anthony/** * @ Description: * @ Date: Created in 20:57 09/07/2018 * @ Author: Anthony_Duan */object cycle_test { def main...

2018-07-10 18:06:06 440

原创 Scala中字符串插值操作

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中字符串插值操作package com.anthony/** * @ Description: * @ Date: Created in 16:19 10/07/2018 * @ Author: Anthony_Duan */object String_test extends App...

2018-07-10 18:05:06 563

原创 Scala中的Trait方法

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~ Scala中的Trait方法Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。与接口不同的是,它还可以定义属性和方法的实现。一般情况下Scala的类只能够继承单一父类,但是如果是 Trait(特征) 的话就可以继承多个,从结果来看就是实现了多重继承。Trait(特征) 定义的...

2018-07-10 11:47:46 217

空空如也

空空如也

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

TA关注的人

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