数据结构mooc课小结(0)

来源:互联网 发布:手机淘宝怎么退换货 编辑:程序博客网 时间:2024/06/06 12:36

想总结一下,大部分内容都掌握了,但相信还是有很多不熟练之处

授课大纲
第一讲 基本概念 [陈越]
1.1 什么是数据结构
1.2 什么是算法
1.3 应用实例:最大子列和问题

第二讲 线性结构 [何钦铭]
2.1 线性表及其实现
2.2 堆栈
2.3 队列

 
第三讲 树(上) [何钦铭]
3.1 树与树的表示
3.2 二叉树及存储结构
3.3 二叉树的遍历
 
第四讲 树(中)[何钦铭]
4.1 二叉搜索树
4.2 平衡二叉树

第五讲 树(下)[何钦铭]
5.1 堆
5.2 哈夫曼树与哈夫曼编码
5.3 集合及运算


第六讲 图(上)[陈越]
6.1 什么是图
6.2 图的遍历

第七讲 图(中)[陈越]
树之习题选讲-Tree Traversals Again
树之习题选讲-Complete Binary Search Tree
树之习题选讲- Huffman Codes

7.1 最短路径问题
小白专场:哈利·波特的考试- C语言实现
 
第八讲 图(下)[陈越]
8.1 最小生成树问题
8.2 拓扑排序
图之习题选讲-旅游规划
 
第九讲 排序(上)[陈越]
9.1 简单排序(冒泡、插入)
9.2 希尔排序
9.3 堆排序
9.4 归并排序
 
第十讲 排序(下)[陈越]
10.1 快速排序
10.2 表排序
10.3 基数排序
10.4 排序算法的比较
 
第十一讲 散列查找 [何钦铭]
11.1 散列表
11.2 散列函数的构造方法
11.3 冲突处理方法
11.4 散列表的性能分析
11.5 应用实例:词频统计


第十二讲 综合习题选讲 [陈越]
习题选讲-Insert or Merge
习题选讲-Sort with Swap(0,*)
习题选讲-Hashing - Hard Version
 


线性结构这部分, 队列堆栈链表已经比较熟练了。

树的话, AVL  哈夫曼树,堆不够熟练。 树的先中后序遍历的非递归实现需要再多看看,还是很精妙的。

平衡树中的红黑树没有实现过,印象中非常难搞。

陈启峰的SBT也可以试试,说不定有奇效。

左孩子右兄弟实现多叉树用的不多,可以找找相关题目练练。

并查集的实现也不够熟练,路径压缩还有按秩合并以及并查集的根节点的几种变种应用记得不多。



接下来就是重头戏:图

图的遍历BFS DFS  比较熟悉,BFS的有个小技巧,去确定当前BFS到了第几层,何时遍历完整的一层。

最短路算法dijkstra  和 floyd算法

最小生成树只用过prim算法, kruskal算法没实现过。

识别图中不同的连通集,

拓扑排序,关键路径。拓扑排序BFS 和 DFS 两种,好像BFS用的多。

图还有很多内容,网络流什么的可以学一下


基本的数据结构介绍完了,接下来讲一些常用的算法。

排序!

稳定不稳定的排序,

堆排,相对少用,关键在于堆的实现。

归并,数组的归并其实意义不大,虽说复杂度也是 nlogn,但是需要不少复制元素,o(n)的额外空间。链表的归并还不错,没有占用太多的额外空间。

快排,基本实现和pivot的选择都知道但是不够熟悉。还没有在单链表上实现过快排。

不过课程没有介绍外排序,只是提到归并的时候很适合


在接下来不完全基于比较的排序算法, 基数排序,表排序等,没有认真的实现过,需要加强巩固。

最后是哈希,重点在于哈希函数的设计,表的大小和冲突处理。

冲突处理中,链表处理冲突没啥好说的了,或者可以考虑把冲突的链表构造成一个堆/有序表配合二分。

开放地址法有比较多的变种,

线性探测简单但是容易聚集,

二次探测更均匀,而且质数的表大小有很好的性质(表半满的时候一定能找到合适位置, 如果表大小是4k+3的质数,则会有更好的性质,不过不会证明。。据说和二次剩余有关)

删除的情况一般是惰性删除,必要时rehash,清理掉大量标记为删除的元素。

哈希还有很多更高级的形式,动态哈希,可拓展哈希,位置敏感哈希等等。

原创粉丝点击