0%

在算法学习之路上漂泊,遇见了图,而分无向与有向。在本文中主要讲解关于有向图中的求极大连通分量的算法,主要是Kasaraju算法、Tarjan算法以及Gabow算法。

三种算法都是基于深度优先搜索算法(DFS)而实现的,实际上后两种算法是对于Kasaraju算法的改进,减少了一次深度优先搜索(DFS),因此在性能上相比较而言要好一些。

阅读全文 »

在之前学习了一些排序算法,得出了基础排序算法的总结。之后学习了一些查找算法,今天来对于基础的一些查找算法进行总结。

排序与查找是我们一般开发中最常用的算法。例如在开发中需要找出某个人的个人信息,就需要根据某个关键信息去查找。

阅读全文 »

第一次接触洗牌算法是在一次面试上,面试官要求我写出一个算法将一个1~100的有序数组打乱,不考虑性能,那次我想了许久,想到一种基于二叉排序的方式实现了随机洗牌,但是那个性能呢,惨不忍睹。后来详细学习排序算法的时候,发现为了保证快速排序的性能,需要在排序之前对排序的数组进行洗牌操作。

为什么不基于一般排序算法做洗牌?

阅读全文 »

鉴于最近基本看完《Maven实战》这本书,对于我自己的所看的结果作一下总结,理清自己的思路,并复习书中的知识。当然有时间会继续学习一下Gradle,似乎是一个更好的工具。

我原来对于Maven的印象就是依赖管理的工具,但是在认真学习之后,认识到Maven可以实现挺多实用功能。

阅读全文 »

本文主要分析排序算法中的选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序,以及其部分优化方式,部分代码示例。当然快速排序算法是最快的通用排序算法,这使得其在java中的地位非凡,通常的ArrayList.sort()函数就是使用的快速排序。

在这之前,我们先声明两个方法:分别为比较大小与数据交换的方法。

阅读全文 »

HashMap是非常常用的键值对类型。本文主要讲述了HashMap的思维以及其重要或者常用的put,get,remove以及resize函数。

首先Java定义了java.util.Map的接口,而常用的实现类型主要有HashMap、ConcurrentHashMap、LinkedHashMap和TreeMap。对于原来常用HashTable在不强调线程安全性时可以用HashMap替代(也就是说HashMap是线程不安全的),而在线程安全的情况下用ConcurrentHashMap替代。

阅读全文 »