本文兼参考自《算法导论》及《算法》。 以前一直不能够理解深度优先搜索和广度优先搜索,总是很怕去碰它们,但经过阅读上边提到的两本书,豁然开朗,马上就能理解得更进一步。 1. 深度优先搜索 1.1 迷宫搜索 在《算法》这本书中,作者写了很好的一个故事。这个故事让我马上理解了深度优先搜索的思想。...
分类:
编程语言 时间:
2015-04-28 01:42:28
阅读次数:
340
本节课主要讲了如何构造自己想要的数据结构,或者扩充已有数据结构的功能,以实现想要的特定功能
比如设计一个动态结构,满足功能寻找第k大的数
其做法是维护每个结点的子结点个数来推导其秩,而不维护其秩,因为动态操作会使得其难以维护
红黑树的插入操作 1.树插入 2.rebalance
构造自己需要的扩充数据结构的基本流程
1.选择一个基本的数据结构 例如红黑树
2.决定要...
分类:
编程语言 时间:
2015-04-27 09:50:44
阅读次数:
182
先通过表的扩增这一例子来引入今天的主题——平摊分析和势能分析
一个哈希表的大小应该为多少比较合适?
theta(n)比较合适
可是万一我们不知道n是多大呢
使用动态表解决 溢出就建立一个大小翻倍的空间,然后复制过去
这样做插入的最坏时间复杂度为n
让我们看看平均的时间复杂度,每次基本插入操作为1,空间溢出时需要开一个更大一倍的空间,并复制当前的元素过去,所以空...
分类:
编程语言 时间:
2015-04-27 00:31:33
阅读次数:
189
才开始看算法导论,准备边看边做下笔记,文采不好,希望大家谅解。本人小菜一枚,绝对有很多不对之处,希望大家指出。如果你觉得插入排序总是记不住,你可以借助一个比较形象的例子:比如你可以把它想象成你斗地主的时候,一张一张的拿牌,从右往左插牌,左边都是插好的(类似于已经排好序的)伪代码如下:INSERT.....
分类:
编程语言 时间:
2015-04-26 01:12:31
阅读次数:
161
一、计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了。例如,如果有17个元素小于x,则将x放在第18个位置即可。但是当存在几个元素相同时,会稍许不同,否则中间会漏掉元素。二、假设输入是一个数组A[1..n],A.length =...
分类:
编程语言 时间:
2015-04-23 19:26:36
阅读次数:
141
1. 快速排序描述:基于分治模式,分为分解、解决和合并三部分;1)分解:将数组A[p..r]划分为两个子数组A[p..q-1]和A[q+1..r],是的A[p..q-1]中每个元素都小于或等于A(q)2)解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]排序3)合并:合并两个...
分类:
编程语言 时间:
2015-04-23 19:22:00
阅读次数:
127
何为算法(Algorithm)对特定问题求解方法(步骤)的一种描述...
分类:
其他好文 时间:
2015-04-22 20:39:27
阅读次数:
119
一个归并排序卡了一天最后还是归并算法有问题,最初是为了把算法导论的伪代码转到c++而加了一些东西,其中在对左右数组的赋值那里出了问题。因为进行测试时不完全,就是只用书上的数组进行测试时,归并算法部分还好使,而归并排序不好使,一度以为是函数递归出了问题。现在看来,首先要看懂递归模型,然后算法的基础要....
分类:
编程语言 时间:
2015-04-21 17:26:08
阅读次数:
166
本节课介绍了一种全新的数据结构——跳跃表
跳跃表是一种简单又有趣的动态搜索数据结构,其主要优点在于其易于实现,而且很好的保证了其具有高效的性能,即2*O(lgn)的搜索性能
在此之前我想首先谈谈链表,链表的优点在于其插入和删除只需要常数项的时间(加上查找该元素需要额外的O(n)时间),但是其查找效率只有O(n),这里顺带补充一下链表类的问题,以下先给出两个BAT公司面试时热衷于...
分类:
编程语言 时间:
2015-04-18 14:37:52
阅读次数:
229