随笔- 509  文章- 0  评论- 151  阅读- 22万 
06 2014 档案
《数据结构与算法分析:C语言描述》复习——第七章“哈希”——哈希表
摘要:2014.06.22 12:36简介: 哈希是一种数学思想,将不定长数据通过函数转换为定长数据。不定长数据通常意味着碎片化,动态分配内存等等影响存储和性能的因素。当这个定长数据是一个无符号整数时,可以用来表示数组的下标。因此就可以通过这样的哈希算法来把自定义类型的数据存入一个数组中。这样就有了哈希... 阅读全文
posted @ 2014-06-22 13:47 zhuli19901106 阅读(954) 评论(0) 推荐(0) 编辑
毕业整一年
摘要:去年这时我毕业了,今年我妹子也要毕业了。毕业一年的我,回学校还是感觉很亲切。堕落街的铁板炒饭没了,果麦奶茶店还在,卖肉夹馍的兄弟有事回老家去了,豆腐炒土豆还是六块钱一份。事业一无所成,信心还算坚定,任务依然艰巨,前途尽管惨淡,希望总是有的。我爱浙大,美丽杭州。目前的人生很美好,应该珍惜。 ——20... 阅读全文
posted @ 2014-06-22 01:11 zhuli19901106 阅读(288) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第八章“并查集”——并查集
摘要:2014.06.18 14:16简介: “并查集”,英文名为“union-find set”,从名字就能看出来它支持合并与查找功能。另外还有一个名字叫“disjoint set”,中文名叫不相交集合。可能我们倾向于用最短的名字,所以就出现了“并查集”翻译为“disjoint set”的情况。并查集... 阅读全文
posted @ 2014-06-18 15:56 zhuli19901106 阅读(1937) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第六章“排序”——基数排序
摘要:2014.06.17 06:42简介: 基数排序是一种非比较算法,通过多轮的分配与合并来排序整个数组。应用范围比较窄,根据Wikipedia的说法,它只适合整数排序。描述: 基数排序和桶排序有点类似,都是将元素按照特定依据分配到多个桶中。但它和桶排序的区别,在于它要进行不止一次的分配与合并。每次... 阅读全文
posted @ 2014-06-17 06:54 zhuli19901106 阅读(396) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第六章“排序”——桶排序
摘要:2014.06.17 06:22简介: 桶排序是一种非比较排序,某些情况下其最好的复杂度可以达到O(n)。虽然并不常作为排序算法使用,但桶的思想却是哈希表的关键之一。描述: 如果我们有k个桶,编号0~k - 1。那么我们用某种依据把数组里的n个元素分配到这k个桶中去。然后把每个桶单独排序。这k个... 阅读全文
posted @ 2014-06-17 06:31 zhuli19901106 阅读(339) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第六章“排序”——快速排序
摘要:2014.06.17 05:15简介: 快速排序是实际应用最广的基于内存的不稳定的比较排序。拥有O(n * log(n))的平均复杂度和O(n^2)的最坏复杂度。采用的思路是分治法,递归实现。描述: 快速排序的基本思路,是从数组中选取一个值pivot作为参照,使得比pivot小的都在它左边,比p... 阅读全文
posted @ 2014-06-17 06:18 zhuli19901106 阅读(646) 评论(2) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第六章“排序”——归并排序
摘要:2014.06.17 04:34简介: 归并排序是分治法的一个好例子,属于基于比较的内部/外部排序算法。普通的归并算法具有O(n * log(n))的时间和O(n)的空间复杂度。就地归并算法能帮助降低额外空间开销,使得归并排序更高效。描述: 分治法的思路就是先把大问题化为多个小问题,都解决了以后... 阅读全文
posted @ 2014-06-17 04:46 zhuli19901106 阅读(511) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第六章“排序”——堆排序
摘要:2014.06.17 03:29简介: 堆排序,是从这本教材上看,最好的排序算法。它是稳定排序,时间复杂度稳定保持在O(n * log(n)),空间复杂度为O(1)。原理非常简单,实现也比较简单。但是,应用却不如快速排序和归并排序那么广。原因咱们下面说说。描述: 如果你要把数组排成升序,你可以依... 阅读全文
posted @ 2014-06-17 04:08 zhuli19901106 阅读(433) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第六章“排序”——希尔排序
摘要:2014.06.17 02:43简介: 希尔排序是插入排序的改进版。交换排序的目的,是通过交换,将逆序数降低为0。每交换一对相邻元素,逆序数变化为1。如果交换的元素不相邻,则逆序数的变化可能就大于1。希尔排序的思路,就是通过交换离得更远的两个元素,让逆序数更快地变为0(当然,并不总是管用)。描述:... 阅读全文
posted @ 2014-06-17 02:57 zhuli19901106 阅读(409) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第六章“排序”——插入排序
摘要:2014.06.17 01:37简介: 插入排序是最常用的O(n^2)级别的交换排序算法。之所以最常用,是因为它和选择排序、冒泡排序相比,有着自己的优势。描述: 如果数组的前i - 1个元素已经排好序,你要将第i个元素插入到其中,使得前i个元素变得有序。为了找到应该插入的位置,我们从后向前扫描,... 阅读全文
posted @ 2014-06-17 02:25 zhuli19901106 阅读(401) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第六章“排序”——选择排序
摘要:2014.06.17 01:17简介: 选择排序是一种O(n^2)级别的交换排序算法,属于新手必学算法。描述: 个人觉得选择排序的代码是所有排序中最直观,最符合人类大脑思维的了。当我第一次有排序的需求时(初中时自学了一点C语言,算是人生第一次写代码),我自己试着写下的代码就是选择排序,当然我上了... 阅读全文
posted @ 2014-06-17 01:33 zhuli19901106 阅读(349) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第六章“排序”——冒泡排序
摘要:2014.06.17 01:04简介: 冒泡排序是O(n^2)级别的交换排序算法,原理简单,属于必知必会的基础算法之一。思路: 排序要进行N轮,每一轮从尾部逐个向前扫描,遇到逆序对就进行交换。确保每一轮把最小的元素交换到前面去。这个过程好比水中的气泡向上飘,所以叫冒泡排序。代码非常简单,所以语言... 阅读全文
posted @ 2014-06-17 01:13 zhuli19901106 阅读(489) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第五章“堆”——二叉堆
摘要:2014.06.15 22:14简介: 堆是一种非常实用的数据结构,其中以二叉堆最为常用。二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序。我们关心的通常只有堆顶的元素,而整个堆则被封装起来,保存在一个数组中。图示: 下图是一个最大堆: 实现: 优... 阅读全文
posted @ 2014-06-15 23:05 zhuli19901106 阅读(554) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第四章“树”——伸展树
摘要:2014.06.15 20:42简介: 伸展树是一种介于普通二叉搜索树和AVL树之间的,比较平衡的一种二叉搜索树。它不像AVL树那样总是高度平衡,虽然单次操作的就可能耗费O(n)时间,但连续M次基本操作的时间复杂度能做到O(M * log(N)),M当然不能和1太接近。这种复杂度叫做均摊复杂度,英... 阅读全文
posted @ 2014-06-15 21:38 zhuli19901106 阅读(386) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第四章“树”——AVL树
摘要:2014.06.15 16:22简介: AVL树是一种高度平衡的二叉搜索树,其命名源自于联合发明算法的三位科学家的名字的首字母。此处“平衡”的定义是:任意节点的左右子树的高度相差不超过1。有了这个平衡的性质,使得AVL树的高度H总是接近log(N),因此各种增删改查的操作的复杂度能够保证在对数级别... 阅读全文
posted @ 2014-06-15 18:17 zhuli19901106 阅读(606) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第四章“树”——二叉搜索树
摘要:2014.06.14 23:27简介: 二叉搜索树是学习二叉树之后,接触的第一个实用数据结构。特点是,左子树全部小于根,右子树全部大于根,元素不重复。一般能够支持对数级别的增删改查操作,但在二叉树发生倾斜的情况下,效率会下降至线性。下面给出插入、删除、查找的示意图。修改可以认为是先删除后插入。图示... 阅读全文
posted @ 2014-06-14 23:54 zhuli19901106 阅读(528) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第四章“树”——二叉树
摘要:2014.06.14 22:49简介: 二叉树是学习树结构时接触的第一个概念,其他衍生的表示形式包括N叉树(随便多少叉)、二叉链表(土话也叫左孩子右兄弟)。由于单纯的二叉树是无序的,能做的事情不太多,我只实现了基本的结构体和序列化方法。图示: 实现: 1 // My implementation... 阅读全文
posted @ 2014-06-14 23:22 zhuli19901106 阅读(707) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——栈
摘要:2014.06.14 22:26简介: 栈,是先进先出的结构。我们只关心栈的大小和栈顶的元素。图示: 实现: 1 // My implementation of stack. 2 class Stack { 3 public: 4 Stack() { 5 m_capaci... 阅读全文
posted @ 2014-06-14 22:36 zhuli19901106 阅读(757) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——单向链表
摘要:2014.06.14 21:40简介: 单向链表应该是绝大多数C语言初学者学会的第一个结构体了。每个节点会指向后续节点,属于顺序结构。由于单链表的实现简单,并且有着明显的限制,使其成为各种天才面试官们虐小朋友的利器(链表的功能实在很有限,而面试官总是要求你用链表完成各种各样的任务,难度就在这儿了)... 阅读全文
posted @ 2014-06-14 22:00 zhuli19901106 阅读(873) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——队列
摘要:2014.06.14 21:04简介: 队列作为先进先出(FIFO)思想的代表,是最基础的数据结构之一,最典型的应用,就是广度优先搜索。实现方式可以用一条单链表或者两个栈,其中前者更为靠谱,原因请自行分析。图示: 下图为单链表实现队列的思路。链表的头尾位置分别被记录,因此很容易实现尾进头出的操作... 阅读全文
posted @ 2014-06-14 21:32 zhuli19901106 阅读(851) 评论(0) 推荐(0) 编辑
《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——双向链表
摘要:2014.06.14 20:17简介: 双向链表是LRU Cache中要用到的基本结构,每个链表节点左右分别指向上一个和下一个节点,能够自由地左右遍历。图示: 实现: 1 // My implementation for doubly linked list. 2 struct ListNo... 阅读全文
posted @ 2014-06-14 20:59 zhuli19901106 阅读(2600) 评论(0) 推荐(1) 编辑
《有的人》
摘要:身处在一个缺少民族灵魂的时代,用这篇老先生留下的诗警醒自己。来自臧克家先生。《有的人》——纪念鲁迅有感有的人活着,他已经死了;有的人死了,他还活着。有的人骑在人民头上:“呵,我多伟大!”有的人俯下身子给人民当牛马。有的人把名字刻入石头,想“不朽”;有的人情愿作野草,等着地下的火烧。有的人他活着别人就... 阅读全文
posted @ 2014-06-09 16:13 zhuli19901106 阅读(200) 评论(0) 推荐(0) 编辑

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