专门做t恤的网站,推广软文平台,新闻头条新闻,国内最大的猎头公司#x1f3af;要点
#x1f3af;马尔可夫随机场网格推理学习 | #x1f3af;二维伊辛模型四连网格模型推理 | #x1f3af;统计物理学模型扰动与最大乘积二值反卷积 | #x1f3af;受限玻尔兹曼机扰动和最大乘积采样 | #x1f3af;视觉概率生成模型测试图像
#x1f3…要点
马尔可夫随机场网格推理学习 | 二维伊辛模型四连网格模型推理 | 统计物理学模型扰动与最大乘积二值反卷积 | 受限玻尔兹曼机扰动和最大乘积采样 | 视觉概率生成模型测试图像
机器人图算法运动建模、定位、姿态同时定位和绘图和基于地标的同时定位和绘图 | 共轭梯度优化、视觉里程计、视觉同时定位和绘图图算法 | 机器人运动最小二乘问题图算法 | 全球导航卫星系统移动物体定位图算法 | 机器人触觉估算物体姿态图算法
图模型用例
Python问题决策影响图结构化概率模型
Python汽车油耗活塞循环原木纱强度及电阻覆盖率现实统计模型计算
Python | R | MATLAB群体消息和遗传病筛选多元统计模型
Python神经模型评估微分方程图算法
Python精神病算法和自我认知异类数学模型
Python蜂窝通信Wi-Fi和GPU变分推理及暴力哈希加密协议图消息算法
语言内容分比 Python和C二分图判断算法
二分图是一种图其顶点可以分为两个独立的集合 U 和 V并且每条边 (u, v) 要么连接从 U 到 V 的顶点要么连接从 V 到 U 的顶点。换句话说对于每条边 (u, v)要么 u 属于 U 且 v 属于 V要么 u 属于 V 且 v 属于 U。我们也可以说没有边连接同一集合的顶点。 #mermaid-svg-Atq60rov2rm1FDVE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Atq60rov2rm1FDVE .error-icon{fill:#552222;}#mermaid-svg-Atq60rov2rm1FDVE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Atq60rov2rm1FDVE .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Atq60rov2rm1FDVE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Atq60rov2rm1FDVE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Atq60rov2rm1FDVE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Atq60rov2rm1FDVE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Atq60rov2rm1FDVE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Atq60rov2rm1FDVE .marker.cross{stroke:#333333;}#mermaid-svg-Atq60rov2rm1FDVE svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Atq60rov2rm1FDVE .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Atq60rov2rm1FDVE .cluster-label text{fill:#333;}#mermaid-svg-Atq60rov2rm1FDVE .cluster-label span{color:#333;}#mermaid-svg-Atq60rov2rm1FDVE .label text,#mermaid-svg-Atq60rov2rm1FDVE span{fill:#333;color:#333;}#mermaid-svg-Atq60rov2rm1FDVE .node rect,#mermaid-svg-Atq60rov2rm1FDVE .node circle,#mermaid-svg-Atq60rov2rm1FDVE .node ellipse,#mermaid-svg-Atq60rov2rm1FDVE .node polygon,#mermaid-svg-Atq60rov2rm1FDVE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Atq60rov2rm1FDVE .node .label{text-align:center;}#mermaid-svg-Atq60rov2rm1FDVE .node.clickable{cursor:pointer;}#mermaid-svg-Atq60rov2rm1FDVE .arrowheadPath{fill:#333333;}#mermaid-svg-Atq60rov2rm1FDVE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Atq60rov2rm1FDVE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Atq60rov2rm1FDVE .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-Atq60rov2rm1FDVE .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-Atq60rov2rm1FDVE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Atq60rov2rm1FDVE .cluster text{fill:#333;}#mermaid-svg-Atq60rov2rm1FDVE .cluster span{color:#333;}#mermaid-svg-Atq60rov2rm1FDVE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Atq60rov2rm1FDVE :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 图2 图1 1 2 3 4 1 2 3 4 5 如果可以使用两种颜色对图进行着色使得集合中的顶点用相同的颜色着色则二分图是可能的。请注意可以使用两种颜色对偶数环的循环图进行着色。例如参见下图。 #mermaid-svg-NSWhA41emp9ckkb0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NSWhA41emp9ckkb0 .error-icon{fill:#552222;}#mermaid-svg-NSWhA41emp9ckkb0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NSWhA41emp9ckkb0 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-NSWhA41emp9ckkb0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NSWhA41emp9ckkb0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NSWhA41emp9ckkb0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NSWhA41emp9ckkb0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NSWhA41emp9ckkb0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NSWhA41emp9ckkb0 .marker.cross{stroke:#333333;}#mermaid-svg-NSWhA41emp9ckkb0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NSWhA41emp9ckkb0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NSWhA41emp9ckkb0 .cluster-label text{fill:#333;}#mermaid-svg-NSWhA41emp9ckkb0 .cluster-label span{color:#333;}#mermaid-svg-NSWhA41emp9ckkb0 .label text,#mermaid-svg-NSWhA41emp9ckkb0 span{fill:#333;color:#333;}#mermaid-svg-NSWhA41emp9ckkb0 .node rect,#mermaid-svg-NSWhA41emp9ckkb0 .node circle,#mermaid-svg-NSWhA41emp9ckkb0 .node ellipse,#mermaid-svg-NSWhA41emp9ckkb0 .node polygon,#mermaid-svg-NSWhA41emp9ckkb0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NSWhA41emp9ckkb0 .node .label{text-align:center;}#mermaid-svg-NSWhA41emp9ckkb0 .node.clickable{cursor:pointer;}#mermaid-svg-NSWhA41emp9ckkb0 .arrowheadPath{fill:#333333;}#mermaid-svg-NSWhA41emp9ckkb0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NSWhA41emp9ckkb0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NSWhA41emp9ckkb0 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-NSWhA41emp9ckkb0 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-NSWhA41emp9ckkb0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NSWhA41emp9ckkb0 .cluster text{fill:#333;}#mermaid-svg-NSWhA41emp9ckkb0 .cluster span{color:#333;}#mermaid-svg-NSWhA41emp9ckkb0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NSWhA41emp9ckkb0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-NSWhA41emp9ckkb0 .c1*{fill:#140!important;}#mermaid-svg-NSWhA41emp9ckkb0 .c1 span{fill:#140!important;}#mermaid-svg-NSWhA41emp9ckkb0 .c2*{fill:#500!important;}#mermaid-svg-NSWhA41emp9ckkb0 .c2 span{fill:#500!important;} A B C D E F 不可能使用两种颜色对具有奇数循环的循环图进行着色。 #mermaid-svg-3hq1iMuQFLELVPkL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3hq1iMuQFLELVPkL .error-icon{fill:#552222;}#mermaid-svg-3hq1iMuQFLELVPkL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3hq1iMuQFLELVPkL .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-3hq1iMuQFLELVPkL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3hq1iMuQFLELVPkL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3hq1iMuQFLELVPkL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3hq1iMuQFLELVPkL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3hq1iMuQFLELVPkL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3hq1iMuQFLELVPkL .marker.cross{stroke:#333333;}#mermaid-svg-3hq1iMuQFLELVPkL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3hq1iMuQFLELVPkL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3hq1iMuQFLELVPkL .cluster-label text{fill:#333;}#mermaid-svg-3hq1iMuQFLELVPkL .cluster-label span{color:#333;}#mermaid-svg-3hq1iMuQFLELVPkL .label text,#mermaid-svg-3hq1iMuQFLELVPkL span{fill:#333;color:#333;}#mermaid-svg-3hq1iMuQFLELVPkL .node rect,#mermaid-svg-3hq1iMuQFLELVPkL .node circle,#mermaid-svg-3hq1iMuQFLELVPkL .node ellipse,#mermaid-svg-3hq1iMuQFLELVPkL .node polygon,#mermaid-svg-3hq1iMuQFLELVPkL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3hq1iMuQFLELVPkL .node .label{text-align:center;}#mermaid-svg-3hq1iMuQFLELVPkL .node.clickable{cursor:pointer;}#mermaid-svg-3hq1iMuQFLELVPkL .arrowheadPath{fill:#333333;}#mermaid-svg-3hq1iMuQFLELVPkL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3hq1iMuQFLELVPkL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3hq1iMuQFLELVPkL .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-3hq1iMuQFLELVPkL .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-3hq1iMuQFLELVPkL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3hq1iMuQFLELVPkL .cluster text{fill:#333;}#mermaid-svg-3hq1iMuQFLELVPkL .cluster span{color:#333;}#mermaid-svg-3hq1iMuQFLELVPkL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3hq1iMuQFLELVPkL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-3hq1iMuQFLELVPkL .c1*{fill:#140!important;}#mermaid-svg-3hq1iMuQFLELVPkL .c1 span{fill:#140!important;}#mermaid-svg-3hq1iMuQFLELVPkL .c2*{fill:#500!important;}#mermaid-svg-3hq1iMuQFLELVPkL .c2 span{fill:#500!important;} A B C D E 检查图是否为二分图的算法一种方法是在着色问题中使用回溯算法来检查图是否是 2-可着色的。以下是一个简单的算法用于确定给定图是否是二分图
将红色分配给源顶点放入 U 组中。将所有邻居涂上蓝色放入集合 V 中。将所有邻居的邻居涂成红色放入 U 组。这样为所有顶点分配颜色使其满足 m 路着色问题其中 m 2的所有约束。在分配颜色时如果我们找到与当前顶点颜色相同的邻居则该图不能用 2 个顶点着色或者图不是二分图
C代码算法
#include iostream
#include queue
#define V 4using namespace std;
bool isBipartite(int G[][V], int src)
{int colorArr[V];for (int i 0; i V; i)colorArr[i] -1;colorArr[src] 1;queue int q;q.push(src);while (!q.empty()){int u q.front();q.pop();if (G[u][u] 1)return false; for (int v 0; v V; v){if (G[u][v] colorArr[v] -1){colorArr[v] 1 - colorArr[u];q.push(v);}else if (G[u][v] colorArr[v] colorArr[u])return false;}}return true;
}int main()
{int G[][V] {{0, 1, 0, 1},{1, 0, 1, 0},{0, 1, 0, 1},{1, 0, 1, 0}};isBipartite(G, 0) ? cout Yes : cout No;return 0;
}
Python算法
class Graph():def __init__(self, V):self.V Vself.graph [[0 for column in range(V)] \for row in range(V)]def isBipartite(self, src):colorArr [-1] * self.VcolorArr[src] 1queue []queue.append(src)while queue:u queue.pop()if self.graph[u][u] 1:return False;for v in range(self.V):if self.graph[u][v] 1 and colorArr[v] -1:colorArr[v] 1 - colorArr[u]queue.append(v)elif self.graph[u][v] 1 and colorArr[v] colorArr[u]:return Falsereturn True
g Graph(4)
g.graph [[0, 1, 0, 1],[1, 0, 1, 0],[0, 1, 0, 1],[1, 0, 1, 0]]print (Yes if g.isBipartite(0) else No)上述算法仅在图连通时才有效。在上述代码中我们始终从源 0 开始并假设从该源访问顶点。一个重要的观察结果是没有边的图也是二分图。请注意二分图条件表示所有边都应从一个集合到另一个集合。我们可以扩展上述代码以处理图不连通的情况。对于所有尚未访问的顶点重复调用上述方法。
C算法
#include bits/stdc.husing namespace std;const int V 4;
bool isBipartiteUtil(int G[][V], int src, int colorArr[])
{colorArr[src] 1;queueint q;q.push(src);while (!q.empty()) {int u q.front();q.pop();if (G[u][u] 1)return false;for (int v 0; v V; v) {if (G[u][v] colorArr[v] -1) {colorArr[v] 1 - colorArr[u];q.push(v);}else if (G[u][v] colorArr[v] colorArr[u])return false;}}return true;
}bool isBipartite(int G[][V])
{int colorArr[V];for (int i 0; i V; i)colorArr[i] -1;for (int i 0; i V; i)if (colorArr[i] -1)if (isBipartiteUtil(G, i, colorArr) false)return false;return true;
}int main()
{int G[][V] { { 0, 1, 0, 1 },{ 1, 0, 1, 0 },{ 0, 1, 0, 1 },{ 1, 0, 1, 0 } };isBipartite(G) ? cout Yes : cout No;return 0;
}
Python算法
class Graph():def __init__(self, V):self.V Vself.graph [[0 for column in range(V)]for row in range(V)]self.colorArr [-1 for i in range(self.V)]def isBipartiteUtil(self, src):queue []queue.append(src)while queue:u queue.pop()if self.graph[u][u] 1:return Falsefor v in range(self.V):if (self.graph[u][v] 1 andself.colorArr[v] -1):self.colorArr[v] 1 - self.colorArr[u]queue.append(v)elif (self.graph[u][v] 1 andself.colorArr[v] self.colorArr[u]):return Falsereturn Truedef isBipartite(self):self.colorArr [-1 for i in range(self.V)]for i in range(self.V):if self.colorArr[i] -1:if not self.isBipartiteUtil(i):return Falsereturn True
g Graph(4)
g.graph [[0, 1, 0, 1],[1, 0, 1, 0],[0, 1, 0, 1],[1, 0, 1, 0]]print (Yes if g.isBipartite() else No)参阅、更新计算思维 | 亚图跨际