问题标签 [isomorphism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
396 浏览

c++ - 在 vf2_sub_graph_iso 中使用属性映射进行等效

我正在使用boost库编写用于图挖掘的代码,并且我想使用该vf2_sub_graph_iso函数,如果存在图子图同构,则通常vf2_subgraph_iso返回,否则返回,但在我的情况下,我想让它仅在图完全相同时返回(结构和标签),在官方文档中提到:和谓词用于测试边和顶点是否等价。truefalsetrueEdgeEquivalencePredicateVertexEquivalencePredicate

这是图形文件:3test.txt,这是我的代码的一部分:

如何在my_callback我的案例中使用属性映射来实现功能等效?

更新

这是一个简单的图形文件,仅包含 2 个图形:

这些图具有相同的结构但不同的标签,因此此代码必须返回 false 而不是 true:

更新2

我没有在问题中提到,即使没有 id(在不同的图中),顶点也可以相同的小先例示例。

0 投票
0 回答
393 浏览

javascript - 同构javascript有什么缺点吗?

随着 Javascript 不断扩展和覆盖 Web 开发中的大部分层,Isomorphic JS(编写可以在客户端或服务器端运行的软件)正在成长为 Web 应用程序的新范例。

好处是显而易见的,但服务器端渲染是迄今为止同构的关键特性之一。

我没怎么玩过它,想把它应用到生产项目中。

所以,问题是:Node 是否成熟到足以为大型项目渲染服务器端?你有没有发现任何陷阱?可维护性如何?

0 投票
3 回答
1070 浏览

prolog - Prolog 同构图

试图在这里解决同构图问题。

任务信息:

  • 确定 2 个无向图是否同构。
  • 没有孤立的顶点。
  • 顶点数小于30
  • 图的边缘作为谓词给出,即

    /li>

我正在尝试使用以下方法:

  1. 对于每对边(即图 1 和图 2 中的每条边)
  2. 尝试绑定2条边的顶点
    • 如果顶点绑定是不可能的(即已经存在与其中一个顶点的另一个绑定),则回溯并尝试另一对边。
    • 否则添加绑定并继续处理其余的图(即从每个图中删除一条边并再次应用程序)。

除非两个图都是空的(意味着所有顶点都从一个图绑定到另一个图),否则程序会重复,这意味着成功。否则程序应该总是失败(即没有其他可用的绑定组合等)

我的代码似乎可以工作,但仅适用于小图(猜测是因为它尝试了所有对:))。

因此,如果有人知道如何优化代码(我相信可以插入几个剪辑并且try_bind可以以更好的方式编写)或者可以提前告知更好的方法。

用于检查非同构的 Ps 我知道我们可以检查不变量等。现在这并不重要。

代码:

0 投票
1 回答
4163 浏览

javascript - 在渲染服务器端之前获取数据

现在我正在发现Este.js,但我对同构应用程序有一点问题。我不明白如何在使用 renderToString() 渲染服务器端之前进行 api 调用。

一种解决方案是使用 React Router 在路由器级别进行所有数据获取。根据顶层路由,我可以预测需要哪些数据,进行 api 调用,然后调用 React.renderToString。

太好了,但我仍然必须在组件级别和路由器级别声明数据依赖关系。我最终写了两次相同的代码,我不相信这是最好的方法。

编辑:好的,现在我可以做一些我想做的事。使用 React-Router 和这个链接我已经能够做到以下几点:

给出这个全局应用程序状态,我想在指向 /todos 时预取 todos

初始状态.js

todos.react.js

在 todo 组件中,我声明了一个静态函数 fetchData。因为我想在我的 appState 中检索正确的密钥,所以我将 'list' 作为参数传递。感觉很脏。

动作.js

Api 调用之类的东西,我传递了承诺的关键 - 感觉很hacky

渲染.js

如您所见,我将创建一个函数来使用更新后的 todoList 更新 appState。

