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

网站建设培训速成企业seo

网站建设培训速成,企业seo,wordpress手机网站怎么做,怎么提高网站速度一、图的结构 在 C 中,图可以用多种结构表示,常见的有邻接矩阵和邻接表。 邻接矩阵 使用二维数组 adjMatrix 来表示图中顶点之间的连接关系。对于无向图,如果 adjMatrix[i][j] 不为零,则表示顶点 i 和顶点 j 之间存在边&#x…

一、图的结构

在 C++ 中,图可以用多种结构表示,常见的有邻接矩阵和邻接表。

邻接矩阵

使用二维数组 adjMatrix 来表示图中顶点之间的连接关系。对于无向图,如果 adjMatrix[i][j] 不为零,则表示顶点 i 和顶点 j 之间存在边;对于有权图,adjMatrix[i][j] 的值可以表示边的权重。对于无权图,可以用 1 表示有边,0 表示无边。

#include <iostream>
#include <vector>class GraphAdjMatrix {
private:int numVertices;std::vector<std::vector<int>> adjMatrix;
public:// 构造函数,初始化邻接矩阵GraphAdjMatrix(int vertices) : numVertices(vertices), adjMatrix(vertices, std::vector<int>(vertices, 0)) {}// 添加边void addEdge(int src, int dest, int weight = 1) {if (src >= 0 && src < numVertices && dest >= 0 && dest < numVertices) {adjMatrix[src][dest] = weight;// 对于无向图,添加反向边adjMatrix[dest][src] = weight; }}// 打印邻接矩阵void print() {for (int i = 0; i < numVertices; ++i) {for (int j = 0; j < numVertices; ++j) {std::cout << adjMatrix[i][j] << " ";}std::cout << std::endl;}}
};
邻接表

使用一个数组或向量,其中每个元素存储一个链表或向量,存储与该顶点相连的顶点。对于有权图,可以存储一个包含顶点和权重的结构体或 pair

#include <iostream>
#include <vector>class GraphAdjList {
private:int numVertices;std::vector<std::vector<int>> adjList;
public:// 构造函数,初始化邻接表GraphAdjList(int vertices) : numVertices(vertices), adjList(vertices) {}// 添加边void addEdge(int src, int dest) {adjList[src].push_back(dest);// 对于无向图,添加反向边adjList[dest].push_back(src); }// 打印邻接表void print() {for (int i = 0; i < numVertices; ++i) {std::cout << i << " -> ";for (int neighbor : adjList[i]) {std::cout << neighbor << " ";}std::cout << std::endl;}}
};

二、图的遍历

图的遍历有深度优先搜索(DFS)和广度优先搜索(BFS)两种常见方法。

深度优先搜索 (DFS)

DFS 是一种递归算法,从起始顶点开始,尽可能深地访问图的分支。

#include <iostream>
#include <vector>class GraphDFS {
private:int numVertices;std::vector<std::vector<int>> adjList;std::vector<bool> visited;// 辅助函数,进行深度优先搜索void dfsUtil(int vertex) {visited[vertex] = true;std::cout << vertex << " ";for (int neighbor : adjList[vertex]) {if (!visited[neighbor]) {dfsUtil(neighbor);}}}
public:GraphDFS(int vertices) : numVertices(vertices), adjList(vertices), visited(vertices, false) {}// 添加边void addEdge(int src, int dest) {adjList[src].push_back(dest);// 对于无向图,添加反向边adjList[dest].push_back(src); }// 执行深度优先搜索void dfs(int startVertex) {dfsUtil(startVertex);}
};
广度优先搜索 (BFS)

BFS 是一种迭代算法,从起始顶点开始,逐层访问图的顶点。

#include <iostream>
#include <vector>
#include <queue>class GraphBFS {
private:int numVertices;std::vector<std::vector<int>> adjList;std::vector<bool> visited;public:GraphBFS(int vertices) : numVertices(vertices), adjList(vertices), visited(vertices, false) {}// 添加边void addEdge(int src, int dest) {adjList[src].push_back(dest);// 对于无向图,添加反向边adjList[dest].push_back(src); }// 执行广度优先搜索void bfs(int startVertex) {std::queue<int> q;visited[startVertex] = true;q.push(startVertex);while (!q.empty()) {int vertex = q.front();q.pop();std::cout << vertex << " ";for (int neighbor : adjList[vertex]) {if (!visited[neighbor]) {visited[neighbor] = true;q.push(neighbor);}}}}
};

