随笔分类 -  Algorithm

摘要:本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 一、概述 此处所说的堆为数据结构中的堆,而非内存分区中的堆。堆通常可以被看做是树结构,满足两个性质:1)堆中 阅读全文
posted @ 2016-05-13 22:24 bakari 阅读(4202) 评论(0) 推荐(1) 编辑
摘要:本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 《算法导论》第二版中在讨论斐波那契堆之前还讨论了二项堆,但是第三版中已经把这块的内容放到思考题中,究极原因我 阅读全文
posted @ 2016-05-12 20:44 bakari 阅读(3268) 评论(0) 推荐(1) 编辑
摘要:本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 一、高级数据结构 本章以后到第21章(并查集)隶属于高级数据结构的内容。前面还留了两章:贪心算法和摊还分析, 阅读全文
posted @ 2016-05-11 21:52 bakari 阅读(2225) 评论(0) 推荐(0) 编辑
摘要:本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 写在前面:从本章开始,算法导论章节进入第四部分:高级设计和分析技术。在读的过程中,可以明显感觉到本章内容跟之 阅读全文
posted @ 2015-12-23 16:50 bakari 阅读(3165) 评论(0) 推荐(0) 编辑
摘要:本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 一、AVL树 AVL树是一种平衡查找树,在前面的两篇文章:二叉搜索树 和 红黑树 中都提到过。由于二叉搜索树 阅读全文
posted @ 2015-11-02 18:12 bakari 阅读(738) 评论(0) 推荐(0) 编辑
摘要:本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 一、概要 我们在教科书上所学的所有数据结构都是最常规、最精简的数据结构,即便如此,基本上所有能遇上的问题都能 阅读全文
posted @ 2015-10-26 19:17 bakari 阅读(1107) 评论(0) 推荐(0) 编辑
摘要:本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。 写在前面:这一章真的把我害惨了,之前至少尝试看过3遍,每次看之前都下定决定一定要把它拿下,可是由于内容较多, 阅读全文
posted @ 2015-10-24 15:19 bakari 阅读(1736) 评论(0) 推荐(0) 编辑
摘要:一、二叉搜索树概览 二叉搜索树(又名二叉查找树、二叉排序树)是一种可提供良好搜寻效率的树形结构,支持动态集合操作,所谓动态集合操作,就是Search、Maximum、Minimum、Insert、Delete等操作,二叉搜索树可以保证这些操作在对数时间内完成。当然,在最坏情况下,即所有节点形成一种链 阅读全文
posted @ 2015-10-20 22:13 bakari 阅读(929) 评论(0) 推荐(0) 编辑
摘要:一、散列表的概念 本章介绍了散列表(or hash table)的概念、散列函数的设计及哈希冲突的处理。散列表(为了形象描述,我们通常叫槽)从表意上看是一种数据结构,但把它归为算法思想更为贴切。对于大部分的查找问题,使用散列表能达到O(1)的效率。现在很多大公司在面试大数据的题目时,解决方案里绝对少 阅读全文
posted @ 2015-10-16 12:56 bakari 阅读(717) 评论(0) 推荐(0) 编辑
摘要:本章讲述的是基本的数据结构,如栈、队列和链表。这些都是最最基本的数据结构,具体的就不再啰嗦。然后本章也没有什么需要特别注意的点,哦,有一个小节:指针和对象的实现,可以认真看一下,大概就是用其他的实现方式来代替指针和对象的实现,因为有些语言不支持指针和对象数据类型,那在实现这种链式的数据结构就无法表示 阅读全文
posted @ 2015-10-08 17:24 bakari 阅读(1148) 评论(0) 推荐(0) 编辑
摘要:本篇博文意在对前几章中遗漏的,本人觉得有意思的习题当独拿出来练练手。 1、习题2-4,求逆序对,时间复杂度要求Θ(nlgn) 定义:对于一个有n个不同的数组A, 当i<j时,存在A[i]>A[j],则称对偶(i, j)为A的一个逆序对。 譬如:<2,3,8,6,1>有5个逆序对。 解题思路:归并排序 阅读全文
posted @ 2015-10-05 19:21 bakari 阅读(687) 评论(0) 推荐(0) 编辑
摘要:本章如果要归结成一个问题的话,可以归结为选择问题,比如要从一堆数中选择最大的数,或最小的数,或第几小/大的数等, 这样的问题看似很简单,似乎没有什么可研究的必要,因为我们已经知道了排序算法,运用排序+索引的方式不就轻松搞定了?但细想,排序所带来的时间复杂度是不是让这个问题无形之中变得糟糕。那算法研究 阅读全文
posted @ 2015-10-02 17:34 bakari 阅读(2392) 评论(0) 推荐(0) 编辑
摘要:一、线性时间排序算法历史概览 计数排序首先是由 Harold H. Seward 于1954年提出,而且他还提出将计数排序和基数排序进行结合的思想;基数排序是L.J.Comrie于1929年首次在一篇描述卡片穿孔机文档中提出的一种方法,它是从最低有效位开始,对一个有多位数组成的数进行排序的方法;而桶 阅读全文
posted @ 2015-09-29 12:41 bakari 阅读(1166) 评论(0) 推荐(0) 编辑
摘要:一、快速排序概述 关于快速排序,我之前写过两篇文章,一篇是写VC库中的快排函数,另一篇是写了快排的三种实现方法。现在再一次看算法导论,发现对快速排序又有了些新的认识,总结如下: (1)、快速排序最坏情况下的时间复杂度为O(n^2),虽然最坏情况下性能较差,但快排在实际应用中是最佳选择。原因在于:其平 阅读全文
posted @ 2015-09-26 03:54 bakari 阅读(1692) 评论(0) 推荐(0) 编辑
摘要:优先队列可以说是堆的一个非常重要的应用,和堆对应,优先队列也分最小优先队列和最大优先队列。 优先队列是一种用来维护由一组元素构成的集合S的数据结构,其中每一个元素都有一个关键字(key),关键字赋予了一个元素的优先级,故名为优先队列。之所以用堆来实现优先队列,我想最大的原因是堆很容易对元素按关键字进 阅读全文
posted @ 2015-09-20 17:16 bakari 阅读(1107) 评论(0) 推荐(0) 编辑
摘要:现在来看, 堆的含义大概有两种,一种是数据结构,一种是在一些语言中所定义的“垃圾回收机制”,如Java,在书本上的开篇强调了这两者,并强调若非特殊说明,皆把堆看做是一种数据结构。 (二叉)堆的定义: 1)它是一个数组,可以被看成是一棵近似的完全二叉树,树上的每一个节点看做是数组中的每一个元素。 2) 阅读全文
posted @ 2015-09-20 15:35 bakari 阅读(867) 评论(0) 推荐(0) 编辑
摘要:在上一篇中,通过一个求连续子数组的最大和的例子讲解,想必我们已经大概了然了分治策略和递归式的含义,可能会比较模糊,知道但不能用语言清晰地描述出来。但没关系,我相信通过这篇博文,我们会比较清楚且容易地用自己的话来描述。 通过前面两章的学习,我们已经接触了两个例子:归并排序和子数组最大和。这两个例子都用 阅读全文
posted @ 2015-09-15 20:37 bakari 阅读(5563) 评论(0) 推荐(2) 编辑
摘要:一、第三章简单回顾 中间略过了第三章, 第三章主要是介绍如何从数学层面上科学地定义算法复杂度,以致于能够以一套公有的标准来分析算法。其中,我认为只要记住三个符号就可以了,其他的就看个人情况,除非你需要对一个算法剖根问底,不然还真用不到,我们只需有个印象,知道这玩意是用来分析算法性能的。三个量分别是: 阅读全文
posted @ 2015-09-15 18:22 bakari 阅读(5982) 评论(1) 推荐(2) 编辑
摘要:Author: bakari Date: 2015.9.11 《算法导论》真是一本让人又爱又恨的书,爱自然是因为它精简凝练的算法呈现,读来让人欲罢不能;至于恨,是因为它在进行算法分析的时候所体现的数学思想太过于强大, 对于我这种数学不上不下的人来说,自然有几分畏难,以致于我很早就接触这本书,前前后后 阅读全文
posted @ 2015-09-11 15:44 bakari 阅读(578) 评论(0) 推荐(0) 编辑
摘要:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下: 函数的声明如下: 这是一道广为流传的Google面试题,考察我们对链表的操作和时间复杂度的了解,咋一看这道题还想不出什么较好的解法,但人家把题出在这,肯定是有解法的。一般单链表删除某个节点,需要知道删除节点的前一个节点, 阅读全文
posted @ 2014-10-09 17:10 bakari 阅读(14499) 评论(4) 推荐(0) 编辑

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