- 博客(62)
- 资源 (129)
- 收藏
- 关注
原创 字符串
(1)字符与字符串 字符:一般被认为是字母、数字、符号和字。字母就是A、B、C、a、b、c等,而数字 1,2,3等,字可能是中文和英文字等。 字符串是有字符组成的。一般编程语言中用String类型来表示。在java 中String的实现通过char数组实现的。 (2)字符串的全排列: 比如给定一个字符串是xyz,则其全排列是xyz, xzy, yxz,yzx,zxy,zyx
2017-04-27 16:37:09 499
转载 数据结构与算法系列
最近抽空整理了"数据结构和算法"的相关文章。在整理过程中, 对于每种数据结构和算法分别给出"C"、"C++"和"Java"这三种语言的实现;实现语言虽不同,但原理如出一辙。因此,读者在了解和学习的过程中,择其一即可! CC++Java线性结构1. 数组、单链表和双链表数组、单链表和双链表数组、单
2017-04-27 14:43:49 443
原创 最短路径-Floyd算法
在最短路径的求解过程,无非中有两种可能: (1)一种是能够直接到达,是最短路径; (2)另一种是需要一些顶点才能到达,也是最短路径。 Floyd算法的伪代码如下: Floyd算法的具体实现代码如下: 最短路径算法总结:
2017-04-27 14:24:17 865
原创 最短路径(邻接表)-Dijkstra算法
最短路径(邻接表)-Dijkstra算法:生成的图采用邻接表的存储方式。 具体的实现代码如下:package com.threeTop.www;import java.util.Hashtable;import java.util.Stack;/** * 邻接表存储方式的Dijkstra算法 * @author wjgs * */public class
2017-04-26 17:04:40 8750 2
原创 最短路径(邻接矩阵)-Dijkstra算法
Dijkstra算法又叫作迪杰斯特拉算法,是利用"贪心法"(在对问题进行求解时,总是做出在当前看来最好的选择策略)设计算法的一个成功范例。 适用条件:带权无环和无负权值 举个栗子:
2017-04-26 16:16:07 12509 2
原创 图的邻接表存储下的广度优先遍历
图的邻接表存储下的广度优先遍历:需要借助队列实现. 图的邻接表存储下的广度优先遍历实现代码如下:/** * 邻接表广度优先遍历 * */ public void breadFirstTravel() { System.out.println("邻接表广度优先遍历为:"); //初始化队列 Queue queue=new LinkedList(); /
2017-04-25 17:59:26 3236
原创 图的邻接矩阵存储下的广度优先遍历
图的邻接矩阵存储下的广度优先遍历:就像树的按层次遍历,需要借助队列实现。 图的邻接矩阵存储下的广度优先遍历的实现代码如下:/*** * * 邻接矩阵广度优先遍历 * */ public void breadthFirstTravel() { System.out.println("邻接矩阵的广度优先遍历:"); //初始化队列,LinkedList实现
2017-04-25 16:44:08 3249
原创 图的邻接表存储下的深度优先遍历
在图的邻接表的存储下进行的深度优先遍历:需要用到哈希表来辅助。 具体的实现代码如下:package com.threeTop.www;/** * 邻接表节点的定义 * @author wjgs * */public class ListGraphNode { //增加索引 int index; //值 int value; //指向下一个节点的指针(
2017-04-25 15:35:48 2234
原创 图的邻接矩阵存储下的深度优先遍历
深度优先遍历(DFS): 借助栈进行遍历,深度优先遍历的序列不是唯一的,邻接矩阵存储的时间复杂度为O(n*n),邻接表的存储的时间复杂度为O(n+e). 邻接矩阵的深度优先遍历的实现代码如下:package com.threeTop.www;import java.util.Stack;public class MatrixGraph { //通过下标映射元素值 p
2017-04-25 14:34:24 6026 1
原创 图的邻接表存储
邻接表表示法和散列表类似,也是用一个数组,每个数组元素有个链表。其适用条件(边数不多):图的边数 图邻接表存储的实现代码如下:package com.threeTop.www;/** * 邻接表节点的定义 * @author wjgs * */public class ListGraphNode { //值 int value; //指向下一个节点的指针
2017-04-24 20:58:55 1081
原创 图的邻接矩阵存储
一般的图会使用二元组的方式来描述,G=(V,E) ,其中V 叫作顶点集,E叫作边集。 图分为: (1)无向图 (2)有向图 图的表示和存储方式: (1)邻接矩阵表示法 (2)邻接表表示法 邻接矩阵:存储为二维数组
2017-04-24 20:00:08 791
转载 关键路径C++实现
AOE网:在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,边上的权值表示活动的持续时间,称这样的有向图叫做边表示活动的网,简称AOE网。AOE网中没有入边的顶点称为始点(或源点),没有出边的顶点称为终点(或汇点)。AOE网的性质:⑴ 只有在某顶点所代表的事件发生后,从该顶点出发的各活动才能开始;⑵ 只有在进入某顶点的各活动都结束,该顶点所代表的事件才能发生。
2017-04-24 15:14:53 7111 2
原创 红黑树
红黑树:本质是一棵二叉查找树,其插入、删除、查找操作的时间复杂度为O(logn). 红黑树的特征: (1)每个节点都有颜色,要么是红色,要么是黑色; (2)根节点是黑色的 (3)所有的叶节点都是黑色的,并且所有的叶节点都为空; (4)如果一个节点的红色的,那么它的两个孩子节点一定是黑色的 (5)任意节点到叶节点NIL指针的每一条路径都包含相同数目的黑
2017-04-21 16:13:16 550
原创 堆排序
堆排序就是对数组进行初始化堆、依次插入元素和删除元素的操作。堆排序很适合对大量的数据进行排序,总的时间复杂度为O(nlogn). 堆排序的实现代码如下: /** * 堆排序的实现 * */ public void sort() { if(isEmpty()) { throw new Run
2017-04-21 15:58:08 292
原创 堆
堆是一种特殊的数据结构,是一种特殊形式的完全二叉树。 堆分为:(1)大顶堆,大顶堆中每个节点的值都不大于其父节点的值 (2)小顶堆,小顶堆中每个节点的值都不小于其父节点的值 堆分为二项式堆、斐波那契堆、二叉堆(完全二叉堆)。 堆本身就是完全二叉树,可以使用一个一维数组,0位置用来存储元素的个数,1-n用来存储元素。
2017-04-21 15:35:51 350
原创 哈夫曼树
哈夫曼树的构建步骤: (1)将每个数据作为一棵只有树根的树,组成一个森林。 (2)将树的带权路径的长度进行从小到大排序。 (3)选择权值最小的两棵树进行合并,新生成的节点为两棵树的权值之和。 (4)重复第2,3步,直到最终的森林中只有一棵树为止。 哈夫曼树的具体应用: 哈夫曼编码.
2017-04-21 13:51:49 554
翻译 B-树、B+树、B*树
一棵m阶B-树(B树)是一棵平衡的m-路查找树,它或者是一棵空树,或者满足如下条件: (1)根节点至少有两个子节点(除非这棵树只有自己一个根节点) (2)除根节点和叶子节点外,所有节点至少有m/2个子节点 (3)所有叶节点都在同一层。 如果m等于2,则它是一棵满二叉树。
2017-04-21 09:57:01 640
原创 平衡二叉树
平衡二叉树(AVL树):可以是一棵空树(1)左右子树都是高度平衡的二叉树(2)左右子树的高度之差的绝对值不大于1平衡二叉树查找的平均情况和最坏情况都是O(logn),其插入和删除操作的时间复杂度也是O(logn),并且在插入、删除之后高度仍然保持相对平衡。
2017-04-21 09:08:39 398
原创 二叉查找树
二叉查找树或者是棵空树,或者满足下面的特性: (1)如果它的左子树不为空,那么它的左子树上的任意节点的值都小于根节点的值。 (2)如果它的右子树不为空,那么它的右子树上任意节点的值都大于根节点的值。 (3)同样,它的左子树和右子树也都是二叉查找树。 二叉查找树的代码实现如下:package com.threetop.www;/**
2017-04-20 23:05:51 357
原创 查找算法总结
本章介绍了几个基础的查找算法:顺序查找、二分查找、行列递增的矩阵查找、分块查找。以后还会介绍其他查找算法:深度优先查找、广度优先查找、二叉树查找等。 顺序查找:不需要数列本身有序,查找性能太差,平均查找长度为(1+n)/2,时间复杂度为O(n). 二分查找:要求数列有序 行列递增的矩阵查找:按照杨氏矩阵特殊的存储方式 分块查找:顺序查找和二分
2017-04-19 09:32:31 429
原创 查找---分块查找
分块查找要求把一个数据分为若干块,每一块里面的元素可以是无序的,但是块与块之间的元素需要是有序的。(对于一个非递减的数列来说,第i块中的每个元素一定比第i-1块中的任意元素大) 分块查找的实现代码如下:package com.threeTop.www;import java.util.ArrayList;/*** * 分块查找的实现 * @author wjgs *
2017-04-18 18:44:33 5562 2
原创 查找---行列递增的矩阵查找
有一个m行n列的矩阵,在程序中我们可以使用二维数组来表示,而这个矩阵的每一行是递增的,每一列也是递增的,这种行和列分别递增的结构叫作杨氏矩阵。 举个例子如下: 直接定位查找法: 通过杨氏矩阵查询代码如下:package com.threeTop.www;/** * 通过杨氏矩阵查找元素 * @author wjgs * */public clas
2017-04-18 12:09:40 647
原创 查找--二分查找
二分查找(折半查找)要求:(1)数列有序 (2)数列使用顺序存储结构(比如数组) 二分查找的递归和非递归的实现:package com.threeTop.www;import java.util.Arrays;/** * 递归和非递归实现的二分查找 * @author wjgs *
2017-04-17 22:22:51 304
原创 查找---顺序查找
顺序查找:从头开始一个一个地往后逐个比较,知道找到与给定的关键字相同的数。 顺序查找的实现代码如下:package com.threeTop.www;/*** * 顺序查找的实现 * @author wjgs * */public class SequentialSearch { private int []array; //构造函数实现初始
2017-04-17 21:33:44 466
转载 mybatis思维导图
mybatis简介MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。直接上思维导图
2017-04-17 19:24:59 2175 1
原创 推荐系统
推荐:通过对嗜好的模式进行预测,借以发现你尚未知晓,却合乎心意的新事物。 推荐引擎分类:(1)基于用户 (2)基于物品 具体的实现代码如下:package mia.recommender.ch02;import org.apache.mahout.cf.taste.common.TasteException;import org.apache.mah
2017-04-16 21:37:24 692
原创 初始Mahout
Mahout 在理论上可以实现所有的机器学习技术,但实际上当前它仅关注机器学习的三个领域,即推荐引擎(协同过滤)、聚类和分类。 安装Mahout: (1) java 和IDE(eclipse、netbeans、intellij IDEA) (2)安装Maven (3)安装Mahout (4)安装Hadoop
2017-04-16 21:03:32 739
转载 二分查找和排序算法
《Algorithms Unlocked》是 《算法导论》的合著者之一 Thomas H. Cormen 写的一本算法基础,算是啃CLRS前的开胃菜和辅助教材。如果CLRS的厚度让人望而生畏,这本200多页的小读本刚好合适带你入门。书中没有涉及编程语言,直接用文字描述算法,我用 JavaScript 对书中的算法进行描述。二分查找在排好序的数组中查找目标值x。在p到r区间中
2017-04-16 20:47:10 679
转载 深度学习框架总结
深度学习库比较库名主语言从语言速度灵活性文档适合模型平台上手难易开发者模式TensorfloC++cuda/python/Matlab/Ruby/R中等好中等CNN/RNNLinux,OSX难Google
2017-04-16 14:24:16 1173
原创 排序算法---简单选择排序
简单选择排序:在序列中依次选择最大(最小)的数,并将其放到待排序的数列的起始位置。 简单选择排序的代码实现:package com.threeTop.www;/** * 简单选择排序的实现 * @author wjgs * */public class SelectSort { private int[]array; //构造函数进行初始化 publ
2017-04-16 11:39:03 368
原创 排序算法---希尔排序
希尔排序的基本思想(划分):把待排序的数列按照一定的增量分割成多个子数列,这些子数列不是连续的,然后对每个子数列进行插入排序。接着增量逐渐减小,在减小到1后直接使用插入排序处理数列。
2017-04-16 11:20:27 357
原创 排序算法---插入排序
插入排序:(1)直接插入排序 (2)二分插入排序 插入排序:往数列里面插入数据元素即往一个已经排好序的待排序的数列中插入一个数,使得插入这个数之后,数列仍然有序。 插入排序的实现代码如下:package com.threeTop.www;/** * 插入排序的实现 * @author wjgs * */public class InsertS
2017-04-16 10:46:00 1046
原创 排序算法---快速排序
快速排序是对冒泡排序的改进,通过一趟排序将要排序的数据分割成独立的两个部分,其中一部分的所有数据比另一个部分的所有数据要小,再按照这种方法递归进行,使得整个数据变成有序序列。 快速排序有一个比较简单的解法--递归,具体的实现代码如下:package com.threeTop.www;/** * 快速排序的递归实现 * @author wjgs *
2017-04-15 22:01:24 401
原创 排序算法---冒泡排序
冒泡排序:重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并且一直重复这样的走访操作,直到没有要交换的数据元素为止。 冒泡排序排序过程:
2017-04-15 16:58:46 397
原创 排序算法---桶排序
算法分析:找出最好、最适合的算法来解决问题,而算法复杂度可以分为两个部分: 时间复杂度和空间复杂度、稳定性。 (1)快而简单的排序---桶排序 桶排序的适用场景:数据分布相对比较均匀或数据跨度范围并不是很大。 桶排序的时间复杂度: O(n+m),n为待排序的元素的个数,m为桶的个数。 桶排序的实现代码如下:packa
2017-04-15 16:20:44 524
原创 汉诺塔的递归实现
递归实现汉诺塔问题:package com.threetop.www;/** * 递归解汉诺塔问题 * @author wjgs * */public class HanoiTest { public static void hanoi(int n,char A,char B,char C) { if(n==1) { m
2017-04-14 16:54:24 418
原创 链表
链表是一种物理上非连续、非顺序的存储结构,数据元素之间的顺序是通过每个元素的指针关联的。 链表有一系列节点组成,每个节点一般至少会包含两部分的信息:(1)元素数据 (2)指向下一个元素的指针 链表分类: (1)单向链表和双向链表 (2)静态链表(数组实现) 、动态链表(指针) 链表的操作: 创建、插入、删除、输出 链表的特点
2017-04-14 16:21:17 6544 4
原创 队列
队列就是一个队伍,由一段连续的存储空间组成,是满足先进先出的数据结构。 队列是一种受限的数据结构,插入操作只能从一端操作,这一端叫做对尾;而移除操作也只能从另一端操作,这一端叫做队头。 队列的实现方式: (1)数组: 顺序队列、循环队列 (2)链表 队列的适用场景: 缓冲器、解耦 队列
2017-04-14 10:06:45 303
java集合框架
2018-01-31
阿里巴巴Java开发手册
2017-09-25
scrapy爬虫项目
2017-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人