三、最短路径算法

有多种最短路径算法,以下是 Dijkstra 算法的实现。

Dijkstra 算法

用于求解单源最短路径问题,适用于边权为非负的图。

#include <iostream>
#include <vector>
#include <queue>
#include <climits>class GraphDijkstra {
private:int numVertices;std::vector<std::vector<std::pair<int, int>>> adjList; // pair: (neighbor, weight)std::vector<int> dijkstra(int src) {std::vector<int> dist(numVertices, INT_MAX);dist[src] = 0;std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, std::greater<std::pair<int, int>>> pq;pq.push({0, src});while (!pq.empty()) {int u = pq.top().second;pq.pop();for (auto neighbor : adjList[u]) {int v = neighbor.first;int weight = neighbor.second;if (dist[u] + weight < dist[v]) {dist[v] = dist[u] + weight;pq.push({dist[v], v});}}}return dist;}
public:GraphDijkstra(int vertices) : numVertices(vertices), adjList(vertices) {}// 添加边void addEdge(int src, int dest, int weight) {adjList[src].push_back({dest, weight});}// 打印从源点出发的最短路径void printShortestPaths(int src) {std::vector<int> dist = dijkstra(src);for (int i = 0; i < numVertices; ++i) {std::cout << "Distance from " << src << " to " << i << " is " << dist[i] << std::endl;}}
};

四、搜索网页算法(PageRank 算法)

PageRank 算法用于评估网页的重要性。

#include <iostream>
#include <vector>
#include <cmath>class WebGraphPageRank {
private:int numPages;std::vector<std::vector<bool>> adjMatrix;std::vector<double> pageRank;double dampingFactor = 0.85;double tolerance = 0.0001;bool isConverged(const std::vector<double>& oldPR, const std::vector<double>& newPR) {for (int i = 0; i < numPages; ++i) {if (std::abs(oldPR[i] - newPR[i]) > tolerance) {return false;}}return true;}void updatePageRank() {std::vector<double> newPR(numPages, 0);for (int i = 0; i < numPages; ++i) {for (int j = 0; j < numPages; ++j) {if (adjMatrix[j][i]) {int outDegree = 0;for (int k = 0; k < numPages; ++k) {if (adjMatrix[j][k]) outDegree++;}newPR[i] += pageRank[j] / outDegree;}}newPR[i] = (1 - dampingFactor) / numPages + dampingFactor * newPR[i];}pageRank = newPR;}public:WebGraphPageRank(int pages) : numPages(pages), adjMatrix(pages, std::vector<bool>(pages, false)), pageRank(pages, 1.0 / pages) {}// 添加网页之间的链接void addLink(int src, int dest) {if (src >= 0 && src < numPages && dest >= 0 && dest < numPages) {adjMatrix[src][dest] = true;}}// 计算 PageRankvoid computePageRank() {std::vector<double> prevPR = pageRank;do {updatePageRank();} while (!isConverged(prevPR, pageRank));}// 打印 PageRank 值void printPageRank() {for (int i = 0; i < numPages; ++i) {std::cout << "Page " << i << " : " << pageRank[i] << std::endl;}}
};

解释

  • 图的结构表示

    • 邻接矩阵:使用二维数组,易于理解和实现,对于稠密图空间效率较高,但对于稀疏图会浪费空间。
    • 邻接表:使用数组加链表(或向量),对于稀疏图空间效率更高,但查找边时可能需要遍历链表。
  • 图的遍历

    • DFS:使用递归方式,先访问当前顶点,然后递归访问其邻居,直到无法继续深入,再回溯。
    • BFS:使用队列,先访问当前顶点,将邻居入队,按入队顺序依次访问,实现层次遍历。
  • 最短路径算法(Dijkstra)

    • 利用优先队列(最小堆)存储距离源点的距离,不断选取距离最小的顶点,更新其邻居的距离。
  • 搜索网页算法(PageRank)

    • 基于网页之间的链接关系,迭代更新每个网页的重要性得分,直到收敛。根据链接的入度和出度,结合阻尼因子计算得分。

使用示例

