也有好几天没记录算法学习情况了,这两天看了《算法导论》的第二部分,排序和顺序统计学,记录一下,也顺便增强记忆1.堆排序 就是最大堆和最小堆,用一维数组存储,数据结构是完全二叉树。主要过程分为构建最大/最小堆,插入操作,弹出最大值,取最大/最小值,改变堆中的权值。 构建堆就是从第一个非叶子节点...
分类:
编程语言 时间:
2015-03-21 22:50:14
阅读次数:
215
我个人曾经在大二的时候读过《算法导论》这本书,虽然我在之后的学习中很少再看这本书了,但是《算法导论》带给我的启蒙意义远超过其他我看到过的书籍,哪怕是如今研究一些比较深入的程序语言理论,也少有书籍能做到《算法导论》对我个人的影响,我认为唯一可以媲美它的就是DanFriedman的《thelittl.....
分类:
编程语言 时间:
2015-03-21 13:47:13
阅读次数:
160
从3.11到3.20,看了100多页算法导论,二十多页编译原理及实践,自己的求职之路也算是迈上了征途,万万没想到,电面都没了,万万没想到,机会木有了。 就算失败了,也来总结一下这次的不足吧,以便以后能有更好的前进方向和防止以后再次犯同样的错误。 第一点,就是自己开始的实在太晚,大一大二包括大...
分类:
其他好文 时间:
2015-03-20 23:38:04
阅读次数:
160
题外话 最近有些网友来信问我博客怎么不更新了,是不是不刷题了,真是惭愧啊,题还是在刷的,不过刷题的频率没以前高了,看完《算法导论》后感觉网上很多讨论的题目其实在导论中都已经有非常好的算法以及数学证明,只是照搬的话好像意义也不是很大,希望找到些有代表性的题目在更新,另外希望能接着前面的《穷举递归和回溯...
分类:
编程语言 时间:
2015-03-20 23:26:58
阅读次数:
224
题目链接:sicily 1136解题思路:
要求区间内的最大子数组,而且访问可能很频繁,时间复杂度需要达到o(n*logn),于是就很自然地想到了线段树。我们可以用线段树来保存区间的最大子数组,但是仔细想想又不对劲了,如果访问的区间跨越了两个小区间怎么破,所以,这并不只是一个简单的求区间连续和的问题,还要有点小技巧。
最大子数组怎么得到的,还记得《算法导论》里面讲过一种用分治法来求最大子数组的方...
分类:
编程语言 时间:
2015-03-19 22:10:55
阅读次数:
220
在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。一个中位数是它所属集合的“中点元素”。当n为奇数时,中位数是唯一的,位于i=(n+1)/2处;当n为偶数时,存在两个中位数,分别位于i=n/2和i=n/2+1处。如果不考虑n的奇偶性,中位数总是出现在i=?(n+1)/2?处(下中...
分类:
编程语言 时间:
2015-03-19 16:13:17
阅读次数:
187
哈希表,又名散列表,hashtable。。。云云,看似很高大上,其实不过是直接寻址的延伸而已。直接寻址为何物,看一个数组:a[10],那么取其中一个元素a[1],这就是直接寻址,直接去这个a+1的地址上,就找到了这个数值,时间复杂度为O(1)。而哈希表的目的就是要让查找的时间复杂度尽量往O(1)上靠。...
分类:
编程语言 时间:
2015-03-18 23:24:21
阅读次数:
287
画外音:没想做到15-2题也是费了一番周折,看来《算法导论》里题都不是白给的 整齐打印问题:考虑在一个打印机上整齐地打印一段文章的问题。输入的正文是n个长度分别为L1、L2、……、Ln(以字符个数度量)的单词构成的序列。我们希望将这个段落在一些行上整齐地打印出来,每行至多M个字符。“整齐度”的标.....
分类:
编程语言 时间:
2015-03-18 23:10:15
阅读次数:
494
二叉堆提供了o(lgn) 时间的插入, 删除最小,降级等操作,o(n) 时间的合并操作; ?斐波那契堆提供了更优操作时间界限:o(1) 插入, o(lgn) 删除最小, o(lgn) 删除, o(1)合并。 根据算法导论上说,斐波那契堆在删...
分类:
其他好文 时间:
2015-03-18 18:43:12
阅读次数:
145
对于以前,如果要我求第k小元素,或者是求前k大元素,我可能会将元素先排序,然后就直接求出来了,但是现在有了更好的思路。一.线性时间内求第k小元素
这个算法又是一个基于分治思想的算法。其具体的分治思路如下:
1.分解:将A[p,r]分解成A[p,q-1]和A[q+1,r]两部分,使得A[p,q-1]都小于A[q],A[q+1,r]都不小于A[q];
2.求解:如果A[q]恰好是...
分类:
编程语言 时间:
2015-03-18 14:08:46
阅读次数:
190