上一页 1 2 3 4 5 6 ··· 40 下一页

2014年4月17日

《算法导论》笔记 第12章 12.1 二叉查找树

摘要: 【总结】终于刷到这里了。二叉查找树性质:设x为二叉查找树中的一个节点。如果y是x的左子树中的一个结点,则key[x]=key[y]。如果x是一棵包含n个结点的子树的根,则调用INORDER-TREE-WALK(x)过程的时间为Θ(n)。 void inoderTreeWalk(NODE *rt) { if (rt->l) inoderTreeWalk(rt->l); coutkeyr) inoderTreeWalk(rt->r); }【练习】12.1-1 基于关键字集合{1,4,5,10,16,17,21},画出高度为2、3、4、5、6的二叉查找树。12... 阅读全文

posted @ 2014-04-17 21:30 电子幼体 阅读(368) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第11章 总结与思考

摘要: 【总结】证明题实在是太多,本章练习搞起来很吃力。但是代码却相当好写。重点在散列函数的设计。【思考】11-1 最长探查的界11-2 链接法中槽的大小11-3 二次探查11-4 k全域散列和认证 阅读全文

posted @ 2014-04-17 20:09 电子幼体 阅读(302) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第11章 11.5 完全散列

摘要: 【笔记】暂无!【练习】*11.5-1 阅读全文

posted @ 2014-04-17 19:56 电子幼体 阅读(220) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第11章 11.4 开放寻址法

摘要: 【笔记】开放寻址法:所有元素都存放在散列表里。当查找一个元素时,要检查所有的表项,直到找到所需的元素,或者最终发现该元素不在表中。删除操作:在槽中置一个特定的值DELETED。因此在必须删除关键字的应用中,往往采用链接法解决碰撞。计算开放寻址法中的探查序列:线性探查:h(k,i) = (h'(k)+i) mod m, i = 0,1,...,m-1二次探查:h(k,i) = (h'(k)+c1*i+c2*i^2) mod m双重散列:h(k,i) = (h1(k)+i*h2(k)) mod m双重散列是用于开放寻址法最好的方法之一,因为它所产生的排列具有随机选择的排列的许多特性 阅读全文

posted @ 2014-04-17 19:50 电子幼体 阅读(478) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第11章 11.3 散列函数

摘要: 【笔记】好的散列函数:每个关键字都等可能地散列到m个槽位中的任何一个之中去,并与其他的关键字已被散列到哪一个槽位中无关。如果所给关键字不是自然数,则必须有一种方法来将它们解释为自然数。除法散列表:h(k) = k mod m。乘法散列表:h(k) = floor(m(kA mod 1)),用关键字k乘上常数A(0<A<1),并抽取出kA的小数部分。然后,用m乘以这个值,再取结果的底。【练习】11.3-1 假设我们希望查找一个长度为n的链表,其中每一个元素都包含一个关键字k和一个散列值h(k)。每一个关键字都是长字符串。在表中查找具有给定关键字的元素时,如何利用各元素中的散列值。先求 阅读全文

posted @ 2014-04-17 15:21 电子幼体 阅读(950) 评论(0) 推荐(0) 编辑

2014年4月16日

《算法导论》笔记 第11章 11.2 散列表

摘要: 【笔记】函数h将关键字域U映射到散列表T[0..m-1]的槽位上。h(k)是关键字k的散列值。碰撞:两个关键字映射到同一个槽上。链接法:把散列到同一槽中的所有元素都放在一个链表中。给定一个能存放n个元素的、具有m个槽位的散列表T,定义T的装载因子α为n/m,即一个链中平均存储的元素数。对一个用链接技术来解决碰撞的散列表,在简单一致散列的假设下,一次不成功查找的期望时间为θ(1+α)。在简单一致散列的假设下,对于用链接技术解决碰撞的散列表,平均情况下一次成功的查找需要θ(1+α)时间。平均来说,查找操作需要常数常量的时间。【练习】11.2-1 假设用一个散列函数h,将n个不同的关键字散列到一个长 阅读全文

posted @ 2014-04-16 20:45 电子幼体 阅读(842) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第11章 11.1 直接寻址表

摘要: 【笔记】当关键字的全域U比较小时,直接寻址。【练习】11.1-1 考虑由一个长度为m的直接寻址表T表示的动态集合S。给出一个查找S的最大元素的算法过程。所给的过程在最坏情况下的运行时间是什么?遍历动态集合中的所有元素O(m)11.1-2 位向量是一种仅包含0和1的数组。长度为m的位向量所占空间要比包含m个指针的数组少得多。请说明如何用一个位向量来表示一个包含不同元素(无卫星数据)的动态集合。字典操作的运行时间应该是O(1)。B[i]为1表示元素i存在,为0则不存在。11.1-3 说明如何实现一个直接寻址表,使各元素的关键字都不必相同,且各元素可以有卫星数据。所有三种字典操作(INSERT,DE 阅读全文

posted @ 2014-04-16 19:44 电子幼体 阅读(621) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第10章 总结与思考

摘要: 【思考】10-1 列表之间的比较每一种动态集合操作的渐进最坏情况运行时间是什么?10-2 用链表实现的可合并堆a) 链表是排序的b) 链表是不排序的c) 链表是不排序的,且待合并的各动态集合是不想交的。10-3 在已排序的紧凑链表中搜索a) 阅读全文

posted @ 2014-04-16 19:01 电子幼体 阅读(225) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第10章 10.4 有根树的表示

摘要: 【笔记】用二叉数表示有多个子女的树:left[x]表示最左边的儿子,right[x]右边的兄弟。【练习】10.4-1 画出由下列域表示的、根在下标6处的二叉树。10.4-2 请写出一个O(n)时间的递归过程,在给定含n个结点的二叉树后,它可以将树中的每个结点的关键字输出来。void dfs(int x){ printf("%d ",key[x]); if (l[x]) dfs(l[x]); if (r[x]) dfs(r[x]);}10.4-3 请写出一个O(n)时间的非递归过程,将给定的n结点二叉树中每个结点的关键字输出来。可以利用栈作为辅助数据结构。void outpu 阅读全文

posted @ 2014-04-16 18:28 电子幼体 阅读(516) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第10章 10.3 指针和对象的实现

摘要: 【笔记】对象的多重数组表示:对一组具有相同域的对象,每一个域都可以用一个数组来表示。对象的单数组表示:一个对象占据存储中的一组连续位置,指针即指向某对所占存储区的第一个位置,后续位置可以通过加上相应的偏移量进行寻址。分配和释放对象:使用废料收集器。【练习】10.3-1 请画出序列 存储在以多重数组表示的双链表中的形式,令画出在单数组表示下的形式。10.3-2 对一组用单数组表示实现的同构对象,写出其过程ALLOCATE-OBJECT和FREE-OBJECT。10.3-3 在过程ALLOCATE-OBJECT和FREE-OBJECT的实现中,为什么不需要重置对象的prev域。分配内存时只需要找. 阅读全文

posted @ 2014-04-16 17:01 电子幼体 阅读(536) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 ··· 40 下一页

导航