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

网站建设基本代码新注册公司核名步骤

网站建设基本代码,新注册公司核名步骤,山西 网站建设,上优化引入 数据的逻辑结构#xff1a; 集合#xff1a;数据元素间除“同属于一个集合”外#xff0c;无其他关系线性结构#xff1a;一个对一个#xff0c;例如#xff1a;线性表、栈、队列树形结构#xff1a;一个对多个#xff0c;例如#xff1a;树图形结构#xff1…引入 数据的逻辑结构 集合数据元素间除“同属于一个集合”外无其他关系线性结构一个对一个例如线性表、栈、队列树形结构一个对多个例如树图形结构多个对多个例如图 图的基本概念及术语 图G ( V, E ) V顶点数据元素的有穷非空集合 E边的有穷集合 图的类型定义 无向图每条边都是无方向的 有向图每条弧都是有方向的 完全图任意两个点都有一条边相连 无向完全图n个结点就有n * (n - 1) / 2 条边有向完全图n个结点就有n * (n - 1) 条边 稀疏图有很少的边或者弧的图通常 m 远小于nlog(n) 稠密图有较多的边或者弧的图通常 m 大于nlog(n) 连通图在无有向图G (V,{E})中若对任意两个顶点v、u都存在v到u的路径则称G是连通图强连通图 图的基本术语 网边或者弧带权有值的图 邻接有边 / 弧相连的两个顶点之间的关系 存在ViVj则称 Vi 和 Vj 互为邻接点无向图存在 ViVj则称 Vi 邻接到VjVj 邻接于 Vi有向图 关联依附边 / 弧与顶点之间的关系 存在ViVj/ ViVj则称该边/弧关联与Vi和Vj 顶点的度与该顶点相关联的边的数目记为TD(V) 在有向图当中顶点的度等于该顶点的入度与出度之和 顶点V的入度是以V为终点的有向边的条数 以上图为例 ​ 对于上面的有向图来说每个结点的度都为2 ​ 对于上面的无向图来说每个结点的度都为3但是不同结点的入度、出度不一样V3入度为1出度为2 路径连接的边构成的顶点序列 路径长度路径上边/弧的数目/权值之和 回路环第一个顶点和最后一个顶点相同的路径 简单路径除路径起点和终点可以相同之外其余顶点均不相同的路径 简单回路简单环除路径起点和终点相同之外其余顶点均不相同的路径 子图设有两个图G (V,{E})G1 (V1,{E1})若V1属于V并且E1属于E则称G1是G的子图 连通分量强连通分量无有向图的极大连通子图称为G的连通分量强连通分量 极大连通子图该子图是G连通子图将G的任何不在该子图的顶点加入此图不再连续极小连通子图该子图是G的连通子图在该子图中删除任何一条边此子图不再连续 图的存储结构 数组邻接矩阵表示法 概述 建立一个顶点表记录各个顶点信息和一个邻接矩阵表示各个顶点之间的关系 设图A (V,E)有n个顶点则顶点表Vext[n]表示为 i01…n-1Vext[i]V1V2…Vn 图的邻接矩阵是一个二维数组A.arcs[n][n],定义为 当存在i,j或者( i,j )属于图中的边或者弧我们就将A.arcs[i][j]赋值为1否则为0 举例 无向图 具体形况根据顶点的值去建立顶点表 邻接矩阵 V1V2V3V4V5V101010V210101V301011V410100V501100 特点 无向图的邻接矩阵是对称的顶点i的度 第i行列中1的个数完全图的邻接矩阵中对角元素为0其余为1 代码演示见下面遍历部分 有向图 邻接矩阵 v1v2v3v4v10110v20000v30001v41000 特点 有向图的邻接矩阵可能是不对称的 顶点的出度 第i行元素之和 顶点的入度 第i列元素之和 顶点的度 出度 入度 网的邻接矩阵就是将1用权值替换 代码演示见下面遍历部分 优缺点 优点 直观简单好理解方便检查任意一对顶点间是否存在边方便找任意顶点的所有邻接点方便计算出任意顶点的度 缺点 不利于增加和删除顶点浪费空间存稀疏图有大量无效元素浪费时间统计稀疏图中共有多少条边 邻接表 顶点按编号顺序将顶点数据存储在一维数组中 关联同一顶点的边以顶点为尾的弧用线性链表存储 举例 仍以上图为例 无向图 特点 邻接表不唯一若无向图中有n个顶点e条边则其邻接表需n个头结点和2e个表结点适宜存储稀疏图无向图中顶点vi的度为第i个单链表中的结点数 代码演示见下面遍历部分 有向图 特点 顶点vi的出度为第i个单链表中的结点个数顶点vi的入度为整个单链表中邻接点域值是i-1的结点个数 代码演示见下面遍历部分 邻接矩阵与邻接表的关系: 1.联系邻接表中每个链表对应于邻接矩阵中的每一行链表中结点个数等于一行中非零元素的个数 2.区别 a.对于任意确定的无向图邻接矩阵是唯一的(行列号与顶点编号一致)但邻接表不唯一连接次序与顶点编号无关 b.邻接矩阵的空间复杂度为O(n^2)而连接表的空间复杂度为O(ne) 图的遍历 定义从已给的连通图中某一顶点出发沿着一些边访问图中所有的顶点且每个顶点仅被访问一次就叫做图的遍历它是图的基本运算 实质找每个顶点的邻接点的过程 问题由图的特点图中可能出现回路且图的任一顶点都可能与其他结点相遇在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点怎么避免重复访问 解决思路设置辅助数组a[n]用来标记每个被访问过的顶点初始状态都为0当顶点i被访问改a[i]为1防止被多次访问 深度优先搜索DFS 方法 在访问图中某一起始顶点v后由v出发访问它的任一邻接顶点w1再由w1出发访问与w1邻接但还未被访问过的顶点w2然后再从w2出发进行类似的访问…如此进行下去直至到达所有的邻接顶点都被访问过的顶点u为止接着退回一步退到前一次刚访问过的顶点看是否还有其他没有被访问的邻接顶点如果有则访问此顶点之后再从此顶点出发进行与之前类似的访问如果没有就再退回一步进行搜索重复上述过程直到连通图中所有顶点都被访问过为止 注意 稠密图适于在邻接矩阵上进行深度遍历稀疏图适于在连接表上进行深度遍历 对于邻接矩阵的代码演示 public class GraphAdjacencyMatrix {private int V; // 顶点的数量private int[][] matrix; // 邻接矩阵private boolean[] visited;// 构造函数public GraphAdjacencyMatrix(int v) {V v;matrix new int[v][v];visited new boolean[v];for (int i 0; i v; i) {visited[i] false;}}// 添加边public void addEdge(int v, int w, int weight) {matrix[v][w] weight; // 因为是无向图所以需要添加两个方向的边matrix[w][v] weight;}//深度优先遍历private void DFS(int v) {visited[v] true;System.out.print(v );for (int i 0; i V; i) {if (matrix[v][i] 1 !visited[i]) {DFS(i);}}}// 遍历所有顶点如果顶点未访问则进行DFSpublic void DFSTraversal() {for (int i 0; i V; i) {if (!visited[i]) {DFS(i); // 从顶点i开始DFS}}}// 打印图public void printGraph() {for (int i 0; i V; i) {for (int j 0; j V; j) {if (matrix[i][j] 0) {System.out.print(0 );} else {System.out.print(matrix[i][j] );}}System.out.println();}} }public class linjiejuzhen {public static void main(String[] args) {GraphAdjacencyMatrix graph new GraphAdjacencyMatrix(4);graph.addEdge(0, 1, 10); // 添加边 0-1 权重为 10graph.addEdge(0, 2, 6);graph.addEdge(1, 2, 4);graph.addEdge(2, 3, 1);System.out.println(Adjacency Matrix:);graph.printGraph();System.out.println(Depth First Traversal starting from vertex 0: );graph.DFSTraversal(); //0 1 2 3} }Adjacency Matrix: 0 10 6 0 10 0 4 0 6 4 0 1 0 0 1 0 Depth First Traversal starting from vertex 0: 0 1 2 3 对于邻接表代码演示 import java.util.Iterator; import java.util.LinkedList;public class DirectedGraphAdjacencyList {private int V; // 顶点的数量private LinkedListInteger adj[];private boolean visited[]; // 邻接表// 构造函数public DirectedGraphAdjacencyList(int v) {V v;adj new LinkedList[v];visited new boolean[v];for (int i 0; i v; i) {adj[i] new LinkedList();visited[i] false;}}// 添加边public void addEdge(int v, int w) {adj[v].add(w); // 添加从顶点v到顶点w的有向边}// 打印图public void printGraph() {for (int i 0; i V; i) {System.out.print(Vertex i :);IteratorInteger it adj[i].iterator();while (it.hasNext()) {System.out.print( - it.next());}System.out.println();}}private void DFS(int v) {visited[v] true;System.out.print(v );IteratorInteger i adj[v].listIterator();while (i.hasNext()) {int n i.next();if (!visited[n]) {DFS(n); // 递归访问未访问的邻接顶点}}}// 遍历所有顶点执行DFSpublic void DFSTraversal() {for (int i 0; i V; i) {if (!visited[i]) {DFS(i); // 从顶点i开始DFS}}} }public class DirectedGraphAdjacency {public static void main(String[] args) {DirectedGraphAdjacencyList graph new DirectedGraphAdjacencyList(6);// 添加有向边graph.addEdge(5, 0);graph.addEdge(5, 3);graph.addEdge(4, 0);graph.addEdge(4, 1);graph.addEdge(2, 3);graph.addEdge(3, 1);graph.addEdge(1, 3);System.out.println(Adjacency List Representation of Directed Graph:);graph.printGraph();System.out.println(Depth First Traversal starting from vertex 0: );graph.DFSTraversal(); //0 1 3 2 4 5} }Adjacency List Representation of Directed Graph: Vertex 0: Vertex 1: - 3 Vertex 2: - 3 Vertex 3: - 1 Vertex 4: - 0 - 1 Vertex 5: - 0 - 3 Depth First Traversal starting from vertex 0: 0 1 3 2 4 5 广度优先搜索BFS 方法 从图的某一结点出发首先依次访问该结点的所有邻接结点 Vi1、Vi2……Vin再按这些顶点被访问的先后次序依次访问与他们相邻接的所有未被访问的顶点。重复此过程直至所有顶点均被访问为止 对于邻接矩阵的代码演示 import java.util.LinkedList; import java.util.Queue;public class DirectedGraphAdjacencyMatrix {private int V; // 顶点的数量private int[][] matrix; // 邻接矩阵private boolean[] visited;// 构造函数public DirectedGraphAdjacencyMatrix(int v) {V v;matrix new int[v][v];visited new boolean[v];// 初始化矩阵所有元素都设置为0表示没有边for (int i 0; i v; i) {for (int j 0; j v; j) {matrix[i][j] 0;}visited[i] false;}}// 添加边public void addEdge(int v, int w, int weight) {matrix[v][w] weight; // 只在矩阵的对应位置添加边的权重}// 打印图public void printGraph() {for (int i 0; i V; i) {for (int j 0; j V; j) {if (matrix[i][j] 0) {System.out.print( 0 );} else {System.out.print( matrix[i][j] );}}System.out.println();}}//广度优先搜索public void BFS(int start) {QueueInteger queue new LinkedList();visited[start] true; // 标记起始顶点为已访问queue.add(start); // 将起始顶点添加到队列中while (!queue.isEmpty()) {int v queue.poll(); // 从队列中取出一个顶点System.out.print(v );for (int i 0; i V; i) {if (matrix[v][i] ! 0 !visited[i]) {visited[i] true; // 标记邻接顶点为已访问queue.add(i); // 将邻接顶点添加到队列中}}}} }public class linjiejuzhenYou {public static void main(String[] args) {DirectedGraphAdjacencyMatrix graph new DirectedGraphAdjacencyMatrix(4);graph.addEdge(0, 1, 10); // 添加有向边 0-1 权重为 10graph.addEdge(0, 2, 6);graph.addEdge(1, 2, 4);graph.addEdge(1, 3, 1);graph.addEdge(2, 3, 7);System.out.println(Directed Adjacency Matrix:);graph.printGraph();System.out.println(Breadth First Traversal starting from vertex 0: );graph.BFS(0); //0 1 2 3} }Directed Adjacency Matrix:0 10 6 0 0 0 4 1 0 0 0 7 0 0 0 0 Breadth First Traversal starting from vertex 0: 0 1 2 3 对于邻接表的代码演示 import java.util.Iterator; import java.util.LinkedList; import java.util.Queue;public class UndirectedGraphAdjacencyList {private int V; // 顶点的数量private LinkedListInteger adj[]; // 邻接表private boolean[] visited;// 构造函数public UndirectedGraphAdjacencyList(int v) {V v;visited new boolean[V];adj new LinkedList[v];for (int i 0; i v; i) {adj[i] new LinkedList();visited[i] false;}}// 添加边public void addEdge(int v, int w) {adj[v].add(w); // 添加从v到w的边adj[w].add(v); // 因为是无向图所以需要添加从w到v的边}// 打印图public void printGraph() {for (int i 0; i V; i) {System.out.print(Vertex i :);IteratorInteger it adj[i].iterator();while (it.hasNext()) {System.out.print( - it.next());}System.out.println();}}public void BFS(int start) {QueueInteger queue new LinkedList();visited[start] true; // 标记起始顶点为已访问queue.add(start); // 将起始顶点添加到队列中while (!queue.isEmpty()) {int v queue.poll(); // 从队列中取出一个顶点System.out.print(v );IteratorInteger i adj[v].listIterator();while (i.hasNext()) {int n i.next();if (!visited[n]) {visited[n] true; // 标记邻接顶点为已访问queue.add(n); // 将邻接顶点添加到队列中}}}} }public class UndirectedGraphAdjacency {public static void main(String[] args) {UndirectedGraphAdjacencyList graph new UndirectedGraphAdjacencyList(4);graph.addEdge(0, 1); // 添加边 0-1graph.addEdge(0, 2);graph.addEdge(1, 2);graph.addEdge(2, 3);System.out.println(Adjacency List Representation of Undirected Graph:);graph.printGraph();System.out.println(Breadth First Traversal starting from vertex 0: );graph.BFS(0); //0 1 2 3} }Adjacency List Representation of Undirected Graph: Vertex 0: - 1 - 2 Vertex 1: - 0 - 2 Vertex 2: - 0 - 1 - 3 Vertex 3: - 2 Breadth First Traversal starting from vertex 0: 0 1 2 3 二者搜索的算法分析 时间复杂度 邻接矩阵 对于邻接矩阵表示的图时间复杂度主要受两个因素影响 矩阵大小邻接矩阵的大小为 ×其中 V 是顶点的数量。 遍历矩阵你需要遍历整个邻接矩阵来检查每个顶点的所有邻接点。 因此对于邻接矩阵表示的图时间复杂度为 (^2)这是因为你需要检查 V 个顶点每个顶点可能与其他 V 个顶点相连。 邻接表 对于邻接表表示的图时间复杂度分析如下 顶点数量图有 V 个顶点。 边的数量图有 E 条边。 访问邻接表你访问每个顶点的邻接表每个邻接表包含与该顶点直接相连的顶点。 队列操作使用队列栈来存储待访问的顶点每次从队列栈中取出一个顶点并将其所有未访问的邻接顶点加入队列栈。 因此对于邻接表表示的图时间复杂度为 O(VE)。这是因为你访问了所有 V 个顶点并且每个顶点的邻接表即所有边也被访问了一次。 空间复杂度空间复杂度相同都是O(n)
http://www.w-s-a.com/news/262461/

