随笔分类 -  <X>小橙书阅读指南

《算法,第四版》阅读指南与代码示例
摘要:上一章我大概说明了什么是图论以及无向图的基础概念,本章我们要研究一种更普遍的算法——连通性算法。它属于图论的分支,也是一种抽象算法。在深入算法之前,我们先提出一个具体的问题:假设在空间中存在N个点,我们可以通过线段连接任意两点,相互连接的点属于同一组连通分量,我们如何计算点p和点q之间是否连通。算法 阅读全文
posted @ 2018-11-04 19:19 冷豪 阅读(1044) 评论(0) 推荐(0) 编辑
摘要:在计算机应用中,我们把一系列相连接的节点组成的数据结构,叫做图。今天我们将要介绍它的一种形式——无向图,以及针对这种结构的深度优先搜索和路径查找算法。 一、无向图数据结构 接口: 实现类: 二、深度搜索优先算法 对于图的处理我们常常通过系统地检查每一个顶点和每一条边来获取图的各种性质。对于图的问题我 阅读全文
posted @ 2018-10-13 21:01 冷豪 阅读(934) 评论(0) 推荐(0) 编辑
摘要:算法描述:散列表是一种在时间和空间上做出权衡的查找算法。使用查找算法分为两步。第一步是通过散列函数将被查找的键转化未数组的一个索引。理想情况下,不同的键都能转为不同的索引值。当然,这只是理想情况,所以我们需要面对两个或多个键都被散列到相同索引值的情况。因此,散列查找的第二部就是处理碰撞冲突的过程。 阅读全文
posted @ 2018-09-23 19:24 冷豪 阅读(368) 评论(0) 推荐(0) 编辑
摘要:算法描述:二叉查找树时一种能够将链表插入的灵活性和有序数组查找的高效性结合起来的符号表(SymbolTable)实现。具体来说,就是使用每个节点含有两个链接的二叉树来高效地实现符号表。一颗二叉查找树时一颗二叉树,其中每个节点都含有一个Comparable的键且每个节点的键都大于其左子树中的任意节点的 阅读全文
posted @ 2018-09-23 18:33 冷豪 阅读(358) 评论(0) 推荐(0) 编辑
摘要:从标准二叉树的极端情况我们推导出2-3树这样的数据结构具备自平衡的特性,但是要实现这个特性在算法上相当复杂。考虑在大部分情况下,对于检索的指数级时间消费O(lgN)要求并不严格。因此,我们会看到如何将一颗标准的2-3树转变成红黑树的过程。 一、局部变换 考虑如果在2-节点上挂新的键并不会破坏2-3树 阅读全文
posted @ 2018-09-09 15:39 冷豪 阅读(391) 评论(0) 推荐(0) 编辑
摘要:序言:红黑树是数据结构与算法中最重要的知识点之一,也是最难掌握的。网上有关它的讨论很多,我曾经试图阅读那些“一篇文章让你熟悉红黑树”之类,可能是智力的缘故,效果平平。最终,我发现要想理解红黑树的特性和相关算法其实并无捷径可走。所以,我打算通过多篇博客来解释这个众所周知却又少有人精通的数据结构——Re 阅读全文
posted @ 2018-09-09 13:31 冷豪 阅读(313) 评论(0) 推荐(0) 编辑
摘要:算法描述:许多应用程序都需要按照顺序处理任务,但是不一定要求他们全部有序,或是不一定要一次就将他们排序。很多情况下我们只需要处理当前最紧急或拥有最高优先级的任务就可以了。面对这样的需求,优先队列算法是一个不错的选择。 算法图示: 算法解释:上图所展示的是最大优先队列(大顶堆)的算法逻辑,在这个标准的 阅读全文
posted @ 2018-08-25 22:15 冷豪 阅读(769) 评论(0) 推荐(0) 编辑
摘要:算法描述:快速排序是一种分治的排序算法。它将数组分为两个子数组,并将两部分独立的排列。快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将子数组归并以将整个数组排序;而快速排序将数组排序的方式则是当两个子数组都有序时整个数组也就自然有序了。 算法图示: 算法解释:选择标的元素(5) 阅读全文
posted @ 2018-08-18 13:26 冷豪 阅读(348) 评论(0) 推荐(0) 编辑
摘要:算法描述:将两个较小的有序数组合并成为一个较大的有序数组是比较容易的事情。我们只需要按照相同的顺序依次比较最左侧的元素,然后交替的放进新数组即可。这就是自顶向下的归并排序的实现思路。与之前的算法不同的是,归并排序需要使用额外的存储空间,用空间换时间的做法也是在排序算法中经常需要做的选择。 算法图示: 阅读全文
posted @ 2018-08-18 11:35 冷豪 阅读(2422) 评论(0) 推荐(0) 编辑
摘要:算法描述:希尔排序是一种基于插入排序的快速排序算法,相比于传统的相邻插入,希尔排序更加适合大规模乱序数组的排序。和插入算法一样,我们也可以优化插入和移动的过程从而进一步提升算法效率。 算法图示: 希尔排序算法的实质是首先将一个大的乱序数组变成几个小的有序数组,再逐步调整数组长度。最后一步依然是做一次 阅读全文
posted @ 2018-08-18 11:10 冷豪 阅读(475) 评论(0) 推荐(0) 编辑
摘要:算法描述:通常人们在整理扑克的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。在算法的实现中,为了给要插入的元素腾出1个空间,我们需要将其余所有元素在插入之前都向右移动1位。这种算法叫插入算法。 算法图示: 算法解释:在基础版本中通常的做法是,当新元素需要被插入有序数组的时候,从右 阅读全文
posted @ 2018-08-12 00:08 冷豪 阅读(274) 评论(0) 推荐(0) 编辑
摘要:算法描述:一种最简单的排序算法是这样的:首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置。再次,再剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,知道将整个数组排序。这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小者。 算法图示: Java代码示例 阅读全文
posted @ 2018-08-11 23:25 冷豪 阅读(321) 评论(0) 推荐(0) 编辑
摘要:适用场景:当需要在大量有序数据中查找的时候,推荐使用二分查找法(BinarySearch)。 下图演示的是在有序数组[10,11,12,16,18,23,29,33,48,54,57,68,77,84,98]中命中23和未命中50的情况: Java代码示例: Qt/C++代码示例: 相关附件: wh 阅读全文
posted @ 2018-08-10 22:31 冷豪 阅读(557) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示