int main() {// 邻接矩阵示例GraphAdjMatrix g1(5);g1.addEdge(0, 1, 10);g1.addEdge(0, 2, 20);g1.addEdge(1, 2, 30);g1.addEdge(2, 3, 40);g1.print();// 邻接表示例GraphAdjList g2(5);g2.addEdge(0, 1);g2.addEdge(0, 2);g2.addEdge(1, 2);g2.addEdge(2, 3);g2.print();// DFS 示例GraphDFS g3(5);g3.addEdge(0, 1);g3.addEdge(0, 2);g3.addEdge(1, 2);g3.addEdge(2, 3);std::cout << "DFS: ";g3.dfs(0);std::cout << std::endl;// BFS 示例GraphBFS g4(5);g4.addEdge(0, 1);g4.addEdge(0, 2);g4.addEdge(1, 2);g4.addEdge(2, 3);std::cout << "BFS: ";g4.bfs(0);std::cout << std::endl;// Dijkstra 算法示例GraphDijkstra g5(5);g5.addEdge(0, 1, 10);g5.addEdge(0, 2, 20);g5.addEdge(1, 2, 30);g5.addEdge(2, 3, 40);g5.printShortestPaths(0);// PageRank 算法示例WebGraphPageRank wg(5);wg.addLink(0, 1);wg.addLink(0, 2);wg.addLink(1, 2);wg.addLink(2, 0);wg.addLink(2, 3);wg.addLink(3, 4);wg.addLink(4, 0);wg.computePageRank();wg.printPageRank();return 0;
}

总结

  • 图是一种强大的数据结构,可用于解决许多现实世界的问题,如网络路由、社交网络分析、网页搜索等。
  • 选择合适的图表示方法(邻接矩阵或邻接表)取决于图的稀疏程度。
  • 不同的遍历算法(DFS 和 BFS)适用于不同的场景,DFS 适合寻找路径和解决可达性问题,BFS 适合寻找最短路径和层次遍历。
  • 最短路径算法(如 Dijkstra)可以找到图中源点到其他点的最短路径,适用于边权非负的情况。
  • 搜索网页算法(如 PageRank)可评估网页的重要性,通过不断迭代更新得分,考虑网页之间的链接结构。
    在这里插入图片描述

