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) 编辑

《算法导论》笔记 第10章 10.2 链表

摘要: 【笔记】哨兵不能降低各种操作的渐进时间界,但可以降低常数因子,简化代码。template class list {private: struct DATA{ ITEM key; DATA *prev, *next; DATA() {} DATA(ITEM x):key(x) {} }NIL; DATA *nil; int sz;public: list(){ nil = &NIL; nil->next=nil; nil->prev=nil; } ~list... 阅读全文

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

《算法导论》笔记 第10章 10.1 栈和队列

摘要: 【笔记】栈:后进先出 LIFO队列:先进先出 FIFOtemplateclass stack {private: ITEM S[MAXN]; int tp;public: stack() { tp = 0; } bool empty() { return tp == 0; } void push(ITEM x) { if (tp == MAXN) throw "stack overflow"; S[tp++] = x; } ITEM top() { if (tp == 0... 阅读全文

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

导航