问题标签 [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.
c++ - 在 vf2_sub_graph_iso 中使用属性映射进行等效
我正在使用boost库编写用于图挖掘的代码,并且我想使用该vf2_sub_graph_iso
函数,如果存在图子图同构,则通常vf2_subgraph_iso
返回,否则返回,但在我的情况下,我想让它仅在图完全相同时返回(结构和标签),在官方文档中提到:和谓词用于测试边和顶点是否等价。true
false
true
EdgeEquivalencePredicate
VertexEquivalencePredicate
这是图形文件:3test.txt,这是我的代码的一部分:
如何在my_callback
我的案例中使用属性映射来实现功能等效?
更新
这是一个简单的图形文件,仅包含 2 个图形:
这些图具有相同的结构但不同的标签,因此此代码必须返回 false 而不是 true:
更新2
我没有在问题中提到,即使没有 id(在不同的图中),顶点也可以相同的小先例示例。
javascript - 同构javascript有什么缺点吗?
随着 Javascript 不断扩展和覆盖 Web 开发中的大部分层,Isomorphic JS(编写可以在客户端或服务器端运行的软件)正在成长为 Web 应用程序的新范例。
好处是显而易见的,但服务器端渲染是迄今为止同构的关键特性之一。
我没怎么玩过它,想把它应用到生产项目中。
所以,问题是:Node 是否成熟到足以为大型项目渲染服务器端?你有没有发现任何陷阱?可维护性如何?
prolog - Prolog 同构图
试图在这里解决同构图问题。
任务信息:
- 确定 2 个无向图是否同构。
- 没有孤立的顶点。
- 顶点数小于30
图的边缘作为谓词给出,即
/li>
我正在尝试使用以下方法:
- 对于每对边(即图 1 和图 2 中的每条边)
- 尝试绑定2条边的顶点
- 如果顶点绑定是不可能的(即已经存在与其中一个顶点的另一个绑定),则回溯并尝试另一对边。
- 否则添加绑定并继续处理其余的图(即从每个图中删除一条边并再次应用程序)。
除非两个图都是空的(意味着所有顶点都从一个图绑定到另一个图),否则程序会重复,这意味着成功。否则程序应该总是失败(即没有其他可用的绑定组合等)
我的代码似乎可以工作,但仅适用于小图(猜测是因为它尝试了所有对:))。
因此,如果有人知道如何优化代码(我相信可以插入几个剪辑并且try_bind
可以以更好的方式编写)或者可以提前告知更好的方法。
用于检查非同构的 Ps 我知道我们可以检查不变量等。现在这并不重要。
代码:
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。
这一切都可以吗?我想得到一些反馈,因为我觉得我正走在一条黑暗的道路上:(。
python - 与networkx的蛮力图同构
我正在尝试编写一种蛮力方法来检查两个图是否同构。我正在使用类 networkx 但我不想使用内置函数进行同构。
我知道我必须检查图形的所有节点排列,但我不知道该怎么做。那么我将如何排列 networkx 图中的节点呢?
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
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 上,我发现这里没有多大帮助。我假设并使用我的节点颜色是节点不变量的事实,但对于强规则图,这并不总是给我带来太多。有任何想法吗?
isomorphism - 实现子图到子图同构
有没有办法获得图 A 的最大子图,它与 B 的子图同构?我只找到了整个图 A 到子图 B 的同构的几种实现。我可以生成 A 的所有子图并获得 B 的子同构。但是 A 的子图的数量是巨大的。必须有一种更有效的方法来获得最大的子图到子图的同构。
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 选项(同构、子图同构、单态)中的哪一个。
任何帮助将不胜感激,谢谢
database - GraphX 是否支持子图查询?
我已经使用 GraphX API 加载了一个大图和一个小图(这将是我的查询),我想检查大图是否包含查询图。我在网上搜索了关于子图/图查询使用 GraphX,我找不到任何关于此的信息。GraphX 支持这个吗?如果是,有谁知道它如何处理子图同构问题:它是否使用某种索引?