
数据结构与算法
luoz_python
我不会编程,但也不是完全不会,会一点点。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法-树(2)—深入红黑树
本篇文章主要介绍2-3树,并由2-3树重点介绍RB树(红黑树) 后附完整代码2-3树1. 2-3树 2-3树概念: 一颗2-3查找树,或为空树,或为由2-结点,3-结点构成的树。 2-结点:含有一个键值对和两个链接,左链接的结点均小于该结点,右链接的结点均大于该结点。 3-结点:含有两个键值对和三个链接,左链接的结点小于该节点的小的键值,中链接介于该结点的两个键值之间,右链接大于改原创 2016-09-10 00:44:53 · 1496 阅读 · 2 评论 -
有向图—拓扑排序,Kosaraju算法
有向图基本算法对于有向图的结构,和无向图类似,甚至更简单,有疑问请留言。 1>有向图的数据结构package graphTheory;/** * @author : 罗正 * @date time:2016年9月19日 下午9:26:21 **/public class Digraph { private final int V; private int E;原创 2016-09-21 17:29:44 · 681 阅读 · 0 评论 -
算法-树(1)—BST(二叉搜索树)
本文基于BST结构主要实现查找,删除功能 此种数据结构较为简单,主要分析添加查找删除功能 后附完整代码1.BST定义: 1).每个结点均有键值对,其中键值实现排序; 2).每个结点的都大于它的左结点,小于它的右结点。 2. 主要实现(递归)结点内部类Node:`private class Node{ private Key key; private原创 2016-09-08 22:13:25 · 555 阅读 · 0 评论 -
最小生成树—Prim算法和Kruskal算法
本文主要讨论基于求最小生成树的两种算法—Prim算法和Kruskal算法 主要说说其思想,附代码解释,有问题请留言延时的Prim算法思想:每一步为最小生成树的成长增加一条最短的边。 分析: 1>将所有的顶点分为两部分,一部分是逐渐生长的最小生成树(可以用队列来存储),一部分是逐渐减少的非最小生成树(用marked来标记); 2>还有一个队列维护的边,自然就是存放连接这两部分的边(横切边),原创 2016-09-22 22:39:45 · 682 阅读 · 0 评论 -
图算法(二)—深入理解广度优先搜索
@author : 罗正 @date time:2016年9月18日 上午9:20:34 无向图API,深度优先搜索参照上一篇文章 深度优先搜索 本文主要解析广度优先搜索广度优先搜索基于邻接表实现的无向图 1. 思想:使用队列的数据结构(FIFO),首先加入顶点,然后在队列中删除顶点,并且将该顶点相连的所有顶点依次加入队列中,再循环处理这些顶点(和处理最开始的顶点相似),直至所有顶点均被原创 2016-09-18 13:01:58 · 3374 阅读 · 0 评论 -
图算法(一)—深入理解深度优先搜索
@author : luoz @date time:2016年9月18日 上午9:21:08 基于实现无向图的API 由浅入深理解深度优先搜索算法 分析深度优先搜索解决的单点路径问题,连通性问题,二分色问题无向图无向图即为由边(edge)和顶点(vertex)组成的图模型。图的几种表示方法(使用哪种数据结构表示图) 1>邻接矩阵: V*V的boolean矩阵,相连则true,这种数据原创 2016-09-18 12:27:52 · 1671 阅读 · 0 评论 -
排序算法(2)—归并排序,快速排序
一.归并排序**分治思想****思想:将两个有序的数组归并成一个有序数组。**原始归并的抽象方法(下面两种归并方法用到): 创建一个适当大小的数组,然后将两个有序数组一个个有序的放入所创建的数组中(在此造成了额外的空间存储问题)。方法签名:merge(array,lo,hi),将子数组a[lo...mid],a[mid+1...hi]归并,并将结果放入大a[lo...hi].原始归并的抽象方原创 2016-09-03 15:11:21 · 420 阅读 · 0 评论 -
查找算法—散列表
散列表散列表在查找当中使用非常广泛(本文当然也还会说明删除等其他操作) 本文主要说明散列表的两种解决冲突的办法散列表查找散列表:对于很多复杂类型的键值,我们可以用一个数组来实现无序的符号表,将键值通过散列函数转化作为数组的索引,查找即对数组进行查找(这里就需要解决冲突)。散列表的实现分为两步: 1. 散列函数: 将数据的键值转化为数组的一个索引的一个函数。理想情况下,当然是所有的键值,均对原创 2016-09-16 13:12:59 · 1162 阅读 · 0 评论 -
排序算法(3)—优先队列,堆排序
本文主要讨论基于二叉堆数据结构的优先队列的实现以及衍生的堆排序 实现优先队列还可以使用栈,队列等数据结构,在此略优先队列主要解决问题 有时候比不需要元素全部有序,操作时,我们可能只需要处理最大(最小)的元素 二叉堆的优先队列主要是高效(对数级别)实现删除最大元素,和插入元素操作。 对于其他数据结构的优先队列的实现:队列(删除最古老元素)以及栈(删除最新元素)类似 二叉堆的概念原创 2016-09-04 01:00:42 · 744 阅读 · 0 评论 -
排序算法(1)—选择,插入,希尔
三种初级排序一.选择排序排序思想:依次找到最小(最大)元素,并与未排序数组的第一个元素交换,若为数组第一个元素,则和自己进行交换,若为数组最后一个元素,排序完成。排序实现:(java代码) public static void SelctionArray(int[] arr) { int N = arr.length; for ( int i =原创 2016-09-03 10:42:53 · 339 阅读 · 0 评论 -
最短路径算法—Dijkstra算法和BellmanFord算法
松弛操作Dijkstra算法和BellmanFord算法都是基于这个简单的操作。 下面我们来了解这个简单而重要的操作:线松弛 线松弛也就是处理 起点到边的两个顶点距离与两个顶点直接距离的问题。 如:假如distTo[4]>distTo[3]+e.weight(),则会修改到达4顶点的最短路径,否则不变。 2.点松弛 点松弛其实就是对顶点的每一条发出的边都进行一次线松弛操作。 如图:边3原创 2016-09-24 23:17:51 · 1495 阅读 · 0 评论