这一切都可以吗?我想得到一些反馈,因为我觉得我正走在一条黑暗的道路上:(。

0 投票
1 回答
1266 浏览

python - 与networkx的蛮力图同构

我正在尝试编写一种蛮力方法来检查两个图是否同构。我正在使用类 networkx 但我不想使用内置函数进行同构。
我知道我必须检查图形的所有节点排列,但我不知道该怎么做。那么我将如何排列 networkx 图中的节点呢?

0 投票
1 回答
681 浏览

python - 生成保留给定分区的排列列表(上下文:图同构)

我正在开发一个 python 程序,该程序使用蛮力方法测试两个给定的 networkx 图 G 和 H 的同构。每个图中的每个节点都被分配了一个标签和颜色属性,程序应该测试标签是固定的图 G 和标签可以变化的图 H 之间所有可能的双射。此外,我只需要检查双射,以确保对于图 G 中的给定节点颜色“i”映射到 H 中也具有颜色“i”的节点。为此,我创建了一个从 nx.Graph 继承所有方法/属性的类,并编写了我自己的几个方法。

到目前为止,我所做的是遍历这两个图,并创建了一个字典,它为 G 中的每个节点提供了可能的有效映射到 H。

例如,对于图 G == 1-2-3,着色将是: color_g = {1: 1, 2: 2, 3:1} 因为 '1' 和 '3' 具有相同的度数,而 2 具有不同的度数程度。

如果图 H == 2-1-3 那么 color_h = {2:1, 1:2, 3:1}

当我运行 group_by_color 函数来给出从 G 到 H 的可能映射时,我会得到以下字典

地图 = {1: [2, 3], 2: [1], 3:[2, 3]}

这意味着由于 G 中的颜色分区节点“1”可以映射到 H 中的“2”或“3”,G 中的“2”只能映射到 H 中的“1”,依此类推.

这是问题所在: 我正在努力生成从 G 到 H 的所有有效排列的列表,以保留由着色给出的分区,并且正在努力思考如何去做。我很清楚 python 的排列函数,并且在以前版本的蛮力方法中我没有考虑颜色,这意味着排列列表要大得多(并且运行时间要慢得多),但也可以实现更轻松。现在我想通过只考虑根据给定颜色可能的排列来加快速度。

问题:如何获取我的地图字典,并使用它来生成保色/保色的双射函数(德语:'farbe-erhaltend')?或者你会建议一种不同的方法吗?

其他一些事实:

两个图中的节点都是连续标记的,并且我使用的“颜色”是数字,因为这些图可以变得任意大。

我会很感激任何帮助,ItsAnApe

0 投票
0 回答
110 浏览

graph - 什么是节点不变量以及如何在我的程序检查图同构时使用它们来“修剪搜索树”?

对于一个项目,我正在编写一个与 networkx 一起使用的 python 程序来创建一个 NAUTY 风格的同构检查程序。我的程序基于对 Nauty 的介绍,可在此处找到,其工作原理如下:

取两张图 G 和 H,并根据节点的度数为节点着色。运行颜色细化算法,该算法根据颜色类中每个节点的邻居来细化图的着色。这对 (G', H') 成为我的搜索树的“根”,我将在其上使用 DFS 算法。接下来,我个性化 G' 中的一个节点,该节点属于具有多个元素的最小颜色类,并使用分支方法生成新的树对 (G'', H''), (G'' , H'''), ... (G'', H^(k)) (k 取决于颜色类的大小,例如如果在 g 中为颜色类 red: [1,2,3]是 G 中的红色节点,[5,6,7] 是 H 中的红色节点,那么我必须为 1:5、1:6、1:7 对的搜索树创建一个分支,然后打开稍后在我的搜索树中访问的新分支)。还有问题!我的树变得太大、太快——这是因为我没有使用上述链接的“节点不变量和修剪”部分中描述的节点不变量。

有人可以解释一些我可以使用的节点不变量的例子吗?在 StackExchange 上,我发现这里没有多大帮助。我假设并使用我的节点颜色是节点不变量的事实,但对于强规则图,这并不总是给我带来太多。有任何想法吗?

0 投票
0 回答
100 浏览

isomorphism - 实现子图到子图同构

有没有办法获得图 A 的最大子图,它与 B 的子图同构?我只找到了整个图 A 到子图 B 的同构的几种实现。我可以生成 A 的所有子图并获得 B 的子同构。但是 A 的子图的数量是巨大的。必须有一种更有效的方法来获得最大的子图到子图的同构。

0 投票
0 回答
265 浏览

java - Java 中的图单态算法(VF2/歧义术语)

在 Java 中寻找 VF2 的实现,它可以确定有向无环图 G1 是否同构于有向图 G2 的子图(不一定是诱导子图)。我相信在图同构问题的背景下,正确的术语是单态。任何算法还需要返回创建单态的顶点之间的映射。

正式地让 H = (VH, EH) 和 G = (V, E) 是有向图。是否存在函数 f : VH → V 使得如果 (u, v) ∈ EH, 那么 (f(u), f(v)) ∈ E。

如果它在java中不存在,c++中的VFLib会做我需要的。(我坚信它应该,但是术语让我陷入了一个循环,我希望在重新做我在 C++ 中所做的一切之前真正理解他们在说什么的人得到确认。)

有许多关于类似问题的建议,特别是 S-Space https://github.com/fozziethebeat/S-Space 但是 S-Space 仅指图同构而不是子图同构/单态。尝试在 https://github.com/fozziethebeat/S-Space/blob/master/src/main/java/edu/ucla/sspace/graph/isomorphism/VF2State.java阅读代码发现以下行:

这似乎表明它仅适用于图同构(因为具有不同数量节点的图将被拒绝)。但我距离真正感受代码还有很长的路要走。

除了 VFLib 和 networkx(python 并且不支持单态)之外,我无法判断给定的实现支持三个 VF2 选项(同构、子图同构、单态)中的哪一个。

任何帮助将不胜感激,谢谢

0 投票
2 回答
386 浏览

database - GraphX 是否支持子图查询?

我已经使用 GraphX API 加载了一个大图和一个小图(这将是我的查询),我想检查大图是否包含查询图。我在网上搜索了关于子图/图查询使用 GraphX,我找不到任何关于此的信息。GraphX 支持这个吗?如果是,有谁知道它如何处理子图同构问题:它是否使用某种索引?