普林斯顿大学《算法II》第二周学习笔记 Directed Graph

有向图的遍历和无向图的遍历类似,主要是DFS和BFS。

对于DAG(Directed Acyclic Graph),还有一个很重要的拓扑的概念,拓扑排序的倒序可以用Depth-first search来生成,类似二叉树的后序遍历。

见Depthfirst Order in Algs4
private void dfs(Digraph G, int v) {        marked[v] = true;        pre[v] = preCounter++;        preorder.enqueue(v);        for (int w : G.adj(v)) {            if (!marked[w]) {                dfs(G, w);            }        }        postorder.enqueue(v);        post[v] = postCounter++;    }
将postorder反转后就是有向无环图的拓扑排序。拓扑排序的其中一个现实应用场景就是当有多个任务可同时进行并且任务之间有先置关系是的调度决策。

编程练习
WordNet
这个project虽然定义中有一个shortest ancestor,但他不是一棵树,而且边的指向是从儿子->父亲,我用的方法是分为两个输入节点各自做一次DFS,并且记下每个节点到起始节点的距离,得到两个数组depthA,deptahB,分别代表每个节点到A和B的距离,然后就是找到min(depthA[i] +deptahB[i]) (0<=i<n) 即可。
				
时间: 2024-11-03 01:33:50

普林斯顿大学《算法II》第二周学习笔记 Directed Graph的相关文章

普林斯顿《算法II》第一周学习笔记 Undirected Graph

普林斯顿的算法课是Cousera上评价挺高的一门课,课程的教学语言用的是java,课程中的算法都会被封装成类的形式,对于建立各个算法的知识结构来说还是很有好处的. 第一周的内容是Undirected Graph, 图的存储形式分为adjacency matrix(邻接矩阵)和 adjacency list(邻接表),前者对于可以以O(1)的复杂度查找两个节点是否有边,后的优势在于面对sparse maxtrix(稀疏矩阵)时可以存储很多空间. Depth-first search & Bread

机电传动控制第二周学习笔记

这周结合老师讲的内容还有发下来的资料以及自己的网上查阅,对电机传动控制又有来新的认识. 首先是老师上课讲的机电传动系统的平衡以及直流电机的基本工作原理及结构,都比较容易接受和理解,尤其是老师在黑板上提到的一个对机电传动的整体的流程框图,个人感觉对理解很有帮助,但是我上课时候没有听清楚,所以很遗憾,还需要继续向老师和同学讨教.还有一点感受很明显需要前面的电学等物理知识的储备,以及对物理模型平衡的理解.电动机和发电机其实本质都是一样的,只不过用来选择的主动元素和被动元素不同. 再一个是对电机发展历史

第二周学习笔记

关于电机发展史,其进程我多多少少有所了解,电机的两大门类发电机和电动机,其由直流变味交流的进步,法拉第.特斯拉等人都粗略有所了解. 1820年7月21日,丹麦哥本哈根大学教授.物理学家奥斯特发现了“电流的磁效应”,建立了电磁的相互联系,诞生了电磁学.1821年英国著名的物理学家法拉第制成了第一个实验电动机的模型,经过40多年时间的研究与发展,终于使电动机得以在工业生产和日常生活中得以广泛应用. 在这些进步中,电机所实现的电磁动能相互转换的过程是曲折而伟大的.真是有这些进步才有了如今的工业,生活等

软件测试第二周学习笔记

本周我们主要学习了等价类划分的基本概念和一些等价类划分的实例. 一.等价类划分的基本内容 等价类划分就是解决如何选择适当的数据子集来代表整个数据集的问题,通过降低测试的数目去实现“合理的”覆盖,覆盖了更多的可能数据,以发现更多的软件缺陷. 等价类划分法是一种典型的.重要的黑盒测试方法,它将程序所有可能的输入数据(有效的和无效的)划分成若干个等价 类.然后从每个部分中选取具有代表性的数据当做测试用例进行合理的分类,测试用例由有效等价类和无效等价类的代表组成,从而保证测试用例具有完整性和代表 性.利

Linux第二周学习笔记(8)

2.14 文件或目录权限chmod (1). 权限表示 [[email protected] ~]# ls -l 总用量 12 -rw-------. 1 root root 1418 1月  22 08:19 anaconda-ks.cfg -rw-r--r--  1 root root 4358 1月  29 23:24 anaconda-ks.cfg.1 文件的权限是和所有者.所属组有关系的,一个文件总共有三个权限位总共有9位分成三段,加上第一位表示设备类型总共十位,一下进行解析: -rw

【蒋海平】机电传动控制第二周学习笔记

<自动化技术中的进给电气传动> 时间域描述:微分方程 我们由此也可看出时间域描述系统特性的复杂程度,下节则顺利过渡到频率域. 对于一种不可调的电气传动系统,写出微分方程如下 引入电力过程与机械过程的时间常数简化上式 等式左边为输出,定标后为,右边为输入电压u,以及干扰--负载转矩. 由 ML=0 可知系统 基准响应特性 ua恒定,ML 阶跃式变化 可估计不可调传动系统的干扰响应特性 阶跃响应特性用来描述一个传递环节或一个系统的输出量在输入量发生一次阶跃式变化时的随时间变化过程. 过渡函数:把输

Linux内核分析——第二周学习笔记

20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 (一)计算机是如何工作的?(总结)——三个法宝 ①存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: ②函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能: enter pushl %ebp movl %esp,%ebp leave movl %ebp,%esp popl %ebp 函数参数传递机制和局部变量存储 ③中

GeekBand第二周学习笔记

Copy Ctor(拷贝构造),copy assignment operator(拷贝赋值) Copy Ctor(拷贝构造):默认的拷贝构造函数会将其引用类型的引用拷贝到新实例,若用指针指向两实例的同一引用类型则两指针的值是相同的即指向同一内存地址. 1 String::String(const String& str) 2 { 3 m_data=new char[strlen(str.m_data)+1]; 4 strcopy(m_data,str.m_data); 5 } Copy assi

Linux第二周学习笔记(7)

2.13 文档查看cat_more_less_head_tail (1). cat命令 cat命令:用于查看一个文件的内容并将其显示在屏幕上 cat-A命令:显示所有的内容,包括特殊字符 cat-n命令:显示行号 -------------------------------------------------------------------------------------------- cat命令: [[email protected] tmp]# cat /etc/passwd ro