算法与数据结构
文章平均质量分 71
>进阶的程序员>
一个处于探索期的程序员。
展开
-
Android源码解析--SamplingProfilerService(系统性能分析)服务详解
SamplingProfilerService,从字面理解,就是采样剖析服务, 该服务用来进行性能采样及统计。1、SamplingProfilerService首先看一下SamplingProfilerService在SystemServer中的添加代码: ServiceManager.addService("samplingprofiler", new Samplin...原创 2019-04-03 23:07:26 · 911 阅读 · 0 评论 -
算法与数据结构--并查集
序两个点是否连接, 在大型网络中,肉眼很难观察出来。如何判断一个巨大网络中两个点是否连接,这个网络不一定是互联网,也可能是微信中的人际关系网,两个人是否是好友,是否有连接?巨大数据库中,电影与音乐是否有交集, 网络路由器是否连接?他们的连接路径有多少条?具体路径分别是什么?想要解决两个点是否连接,是否有交集的问题,最快速的方法就是使用并查集。 而要解决他们的连接路径有多少以及具体路径,就需...原创 2019-03-03 12:38:00 · 260 阅读 · 0 评论 -
算法与数据结构--图论基础知识
字体改成红色了 1、图论基础概念 Graph Theory图 :是由由 节点 和 边 组成的数据模型,它有两个重要部分1、节点2、边节点是两个村, 边表示两个村直接连通的道路或者节点是人, 边表示人与人之间的关系。点是一个域名, 边是域名之间的调整无向图:边是没有方向的(如两个村是否有道路连接)有向图:边有方向(人际关系网,你认识他,他不认识你)有向图会使图更加复杂。...原创 2019-03-06 20:45:18 · 616 阅读 · 0 评论 -
八大排序算法--基数排序
基数排序定义基数排序(radix sort)是一种桶排序(bucket sort), 先把个位相同的数字放到同一个桶里,然后完成对个位数字大小的排序,然后再在前面的基础上对十位 上的数字进行排序,然后依次进行到最高位, 最后完成整个排序。算法分析对于十进制来说,每个位 总共有 0~9 10 种可能举一个例子, 对一下数组进行排序:[34, 62, 11, 56, 4, 73, 2, 25...原创 2019-02-25 21:41:26 · 277 阅读 · 0 评论 -
八大排序算法--堆排序的优化(原地堆排序、索引堆)
优化一----原地堆排序前一篇博客我们都需要开辟一个新的数组 来进行堆的存放,下面将讲述原地堆排序。在前面讲到,堆是存放在一个数组中的,如果我们不想开辟新空间,在原来数组上依然可以实现堆排序,不过索引位置就要从0开始了。新的计算公式如上图,新的公式可以通过上图归纳出来:知道子节点索引为i, 求父节点索引: parent(i) = (i-1) / 2知道父节点索引为i,求左右子节点的索...原创 2019-02-24 18:14:55 · 873 阅读 · 0 评论 -
八大排序算法--堆排序
序言对于堆排序的学习,实际上就是对于 堆 这一种数据结构的学习,把堆学会了,堆排序自然也就学会了。1、为什么使用堆这种数据结构优先队列是一种很常用的队列,比如在游戏中,游戏角色在自动模式下,如何在周围一堆小怪中自动攻击某一个小怪?可能是判断这一群小怪哪一个比较近,就攻击哪一个,或者哪一个等级低,就攻击哪一个。总之,是会动态的计算周围小怪的优先级,然后攻击优先级最高的那一个小怪。堆 这一种数...原创 2019-02-23 18:35:01 · 507 阅读 · 0 评论 -
由归并排序和快速排序引申的思考
分治算法归并排序和快速排序都使用了分支算法的思想。分治算法:顾名思义,就是将原问题分割为同等结构的子问题,之后将子问题逐一解决后,在解决了各个小问题之后(各个击破之后)合并小问题的解,从而得到整个问题的解。归并排序:分的时候没有过多考虑,直接简单的一分为二,然后不断递归就可以了,但是在合的时候,就需要考虑怎么合在一起了。快速排序:费了较大的功夫去考虑怎么分为两部分的问题,我们写了parti...原创 2019-02-17 14:24:26 · 334 阅读 · 0 评论 -
八大排序算法--快速排序及其优化
快速排序定义高级排序在最后阶段较少数据排序是,都可以使用插入排序进行优化,因为越是高级的排序,实现越是复杂,通常来说在数据较大的效果越是明显,在数据较少时使用插入排序这一种简单排序更加快速。代码实现/** * 定义好脚标取值范围: * 对arr[l...r]部分进行快速排序,取值区间前闭后闭 */public static void quickSort(int[] arr, in...原创 2019-02-16 21:37:13 · 652 阅读 · 0 评论 -
八大排序算法--归并排序及其优化
归并排序定义时间复杂度 O(NlogN)归并排序的整体思想就是把数据 一分为二,然后将两部分数据分别排序后,再合并到一起的过程。可以用递归完成这个过程,看图理解:每次将数据分成a/b两组,两组数据分别排序。对a排序时,依然使用归并排序,于是继续将a分成两组,直到每组数据都只有一个时,一个数据本身就是有序的,不需要再排序,然后将讲个数据合并到一起,小的数排前面,大的排后面。不断合并,最后数据...原创 2019-02-15 23:07:49 · 727 阅读 · 0 评论 -
八大排序算法--希尔排序
希尔排序定义希尔排序其实就是在插入排序的基础上改进而来,不过由于改进的效率特别明显,而且希尔排序本身也算是一个研究的课题了,拥有各种各样的优化方式,各位大牛也写了很多论文来验证希尔排序的不同优化方式, 其中讨论的最多的就是步长。在讲到插入排序时, 我们是比较相邻的两个元素,而希尔排序,是比较相隔n个间距的两个数, n的大小就是步长。首先看一下代码实现,然后再具体讲解。代码实现public...原创 2019-01-28 21:00:59 · 283 阅读 · 0 评论 -
八大排序算法--插入排序及其优化
插入排序定义选择排序的整体思想,就是将当前位置的元素和前一个元素进行对比, 如果当前位置比较小,则交换它俩的位置,然后继续往前进行对比交换,直到前一个元素不比后一个元素小为止。代码实现public static void insertSort(int[] arr) { int len = arr.length; for(int i=0; i<len; i++) { for(...原创 2019-01-27 21:36:06 · 357 阅读 · 0 评论 -
八大排序算法--选择排序及其优化
选择排序定义选择排序的整体的思想就是,我们在一个序列当中选出一个最小的(本文以升序为例),然后和第一个元素交换,然后后面再在剩下的找最小的,再和第二个元素交换,以此类推,前面部分的数据慢慢变得有序,直到最终得到一个完全有序的数据。代码实现public static void selectSort(int[] arr) { int len = arr.length; for(int i=0...原创 2019-01-27 21:34:13 · 263 阅读 · 0 评论 -
八大排序算法--冒泡排序及其三种优化
讲给自己听无论是迷宫游戏、扫雷游戏,还是常用的搜索引擎,甚至高端AI人机博弈等都需要算法来更好的实现。算法是软件方面提升计算机效率的利器。算法与数据结构分不开,用代码实现算法,至少会涉及到一种数据结构,数据结构通常有:线性结构树形结构图算法就要分别对应不同数据结构去排序。当一个算法思想提出后,往往还需要更多时间去思考这个算法的优化。不断挖掘算法的潜力。算法分类:分治算法:...原创 2019-01-27 21:30:11 · 892 阅读 · 0 评论 -
算法与数据结构--简单易懂的红黑树(java实现)
红黑树的定义在前一篇博客中讲到了二分搜索树及其不足,在数据时有序的情况下,二分搜索树可能退化为链表,性能极大的降低,因此就演化出了红黑树。红黑树也是一种二叉树,但是又是一种比较特殊的二叉树,是一种自平衡树,树是比较平衡的,避免了二分搜索树那种退化的情况,红黑树在二分搜索树的基础上,增加了以下五条规则:每个节点不是红色就是黑色根节点总是黑色叶子结点总是黑色(即NIL节...原创 2018-12-30 22:16:19 · 298 阅读 · 0 评论 -
算法与数据结构--简单易懂的二分搜索树(java实现)
二分搜索树二分搜索树,有时我们也简称二叉树,它是一种树形的数据结构,结构图如下:但是二叉树结构不一定是完全二叉树(完全二叉树只是在有h层的二叉树中,在从1~h-1层的每个节点的子节点都是满的,且连续节点都集中在左边)1、二分搜索树的优势通常用于查找,通过键就可以获得值,插入也很方便,插入和查找时间复杂度都是O(logN).从上图我们可以很清楚的比较,二分搜索树这种数据结构的性能是比较全...原创 2018-12-30 22:15:24 · 557 阅读 · 0 评论 -
算法与数据结构--简单易懂的二分查找法
查找问题是计算机中非常重要的基础问题,但是查找往往建立在查找方法上,通常都是排序的数据##二分查找法对于有序数列,才能使用二分查找法,所以查找前就要用到排序算法。二分查找法的时间复杂度是O(logN),对于顺序数组,二分查找法已经是特别快了,所以顺序数组的查找操作,时间复杂度是O(logN)在有序数组中(假设为升序),先找到中间位置,然后比较要查找的数是比这个大还是小,比中间小就在左边找,大...原创 2018-12-30 22:14:30 · 463 阅读 · 0 评论