当前位置: 首页 > news >正文

中国网站建设新闻优秀网站架构

中国网站建设新闻,优秀网站架构,为拟建设的网站申请一个域名,江门提供网站制作平台一、拓扑排序 拓扑排序是基于依赖关系的节点#xff0c;根据依赖关系而生成的序列。节点和依赖关系往往要生成有向无环图。类似的问题有#xff1a;穿衣服裤子的先后关系#xff0c;生成穿衣序列/专业课程与前置课程形成的课程学习序列/代码编译依赖关系形成的编译顺序序列…一、拓扑排序 拓扑排序是基于依赖关系的节点根据依赖关系而生成的序列。节点和依赖关系往往要生成有向无环图。类似的问题有穿衣服裤子的先后关系生成穿衣序列/专业课程与前置课程形成的课程学习序列/代码编译依赖关系形成的编译顺序序列。 public class Graph {private int v; // 顶点的个数private LinkedListInteger adj[]; // 邻接表public Graph(int v) {this.v v;adj new LinkedList[v];for (int i0; iv; i) {adj[i] new LinkedList();}}public void addEdge(int s, int t) { // s先于t边s-tadj[s].add(t);} } 二、实现 0x00Kahn 算法 根据邻接表很容易计算出每个节点的入度。 遍历每个入度将入度为0的节点放入队列。 队列不空循环 取出队首元素输出他然后遍历他的邻接节点将邻接节点入度-1如果邻接节点恰好为0将节点放入队列。 时间复杂度求入度O(ve),循环输出O(ve)合起来O(ve) 空间复杂度入度数组O(v),队列O(v) public void topoSortByKahn() {int[] inDegree new int[v]; // 统计每个顶点的入度for (int i 0; i v; i) {for (int j 0; j adj[i].size(); j) {int w adj[i].get(j); // i-winDegree[w];}}LinkedListInteger queue new LinkedList();for (int i 0; i v; i) {if (inDegree[i] 0) queue.add(i);}while (!queue.isEmpty()) {int i queue.remove();System.out.print(- i);for (int j 0; j adj[i].size(); j) {int k adj[i].get(j);inDegree[k]--;if (inDegree[k] 0) queue.add(k);}} }0x01 DFS 深度优先搜索算法 深度优先搜索是要一通到底的所以需要将邻接表返过来改成逆邻接表。方法遍历邻接表对i的每个邻接节点j都将i加到j的逆邻接表中。图的深度优先搜索不跟树一样没有根节点所以要尝试从每个节点都开始一次自然需要visited数组防止重复。对某个节点深度遍历完之后再输出。时间复杂度求入度O(ve),顶点两次 边一次 空间复杂度入度数组O(v),队列O(v) public void topoSortByDFS() {// 先构建逆邻接表边s-t表示s依赖于tt先于sLinkedListInteger inverseAdj[] new LinkedList[v];for (int i 0; i v; i) { // 申请空间inverseAdj[i] new LinkedList();}for (int i 0; i v; i) { // 通过邻接表生成逆邻接表for (int j 0; j adj[i].size(); j) {int w adj[i].get(j); // i-winverseAdj[w].add(i); // w-i}}boolean[] visited new boolean[v];for (int i 0; i v; i) { // 深度优先遍历图if (visited[i] false) {visited[i] true;dfs(i, inverseAdj, visited);}} }private void dfs(int vertex, LinkedListInteger inverseAdj[], boolean[] visited) {for (int i 0; i inverseAdj[vertex].size(); i) {int w inverseAdj[vertex].get(i);if (visited[w] true) continue;visited[w] true;dfs(w, inverseAdj, visited);} // 先把vertex这个顶点可达的所有顶点都打印出来之后再打印它自己System.out.print(- vertex); }显然用于拓扑排序的图是不可以成环的。自然拓扑排序算法可以用于检测图中的环。对于kahn算法极端化思维如果所有的节点形成大环那么没有入度为0的节点也就不会有任何输出。普通思维如果存在环总会到一个位置没有任何节点入度为0。就会少输出节点。如果输出的节点总结点意味着存在环。 三、思考题 [1]在今天的讲解中我们用图表示依赖关系的时候如果 a 先于 b 执行我们就画一条从 a 到 b 的有向边反过来如果 a 先于 b我们画一条从 b 到 a 的有向边表示 b 依赖 a那今天讲的 Kahn 算法和 DFS 算法还能否正确工作呢如果不能应该如何改造一下呢 1.如果有向边反向代表依赖关系则Kahn算法无法工作改造方法是1.1把对入度的计算改为对出度的计算即首先输出出度为0的节点然后依次把与该节点相邻的节点的出度都减1重复此过程直到输出所有节点1.2 改成逆连接表计算入度而DFS算法中则会输出相反的结果由于邻接表和逆邻接表正好是相反的因此改造方法是在DFS中把对逆邻接表的的访问改为对邻接表的访问即可。 [2]我们今天讲了两种拓扑排序算法的实现思路Kahn 算法和 DFS 深度优先搜索算法如果换做 BFS 广度优先搜索算法还可以实现吗 2.采用BFS算法无法保证在某个结点输出之前先输出其所有依赖的节点因为有可能该节点和其所依赖的某个节点可能在BFS算法中处于同一个层次因为这两个节点可能都和某个节点相邻因此采用BFS算法有可能会输出不正确的拓扑次序。 笔记整理来源 王争 数据结构与算法之美
http://www.sadfv.cn/news/82991/

相关文章:

  • 网站建设培训公司哪家好手机制作网站开发
  • 厦门 做网站如何用word做网站地图
  • 鄂尔多斯住房和城乡建设局网站品牌营销和品牌推广的区别
  • 网站翻译建设网站建设 宣传
  • 360网站如何做引流自己做的网站能放到阿里云上
  • wordpress 调用站外api建筑网站do
  • 哪个网站可以做任务网络游戏企业不得向提供游戏服务
  • 做一家视频网站wordpress now 1.5
  • 公司网站制作费算是无形资产吗常见的网站结构有哪些
  • 企业网站页脚seo网络培训班
  • 学广告平面设计哪里好seo优化的主要内容
  • 工商营业执照注册网站瑞诺国际公司团队介绍
  • 网站设置点赞丰台网站制作浩森宇特
  • 浅谈营销型网站建设的市场费用做网站的所有代码
  • 做影视网站存储视频会侵权吗郑州网站建站模板
  • 创意网站建设设计公司迁移wordpress本地到服务器
  • 网站标题 逗号wordpress登录入口
  • 临沂网站建设方案服务一个网站3个相似域名
  • 公司网站的定义企业网站 微博模块
  • 21年网站搭建公司排行榜南京模板建站定制网站
  • 做购物网站怎么赚钱怎样制作网页游戏
  • 大人小孩做网站网站建设技术服务计入什么科目
  • 沧州网站运营公司芜湖注册公司
  • 建网站建设的基本流程网站app建站多少钱
  • 广西网站建设timkee网页版微信二维码扫描
  • 建造电商网站建立网站平台
  • 斗图在线制作网站wordpress zh cn.po
  • 法律电商如何做网站推广营销我自己做个网站怎么做
  • 青岛优化网站诊断网站建设的公司第七页
  • 杭州企业云网站建设人工智能网站建设