相关文章:

  • 网站域名列表dede网站白屏
  • 站长工具一区品牌建设卓有成效
  • 电子商务网站建设案例wordpress批量编辑
  • 想代理个网站建设平台100个最佳市场营销案例
  • 钟表东莞网站建设石家庄做网站时光
  • 织梦 图片网站源码成都建设工程安监局网站
  • 做兼职的网站策划书湖北省建设工程造价信息网
  • 企业网站网址长期做网站应该购买稳定的空间
  • 网站静态化设计html5手机网站制作
  • 深圳最简单的网站建设家居网站建设全网营销
  • 如何取消网站备案佛山网站优化公司
  • 网站开发 成都广水网站设计
  • 音乐网站建设目标合同管理系统
  • jq网站特效插件如何知道网站是否被k
  • 自己的网站怎么接广告网站搭建收费
  • 宁波大型网站制作建立一个网站 优帮云
  • 大连零基础网站建设教学电话有哪些比较好的做ppt好的网站
  • 哪个网站做logo设计我的建筑网
  • php电子商务网站开发沂源手机网站建设公司
  • html和php做网站哪个好3gcms企业手机网站整站源码asp
  • 网站建设网页设计案例云南建设厅网站删除
  • 杏坛网站制作太原做网站要多少钱呢
  • 做新闻类网站还有市场吗东莞黄页网广告
  • 地方网站做外卖专业做互联网招聘的网站有哪些
  • 网站推广公司兴田德润紧急网页升级紧急通知
  • 厦门做网站哪家强企业网站网页设计的步骤
  • 普拓网站建设济南行业网站建设
  • 燕郊 网站开发网站里的地图定位怎么做
  • 门户网站建设招标互联网创业项目概述
  • 用什么做网站比较好市场调研公司是做什么的