查找最长簇的算法。 (Python 理想情况下,可能是 Matlab)
Algorithm to find the longest cluster. (Python ideally, possibly Matlab)
我正在试验一种叫做“键渗流理论”的东西实际上你有一些 n 乘 n 的格子网格,然后(随机地)以某种概率 p 你保留或删除一条边。这是一个例子:
这是我的代码:
我有 2 个问题要问这个很棒的社区:
- 如何让我插入的网格出现在所有整数值上,目前它只显示在 5 的倍数上。(灰色细线)
- 我希望有一种算法可以提供所谓的“最长簇” 一个簇是边的连接图(粗黑线),例如在左上角我们有一个 6 簇(颠倒的 f shape),一簇2(小箭头),一簇4(正方形)和一簇3(倒L)最长的就是最长的.
非常感谢任何帮助。如果我提出这个问题很糟糕,请告诉我,或者是否需要任何澄清。
def graph_contruction(n,p):
for i in range(0,n):
for t in range(0,n):
if coin(p):
plt.hlines(i,t,t+1)
if coin(p):
plt.vlines(i,t,t+1)
plt.title('A '+str(n)+ ' by ' +str(n) + ' grid with probability ' +str(p))
plt.show()
你的第一个问题可以简单地通过启用小刻度来解决:
plt.figure(figsize=(8,8))
plt.minorticks_on()
plt.grid(True, which="both")
graph_contruction(25, 0.5)
给你一些思考问题的方法2):
步骤 1) 构建一个函数来检查每个点的关联点和 return 这些点的集合。对于 (0,0) 什么都不是。但是对于 (0,1) 这个函数会 return {(0,1), (1,0), (1,1), (2,0)} - a.k.a 一组关联点,轴心点 (0,1) 也在其中。
步骤 2) 在第一步中构建函数后,遍历所有点以获得每个点的一组关联点。
步骤 3) 现在您可以加入有共同点的集合。见下文:
set_1 = {(1,0), (1,1), (2,0)}
set_2 = {(1,2), (1,1), (2,1), (1,0)}
if any(x in set_1 for x in set_2):
set_1.update(set_2)
所以我只是试图构建您的想法,而不是为您提供确切的代码。您可能希望使用理解来保持集合比较 pythonic。
如果您真的很苦恼,我可以找到实现类似功能的代码。我今天一直在寻找它,但找不到它。如果你真的放弃了,它会解决这个问题,但这是一个有趣的挑战,所以试一试吧。
我正在试验一种叫做“键渗流理论”的东西实际上你有一些 n 乘 n 的格子网格,然后(随机地)以某种概率 p 你保留或删除一条边。这是一个例子:
这是我的代码:
我有 2 个问题要问这个很棒的社区:
- 如何让我插入的网格出现在所有整数值上,目前它只显示在 5 的倍数上。(灰色细线)
- 我希望有一种算法可以提供所谓的“最长簇” 一个簇是边的连接图(粗黑线),例如在左上角我们有一个 6 簇(颠倒的 f shape),一簇2(小箭头),一簇4(正方形)和一簇3(倒L)最长的就是最长的.
非常感谢任何帮助。如果我提出这个问题很糟糕,请告诉我,或者是否需要任何澄清。
def graph_contruction(n,p):
for i in range(0,n):
for t in range(0,n):
if coin(p):
plt.hlines(i,t,t+1)
if coin(p):
plt.vlines(i,t,t+1)
plt.title('A '+str(n)+ ' by ' +str(n) + ' grid with probability ' +str(p))
plt.show()
你的第一个问题可以简单地通过启用小刻度来解决:
plt.figure(figsize=(8,8))
plt.minorticks_on()
plt.grid(True, which="both")
graph_contruction(25, 0.5)
给你一些思考问题的方法2):
步骤 1) 构建一个函数来检查每个点的关联点和 return 这些点的集合。对于 (0,0) 什么都不是。但是对于 (0,1) 这个函数会 return {(0,1), (1,0), (1,1), (2,0)} - a.k.a 一组关联点,轴心点 (0,1) 也在其中。
步骤 2) 在第一步中构建函数后,遍历所有点以获得每个点的一组关联点。
步骤 3) 现在您可以加入有共同点的集合。见下文:
set_1 = {(1,0), (1,1), (2,0)}
set_2 = {(1,2), (1,1), (2,1), (1,0)}
if any(x in set_1 for x in set_2):
set_1.update(set_2)
所以我只是试图构建您的想法,而不是为您提供确切的代码。您可能希望使用理解来保持集合比较 pythonic。
如果您真的很苦恼,我可以找到实现类似功能的代码。我今天一直在寻找它,但找不到它。如果你真的放弃了,它会解决这个问题,但这是一个有趣的挑战,所以试一试吧。