拓扑排序简单笔记

最近做NOIp2003提高组第一题神经网络,纠结了很久,题目描述得也很不清楚,大概五六个小时后决定放弃,以后再拿回来做。

不过顺便复习一下拓扑排序,看的是CLRS和数据结构与算法分析in C

拓扑排序是对有向无圈图的顶点的一种排序。打个比方,比如起床之后有很多事情要做,有穿内衣穿毛衣穿外套刷牙洗脸穿鞋吃早饭……但是有的是要先做的,比如说只有先穿内衣才能穿外套,但是你穿了外套就不能再套上一件内衣,这种关系构成了一个有向无回路图。

算法是:找出一个入度为0的起点编号,把它连着的所有顶点入度-1,循环|V|次,假如中途找不到入度为0的那么就是有圈的了

因为扫描|V遍,所以复杂度是|V|^2的

 

可以用队列优化,开始的时候将入度为0的结点入队,每次出一个编号,并把与它相连的入度减一。直到队列为空。如果最后编的号不等于结点数那么就是有圈的了。采用邻接表的话复杂度是|V|+|E|,对稀疏图很有效果。

 

CLRS使用DFS对进行拓扑排序的,个人觉得不太实用,思想就是(copy一段):

 1.调用DFS(G)计算每个顶点的完成时间f[v];

 2.当每个顶点完成后,把它插入链表前端;

 3.返回由顶点组成的链表;

这是意外搜到的新加坡国立大学的网站上来的,点蓝色的可以进入。以前也看到过,还以为是NJU什么的。下面说版权所有是一个126的二级域名,看来网易以前不少域名都提供免费二级域名的服务啊,也反映网易靠不住,我要尽早把163邮箱的东西转移到GMAIL

PS:发现双飞燕KB8实在太软了,很容易误触,现在这篇是笔记本自带的巧克力键盘,觉得其实挺不错的。而且键距小也容易够到。想换个8115。

你可能感兴趣的:(排序)