参考https://blog.csdn.net/github_35807147/article/details/79110801

22.1-1 给定有向图的邻接链表,需要多长时间才能计算出每个结点的出度(发出的边的条数)?给定时间才能计算出每个节点的入度(进入的边的条数)?
一个图G(V,E),(V为点数,E为边数),邻接链表空间为O(V+E)。
而邻接表要遍历,因此计算每个节点的出度和入度的总时间都为O(V+E)

22.1-2 给定一棵有7个节点的完全二叉树的邻接链表,请给出等价的邻接矩阵表示。这里假设结点的编号为从1~7。
见书22章的图22-1 的a,b,c吧

22.1-3有向图G=(V,E)的转置是图GT=(V,ET)G^T=(V,E^T)GT=(V,ET), 这里ETE^TET={ (v,u)∈VV; (u,v)∈ E }.因此,图GTG^TGT就是将有向图G中所有边的方向反过来而形成的图。对于邻接链表和邻接矩阵两种表示,请给出从图G中计算出GTG^TGT的有效算法,并分析算法的运行时间。*
即对于有向图而言,要把所有的边反向,
如果是邻接矩阵,那么直接某格和某格交换,j即矩阵转置,时间是O(V^2)/2;
如果是邻接链表,那么要先开辟O(V+E)个空间,一 一遍历,重新建表格。

22.1-4 给定多图G= (V,E) 的邻接链表(多图是允许重复边和自循环边的图),请给出一个时间为O(V+E)的算法,用来计算该图的“等价”无向图 G’=(V,E’)的邻接链表表示。这里E’是将E中的冗余边和自循环边删除余下的边,删除冗余边指的是将两个结点之间的多条边替换为一条边。
标记法,第一次出现就不删除,这样就是o(V+E)了。

22.1-5 有向图G=(V,E)的平方图是图G2=(V,E2)G^2=(V,E^2)G2=(V,E2),这里,边(u,v)∈E2E^2E2当且仅当图G包含一条最多由两条边构成的从u到v的路径。请给出一个有效算法来计算图G的平方图G2G^2G2,这里图G既可以以邻接链表来表示,也可以用邻接矩阵来表示,请分析算法的运行时间。
解:
参考:https://blog.csdn.net/qq_35859033/article/details/78534993
什么是平方图呢,图是一个矩阵,那么矩阵*矩阵得到一个矩阵,
有cijc_{ij}cij​=∑K=1n\sum_{K=1}^n∑K=1n​aik∗bkja_{ik}*b_{kj}aik​∗bkj​,而矩阵里每一格子(x,y)表示x到y可行否,那么 aik∗bkja_{ik}*b_{kj}aik​∗bkj​1,则表示 i可到k,k可到j,那也就是说存在走两步从 i到j 的路径。那么cijc_{ij}cij​ 表示的就是有多少条经过两步从i到j的路径==。

因此如果用邻接矩阵表示的,从上面的公式可知就得用 o(VV(2v-1))的时间,
如果用邻接链表表示,找每个边用o(V+E),找aija_{ij}aij​用o(ViV_iVi​),找bjkb_{jk}bjk​再用O(VjV_jVj​),总共是o(V+E
VV);
而如果用空间换时间,邻接矩阵和邻接链表都使用,那么o(V+E
V);

22.1-6 多数以邻接矩阵作为输入的图算法的运行时间为 Ω(V2V^2V2),但也有例外。给定图G的邻接矩阵表示,请给出一个O(V)时间的算法来判断有向图G中是否存在一通用汇点。通用汇点是指入度为 |V|-1但出度为0的结点。
如果i到j是
思考矩阵,如果横行 i 表示出度,纵行 j 表示入度,那么要汇点也就是横行都为0,

