图论基础-图的遍历

图的遍历 图的遍历指的是从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。 图的遍历分两种,深度优先和广度优先。 深度优先 深度优先搜索法是树的先根遍历的推广,它的基本思想是:从图G的某个顶点v0出发,访问v0,然后选择一个与v0相邻且没被访问过的顶点vi访问,再从vi出发选择一个与vi相邻且未被访问的顶点vj进行访问,依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则退回到已 … 继续阅读

图的连通性判断-java实现

图的连通性判断 用Java实现了一个图的连通性判断,主要是用了广度优先遍历BFS来实现的。 算法思想 判断图是否是连通的,可以通过深度优先遍历的方法判断。 具体实现为:在图中选定任一一个顶点,对该顶点进行深度优先遍历,如果在这个遍历过程中所有的顶点都被遍历到,则该图为连通;反之,若存在没有被遍历到的顶点,则说明该图是非连通的。 public boolean isConnected() { int … 继续阅读

图论基础

图论的概述 图论(Graph Theory)是离散数学的一个分支,是一门研究图(Graph)的学问。 图是用来对对象之间的成对关系建模的数学结构,由”节点”或”顶点”(Vertex,复数为Vertices)以及连接这些顶点的”边”(Edge)组成。 图的顶点集合不能为空,但边的集合可以为空。 图的类型 图的分类:无权图和有权图 … 继续阅读

Redis RPush 命令

今天帮订单组那边,设计一个基于redis的消息系统,和架构师聊的时候,他建议了我使用RPush命令。RPush命令的返回结果是,操作之后列表的长度,这个在某些场合有一些特殊妙用。于是整理个文章来记录RPush命令 Redis Rpush 命令 Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。 如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列 … 继续阅读

设计一个LRU

最近看到一个LRU的讨论,挺赶兴趣的,看了一些文章。自己也手动实现了一个,关键是选择合适的数据结构,然后对这个数据结构进行CRUD。 Java里面实现LRU缓存通常有两种选择,一种是使用LinkedHashMap,一种是自己设计数据结构,使用链表+HashMap LRU释义 LRU 是 Least Recently Used 的简写,字面意思则是最近最少使用。 通常用于缓存的淘汰策略实现。 实现 … 继续阅读

Java并发-CopyOnWriteArrayList类

CopyOnWriteArrayList类 java.util.concurrent并发包里的CopyOnWriteArrayList工具类。当有多个线程可能同时遍历、修改某个公共数组时候,如果不希望因使用synchronize关键字锁住整个数组而影响性能,可以考虑使用CopyOnWriteArrayList。 如果简单的使用读写锁的话,在写锁被获取之后,读写线程被阻塞,只有当写锁被释放后读线程才 … 继续阅读