数据结构和算法
文章平均质量分 61
Maxwell_7
这个作者很懒,什么都没留下…
展开
-
递归调用(汉诺塔)
递归调用的两个准则是:一要保持原是问题的形式,逐步降低复杂度。二是最简单的情况可以直接解决。汉诺塔的算法原理:原创 2015-05-08 11:22:47 · 613 阅读 · 0 评论 -
KMP算法的介绍及其Java实现
字符串匹配算法中比较经典的一个算法是KMP算法。算法的目的是给定一个字符串,寻找在一个长字符串中有没有与给定字符串匹配的子串。http://www.cnblogs.com/c-cloud/p/3224788.html原创 2016-06-14 19:15:37 · 911 阅读 · 0 评论 -
文本中关键字匹配算法
给定一定数量的关键字,对任一篇文本,寻找文本中包含哪些关键字并加亮这些关键字这个文本处理需要一个算法, 普通的文本处理直接去遍历所有的关键字,但是这种算法太复杂,时间复杂度太高。之前的文章中有说过,实际用到的算法,为了加快执行速度,都是在时间和空间上做的兑换。这里同样可以,通过增加存储空间来减少程序执行时间。可以选择开一个数组,数组的长度是char类型的最大长度加一。原创 2016-06-16 09:33:38 · 32396 阅读 · 2 评论 -
寻找第K大数的方法
寻找一堆数中第K大的数,第一感觉是排序,然后将排序之后的值取第K个。但是实际上,这种方式最少的时间复杂度是O(nlogn)。有更简单的方式可以实现线性的时间复杂度。算法总是有穷尽的,而思想无穷尽,快速的时间复杂度是实现原创 2016-06-14 09:25:39 · 1317 阅读 · 0 评论 -
文本编辑距离的计算
文本编辑距离的计算,采用动态规划实现原创 2016-05-30 10:41:27 · 1963 阅读 · 0 评论 -
二叉树、二叉搜索树、AVL树的java实现
数据结构一直都是断断续续的看,总是觉得理解的不够深入,特别是对树的理解,一直都很浅显,今儿又看了一遍,来做个总结吧。首先,树中的一些概念:1、树的节点包含一个数据元素,以及若干指向其子树的分支。节点拥有的子树的数量称为节点的度。节点的最大层次称为树的深度或高度。2、二叉树是一种树形结构,其特点是每个节点至多有两棵子树,且子树有左右之分,次序不能随意颠倒。3、满二叉树:一棵深原创 2016-04-24 23:16:07 · 1742 阅读 · 0 评论 -
java 栈的实现以及栈的典型应用--字符平衡,中缀转后缀,后缀计算,迷宫求解等
栈是一种顺序存储的数据结构,具有先入后出的特点。栈的实现方式主要有两种,分别是用链表来实现和用数组来实现。栈虽然看起来很简单,但是用处却很多,最典型的举几个例子:字符平衡(几种括号的表达式的平衡)、中缀转后缀以及后缀的计算。不啰嗦,上代码:首先写一个栈的接口,提供栈内需要的各种方法:/** * 栈的接口定义 */public interface Stack { // 压栈原创 2016-04-24 15:32:15 · 1357 阅读 · 0 评论 -
链表插入、链表相加、链表相乘、链表排序、链表合并等操作的java实现
最近刷数据结构,自学的过程绝对还是很有意思的,这里好像才看到程序工作者的智慧。刷到了链表相关的知识,虽然javayou现成的List可以调用,但是又全都自己实现了一遍,理解内部实现的机制。关于链表的定义和创建,节点的插入,节点删除,节点查找,判断是否为空,判断是否为尾节点,链表元素的排序,两个有序链表的合并,链表的反转,获取最后四个链表元素,获取链表的中间节点元素,交换链表节点,链原创 2016-04-22 23:13:38 · 1013 阅读 · 1 评论 -
java 排序算法实现 其三:直接选择排序
直接选择排序的java实现原创 2014-10-19 12:08:43 · 417 阅读 · 0 评论 -
java 排序算法实现 其四:快速排序
java实现快速排序算法原创 2014-10-19 10:53:51 · 404 阅读 · 0 评论 -
java 排序算法实现 其一:冒泡排序
冒泡排序法的java和C++实现原创 2014-10-17 11:52:30 · 667 阅读 · 0 评论 -
java 排序算法实现 其二:插入排序
插入排序算法的理解和java实现原创 2014-10-15 11:09:05 · 344 阅读 · 0 评论 -
java 排序算法实现 其五:希尔排序
希尔排序的理解和java实现原创 2014-10-15 11:41:57 · 349 阅读 · 0 评论 -
Floyd算法的java实现
Floyd算法:用于多源最短路径的求解,算出来的是所有的节点到其余各节点之间的最短距离。该算法的思路是:首先初始化距离矩阵,然后从第一个点开始逐渐更新矩阵点值。d[i][j]表示从i点到j点的距离。第k次更新时,判断d[i][k]+d[k][j]与d[i][j]的大小,如果前者小,则更新这个值,否则不变。给一个例子:具体的floyd实现算法如下:packag原创 2016-03-28 19:19:18 · 6384 阅读 · 1 评论 -
Dijkstra算法的java实现
Dijkstra算法:用于单源最短路径的求解。用于计算给定的一个源节点到其他各个节点之间的最短路径。该算法的思路是:已选定的节点集为A,待选的节点集为B。开始时节点A中仅包含源节点。选择B中距离源节点最近的一个点,然后将它加入到节点集A中。该点加入后,更新B中所有节点到A的路径长度(借助刚加入的点)。之后重复这一步骤,直至所有点都加入。以下图为例,做一个说明:原创 2016-03-28 17:35:20 · 2948 阅读 · 1 评论 -
拓扑排序及其Java实现
拓扑排序是针对有向无圈图的顶点的一种排序,使得如果存在一条从A到B的路径,那么在排序中A必定在B的前面。拓扑排序的应用场景很好理解,比如在内存中运行着很多任务,某个任务A的执行依赖于另外一个任务B,那么在A执行完之前,B一定不能被清理。而另外一些任务是没有关联的,如何来安排这些任务被清理的顺序就需要依赖拓扑排序。一个简单的拓扑排序的方案(Kahn算法)是:先找出任意一个没有原创 2016-07-27 16:14:08 · 9634 阅读 · 6 评论