Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 图/格简化_Algorithm_Data Structures_Graph_Graph Theory - Fatal编程技术网

Algorithm 图/格简化

Algorithm 图/格简化,algorithm,data-structures,graph,graph-theory,Algorithm,Data Structures,Graph,Graph Theory,我正在研究图切割算法的数据结构。问题是在最短路径上进行不同的切割。我创建的数据结构的属性我不确定 输入是最短路径的有向图,它是有界格,具有最小和最大元素的偏序集 将节点N的下一个节点N(N)定义为一组a

我正在研究图切割算法的数据结构。问题是在最短路径上进行不同的切割。我创建的数据结构的属性我不确定

输入是最短路径的有向图,它是有界格,具有最小和最大元素的偏序集

将节点N的下一个节点N(N)定义为一组a 很容易对节点集L、N(L)、N(N(L))、…的列表进行不同的切割。。。其中,对于每对相邻的集合A,N(A)=B认为不存在分区:

A = A_1 union A_2
B = B_1 union B_2
with B_i = N(A_i), A_i = P(B_i) for i=1,2.
使用此属性创建具有映射的新晶格:

  • 子格到一个节点
  • 如果找到上分区,则创建边(分区基数)
简单来说,晶格->晶格映射的算法为:

A = {minimum node}
new_node = [A]
1:
while A, N(A) don't have partitions
  append N(A) to new_node
  A = N(A)
for each partition $B_i$
  last_new_node = new_node
  create new_node = [B_i]
  create edge last_new_node to new_node
  go to 1
At the end fix maximum node in new lattice if needed
该算法可以在新格上重复调用。我担心:

  • 有保证到达一个节点晶格吗
  • 是否有达到一个节点晶格的迭代次数的度量?我认为边界是输入图形的直径
我很感激链接到任何类似的数据结构

Tnx

背景:

我有一个想法,在我正在研究的东西中使用最大流量网络阻断问题。我在考虑顶点阻断版本,在这个版本中,给定数量的顶点可以从网络中移除,以最小化最大流量。我所研究的网络是非常规则的平面有向图(平面分成六边形,每个顶点连接到6个顶点)。我只想切断(阻断)从
source
sink
的最短路径。为了实现这一点,我使用了有向图的简化,如果边
(a,b)
位于从
a
sink
的最短路径上,则它位于简化图中。若边权为正,则简化有向图为格。这就是我所说的“最短路径的有向图”

我想要有好的顶点切割(平行,传播,…),在(非常结构化的)晶格上更容易

本机切割是“波浪”,例如,一个好的切割
C
也会产生
N(C)
,这很好。因此,我尝试使用上述操作简化晶格。我试图描述两个顶点子集,这两个子集对切割很有意思,并用于映射: -波-并行节点集。如果C是一个波,那么
N(C)
是另一个波。 -条纹-与其他条纹不相交的一系列波<代码>C,N(C),N(N(C))

映射将条纹从初始晶格映射到新晶格的节点。若新晶格中的节点共享波,则它们是连接的。边缘的方向是从共享最后一个波的条纹到共享第一个波的条纹

因为映射会生成具有相同属性的新晶格,所以可以重复该过程,直到存在只有一个节点的晶格为止。这可以显示出来,因为每次迭代的晶格直径都较小,至少为1。这是因为最小节点
M
N(M)
位于同一条带中,这减小了晶格直径

现在,执行或搜索切割是递归任务,从只有一个节点的最后一个网格之前的网格开始,以阶梯方式在一个整波或相邻波上进行切割。对于剪切中的节点,获取其中映射的子晶格,并在该子晶格上进行剪切。在到达初始晶格之前,也会执行相同的操作

这种结构是基于晶格压缩的。我认为它可以用于动态晶格切割搜索

在我的例子中,由于其他一些项目限制,我没有使用它。我只用几行代码就很简单地解决了最初的问题,但我以前没有意识到它可以像这样完成:-)

是否可以保证达到一个节点晶格

如果我正确理解您的伪代码,则不会:它将n节点线性顺序传递到n节点线性顺序

我会将您的代码描述为接受一个偏序,并找到一个具有合理“忠实”嵌入的序列


如果你只是对在平面图中寻找最大流/最小割感兴趣,那就有一个答案。

我开始对你的问题给予奖励,因为有很多tim eno的答案或评论。。。我不知道如何帮助你更多。你能定义“最短路径上的切割”吗。这是图中最短路径上的图割()吗?同样,这是什么意思“最短路径的有向图”?谢谢。串并联偏序与我研究的格非常相似。唯一的区别是我在(a1 | | a2 | | |…)+(b1 | | b2 | | |…)中没有所有的“连接”,这甚至没有什么区别,因为我映射了子晶格(a1 | | a2 | |…)+(b1 | | b2 | |…)+。。。进入节点。
  B1--C1--D1 ...
 / \ / \ / 
A   X   X  
 \ / \ / \ 
  B2--C2--D2

Waves: {A}, {B1,B2}, {C1,C2}, {D1,D2}
Stripe is made of these 4 waves.