算法导论第22章部分答案相关推荐

  1. 算法导论第七章习题答案(第三版) Introduction to Algorithm

    Exercises 7.1-1.略. 7.1-2. 返回的q值等于r,当数组中所有元素都相同时,可以将等于主元的值轮流放到两个集合中. 7.1-3 for循环正好是Θ(n)的复杂度,所以PARTITI ...

  2. 算法导论第2章(3) 二分查找 binary search

    二分查找(分治法). 二分查找也是一种分治法的实现,每一次查找将数据分为两个部分,问题规模都减小一半.这样查找的时间复杂度为logN.因为其实查找过程建立了一棵有N个节点的二叉树,查找次数是这棵树的高 ...

  3. 位向量(bit vector)(算法导论第十一章11.1-2)

    位向量(bit vector) 位向量(bit vector)是一个仅包含0和1的数组.长度为m的位向量所占空间要比包含m个指针的数组少得多.说明如何用一个位向量来表示一个包含不同元素(无卫星数据)的 ...

  4. 假设一动态集合S用一个长度为m的直接寻址表T来表示。请给出一个查找S中最大元素的过程。(算法导论第十一章11.1-1)

    假设一动态集合S用一个长度为m的直接寻址表T来表示.请给出一个查找S中最大元素的过程.你所给的过程在最坏情况下的运行时间是多少. (算法导论第十一章11.1-1) #include "Key ...

  5. 算法导论第16章练习题 16.1-4

    16.1-4 假设有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行.我们希望使用最少的教室来完成活动.设计一个高效的贪心算法,求每个活动应该在哪个教室来进行. (这个问题也被称为 ...

  6. 算法导论 第7章 快速排序 —— 练习还没做,记得补锅

    今天来学习第七章--快速排序. 作为占据一章的排序,快速排序可谓是重量级选手. 实际排序中最好的选择,因为 (1) 其平均性能非常好,期望实践复杂度为 O(n lgn); (2) 可进行原址排序; ( ...

  7. 重读《算法导论》第一章

    重读<算法导论> --------算法是程序的灵魂! 驱动力:本人从事开发10年有余,目前正在参与研发自动化编程.在代码解析.自动生成.以及源码分析过程中总会遇到一些算法的问题. 所以想着 ...

  8. 算法导论第十三章 红黑树

    写在前面:这一章真的把我害惨了,之前至少尝试看过3遍,每次看之前都下定决定一定要把它拿下,可是由于内容较多,深度够深,以致于每次要不是中途有什么事放弃了就跳过了,要不是花时间太多仍然不能理解而放弃.这 ...

  9. 软件工程导论第3章习题答案

    第3章习题 这些答案是我参考了网上的答案,结合课本,加入自己理解的答案. 课本:<软件工程导论 (第6版)>-- 张海藩 3-1 为什么要进行需求分析?通常对软件系统有哪些需求? 答: 为 ...

  10. 《算法导论3rd第一章》算法在计算中的作用

    前言 什么是算法?为什么算法值得研究?算法的作用是什么 算法 算法就是任何良定义的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合做为输出.即就是把输入转换成输出的计算步骤的一个序列. ...

最新文章

  1. 谷歌、亚马逊、微软、IBM…这些巨头都已如何通过AI赚到钱了?
  2. Prismatic 机器学习不一定得用大框架
  3. 计算机组成原理——概述
  4. javascript string replace 正则替换
  5. android版本sdk api对应,Android API Level与sdk版本对照表
  6. 1768: 回文平方数(进制转换)
  7. SQL学习之使用视图
  8. 爬虫 404 try_和我一起学爬虫
  9. 江西事业单位计算机管理岗怎么样,江西省直事业单位招聘出现不少冷门岗
  10. bzoj 3172: [Tjoi2013]单词 AC自动机
  11. Linux shell命令提示符
  12. 深度学习笔记_基本概念_Depthwise卷积与Pointwise卷积
  13. 小程序-语音播放动画-animation
  14. 【机器学习】支持向量机原理与序列最小最优化算法SMO
  15. 数据分析案例-电影数据分析
  16. biostar handbook(十一)|基因组变异的表示形式
  17. 高精度地图发展与北斗车载动态视频采集应用
  18. 从github上下载文件,文件夹,整个项目
  19. 【办公常用软件】万彩办公大师教程丨PDF转HTML工具帮助文档
  20. python 使用for循环,遍历列表里想要的值

热门文章

  1. eclipse汉化包
  2. Simulink之晶闸管(可控硅SCR)
  3. 解决家庭版win10、win8没有远程桌面选项
  4. Mac怎么将文档导出成PDF格式文件
  5. C# 网络爬虫 抓取“北京标准时间“ 网页请求
  6. 高质量解读《高性能mysql》——第1章 MySQL架构与历史
  7. 推荐参考文献元数据挖掘的几篇论文
  8. C语言递归方法求解背包问题
  9. elastic-Job配置参数详细解释
  10. oracle删除临时会话表,新一代QQ群机器人