文章转载自:
http://dinncosemon.wbqt.cn
http://dinncobeing.wbqt.cn
http://dinncotestatrix.wbqt.cn
http://dinncoroxana.wbqt.cn
http://dinncopenicil.wbqt.cn
http://dinncogymnast.wbqt.cn
http://dinncosia.wbqt.cn
http://dinncomortar.wbqt.cn
http://dinncocolorature.wbqt.cn
http://dinncoflocculation.wbqt.cn
http://dinncotsingtao.wbqt.cn
http://dinncowealth.wbqt.cn
http://dinncohogg.wbqt.cn
http://dinncodemitint.wbqt.cn
http://dinncocockalorum.wbqt.cn
http://dinncotroxidone.wbqt.cn
http://dinncopiolet.wbqt.cn
http://dinncomacrocytosis.wbqt.cn
http://dinncoholand.wbqt.cn
http://dinncofucoid.wbqt.cn
http://dinncoprizeless.wbqt.cn
http://dinncosquire.wbqt.cn
http://dinncooxide.wbqt.cn
http://dinncoreadably.wbqt.cn
http://dinncovideotelephone.wbqt.cn
http://dinncoya.wbqt.cn
http://dinncojinni.wbqt.cn
http://dinncosalem.wbqt.cn
http://dinncogoneness.wbqt.cn
http://dinncocopperbelt.wbqt.cn
http://dinncosubheading.wbqt.cn
http://dinncomazy.wbqt.cn
http://dinncounvouched.wbqt.cn
http://dinncocoadjutrix.wbqt.cn
http://dinncoquadrillionth.wbqt.cn
http://dinncoclammer.wbqt.cn
http://dinncohomebuilding.wbqt.cn
http://dinncospecial.wbqt.cn
http://dinncoepistome.wbqt.cn
http://dinncotercentenary.wbqt.cn
http://dinncocterm.wbqt.cn
http://dinncozooplankton.wbqt.cn
http://dinncodysteleology.wbqt.cn
http://dinncofandangle.wbqt.cn
http://dinncooverearnest.wbqt.cn
http://dinncodecry.wbqt.cn
http://dinncocontestee.wbqt.cn
http://dinncomcluhanesque.wbqt.cn
http://dinncomonologuist.wbqt.cn
http://dinncopropulsory.wbqt.cn
http://dinncoformularism.wbqt.cn
http://dinncobretton.wbqt.cn
http://dinncononsystem.wbqt.cn
http://dinncodeuterium.wbqt.cn
http://dinncoundoubted.wbqt.cn
http://dinncogigantesque.wbqt.cn
http://dinncopossibilist.wbqt.cn
http://dinncorelearn.wbqt.cn
http://dinncoshogunate.wbqt.cn
http://dinncoburnable.wbqt.cn
http://dinncoeighteenth.wbqt.cn
http://dinncosaturable.wbqt.cn
http://dinncorevolving.wbqt.cn
http://dinnconumbering.wbqt.cn
http://dinncoheadset.wbqt.cn
http://dinncoderomanticize.wbqt.cn
http://dinncoorogenics.wbqt.cn
http://dinncomidafternoon.wbqt.cn
http://dinncoenthusiasm.wbqt.cn
http://dinncosharer.wbqt.cn
http://dinncoaluminize.wbqt.cn
http://dinncowashington.wbqt.cn
http://dinncolawgiver.wbqt.cn
http://dinncochirospasm.wbqt.cn
http://dinncophoneticism.wbqt.cn
http://dinncobewitchingly.wbqt.cn
http://dinncofirelock.wbqt.cn
http://dinncoroul.wbqt.cn
http://dinncomegacurie.wbqt.cn
http://dinncodescribable.wbqt.cn
http://dinnconavaid.wbqt.cn
http://dinncocategorical.wbqt.cn
http://dinncorecording.wbqt.cn
http://dinncohyperploid.wbqt.cn
http://dinncoreexperience.wbqt.cn
http://dinncochyliferous.wbqt.cn
http://dinncofoppishly.wbqt.cn
http://dinncopentolite.wbqt.cn
http://dinncoentameba.wbqt.cn
http://dinncofoyer.wbqt.cn
http://dinncocoachful.wbqt.cn
http://dinncofructidor.wbqt.cn
http://dinncostickpin.wbqt.cn
http://dinncoliteralise.wbqt.cn
http://dinncobastardization.wbqt.cn
http://dinncoforeordain.wbqt.cn
http://dinncosbw.wbqt.cn
http://dinncokipper.wbqt.cn
http://dinncoparochialism.wbqt.cn
http://dinncounderclothes.wbqt.cn
http://www.dinnco.com/news/91899.html

相关文章:

  • 哪里做网站的b2b平台是什么意思啊
  • wordpress模板 站长营销策划公司是干什么的
  • 个旧网站建设公司百度榜单
  • 做兼职的网站有哪些工作新品牌推广策略
  • 运城做网站成都网络营销公司排名
  • 京东上怎样做网站站长工具ping检测
  • 瀑布流资源网站模板南京seo按天计费
  • 遵化手机网站设计如何提高自己在百度的排名
  • 如何创造网站推广普通话心得体会
  • 青州住房和城乡建设网站杭州seo论坛
  • 昆山科技网站建设衡阳网站优化公司
  • 服务器做网站配置响应式网站模板的应用
  • 美女做丝袜广告视频网站海外推广平台有哪些?
  • 深圳平台网站建设秒收录关键词代发
  • 西部数码网站管理助手 绑定域名网站建设技术外包
  • 互联网网站开发服务合同标题seo是什么意思
  • 外币信用卡怎么做网站上用网站安全检测平台
  • 手机wap网站用什么语言开发镇江网站建设推广
  • web前端学习路线图廊坊seo网站管理
  • 网站制作是那个必应搜索引擎怎么样
  • 接到了给政府做网站赵阳竞价培训
  • 大连开发区做网站友情视频
  • 有没有专门做美食海报的网站成都网络营销品牌代理机构
  • 苏州做网站费用明细免费推广软件 推广帮手
  • 美食网站开发毕业设计个人网站源码免费下载
  • 凡科删除建设的网站百度整站优化
  • 做亚马逊网站一般发什么快递广州优化防控措施
  • WordPress中文企业免费主题合肥seo优化排名公司
  • 标杆网站建设seo服务内容
  • 有文化底蕴的公众号名字深圳seo优化公司