Python种群邻接矩阵彗星风筝进化图算法

53 篇文章 0 订阅
48 篇文章 0 订阅

🎯要点

🎯生成种群进化时间和概率数据 | 🎯力导向算法绘图 | 🎯彗星风筝图算法 | 🎯绕行图算法 | 🎯广义星形图算法 | 🎯耦合星图算法 | 🎯启发式基因算法

📜进化图用例

📜Python和C++骨髓细胞进化解析数学模型

🍪语言内容分比

在这里插入图片描述
在这里插入图片描述

🍇Python连通无向图

无向图的特征:

  • 无向图中的边本质上是双向的。
  • 在无向图中,不存在“父”或“子”顶点的概念,因为没有到边的方向。
  • 无向图可能包含环,环是将顶点连接到自身的边。
  • 每个顶点的度数与与其连接的边的总数相同。
1
0
3
4
2

无向图的应用:

  • 社交网络:无向图用于建模社交网络,其中人们由节点表示,他们之间的连接由边表示。
  • 交通流优化:交通流优化使用无向图来模拟道路网络上的车辆流量。图的顶点表示交叉路口或路段,边表示它们之间的连接。该图可用于优化交通流量和规划交通基础设施。
  • 网站分析:无向图可用于分析互联网上网页之间的链接。每个网页由一个顶点表示,网页之间的每个链接由一条边表示。

给定一个无向图,任务是逐行打印所有连接的分量。

1
0
2
3
4

输出

0 1 2
3 4

算法是:

  • 将所有顶点初始化为未访问过。
  • 对每个顶点 v 执行以下操作:
    • 如果之前没有访问过v,则调用深度优先遍历。并打印换行符以在新行中打印每个分量
      • 将 v 标记为已访问并打印 v。
      • 对于v的每一个相邻的u,如果u没有被访问过,则递归调用深度优先遍历。

代码实现:

class Graph:

	def __init__(self, V):
		self.V = V
		self.adj = [[] for i in range(V)]

	def DFSUtil(self, temp, v, visited):
		visited[v] = True
		temp.append(v)
		for i in self.adj[v]:
			if visited[i] == False:
				temp = self.DFSUtil(temp, i, visited)
		return temp

	def addEdge(self, v, w):
		self.adj[v].append(w)
		self.adj[w].append(v)

	def connectedComponents(self):
		visited = []
		cc = []
		for i in range(self.V):
			visited.append(False)
		for v in range(self.V):
			if visited[v] == False:
				temp = []
				cc.append(self.DFSUtil(temp, v, visited))
		return cc

if __name__ == "__main__":

	g = Graph(5)
	g.addEdge(1, 0)
	g.addEdge(2, 1)
	g.addEdge(3, 4)
	cc = g.connectedComponents()
	print("Following are connected components")
	print(cc)

输出:

Following are connected components 
0 1 2 
3 4 

使用不相交集并集算法:

  • 声明一个大小为 V 的数组 arr[],其中 V 是节点总数。
  • 对于数组 arr[] 的每个索引 i,该值表示第 i 个顶点的父节点是谁。
  • 将每个节点初始化为其自身的父节点,然后在将它们添加在一起时相应地更改其父节点。
  • 从0到V遍历节点:
    • 对于作为其父节点的每个节点,启动该算法。
    • 打印该不相交集合的节点,因为它们属于一个分量。
import collections

class ConnectedComponents:
def merge(self, parent, x):
	if parent[x] == x:
	return x
	return self.merge(parent, parent[x])

def connectedComponents(self, n, edges):

	parent = [i for i in range(n)]
	for x in edges:
	parent[self.merge(parent, x[0])] = self.merge(parent, x[1])
	ans = 0

	for i in range(n):
	if parent[i] == i:
		ans += 1

	for i in range(n):
	parent[i] = self.merge(parent, parent[i])
	m = collections.defaultdict(list)
	for i in range(n):
	m[parent[i]].append(i)
	for it in m.items():
	l = it[1]
	print(" ".join([str(x) for x in l]))
	
	return ans

if __name__ == "__main__":
n = 5
edges = [[0, 1], [2, 1], [3, 4]]
print("Following are connected components:")
ans = ConnectedComponents().connectedComponents(n, edges)

输出:

Following are connected components:
0 1 2 
3 4 

👉参阅、更新:计算思维 | 亚图跨际

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值