问题标签 [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 回答
246 浏览

haskell - 使用镜头的 3 种或更多类型之间的同构

受到关于 ADT 之间多态函数的问题的启发,我试图在多个(不仅仅是 2 个)类型之间创建同构,这样每次我需要一个同构但不相同的类型时,我都可以在我的代码中撒上一些convert.

假设我有 3 个 ADT:

使用lensI 可以实现 AB 和 CD 以及 CD 和 EF 之间的 2 个同构:

转换AE很容易:A^.convert :: EF. 转换DB也很容易:D^.from convert :: AB. 但是如果我想将 from 转换CEvia A,我必须为每个中间转换注释类型:

我理解为什么编译器不能推断中间类型。可能有几个同构可以通过它们从CE。但是我可以简化我的代码,这样我就不用在任何地方手动注释类型了吗?

我可以编写另一个实例来直接在CDand之间进行转换EF,但是如果我有 3 种以上的类型怎么办?如果我有 5 个同构类型,我将不得不指定 10 个实例,因为同构对象之间的 iso 数量是完整图中的边数,它是一个三角形数。我宁愿指定n-1实例,并权衡我写更多convertfrom convert.

Iso有没有一种惯用的方法来使用from建立多种类型之间的同构,lens这样样板文件的数量最少,而且我不必对所有内容进行类型注释?如果我必须为此使用 TemplateHaskell,我该怎么做?

动机是,在我的工作中,我有许多非常复杂但愚蠢的类型,其中() -> (() -> ()) -> X((), X)同构于X. 我必须手动包装和展开所有内容,并且我想要一些多态方法来将复杂类型减少为更简单的同构类型。

0 投票
0 回答
164 浏览

haskell - 我如何概括同构?

所以我只是想处理同构并且可以使用手。

我正在编写一个文本编辑器,我想根据任务以两种不同的方式考虑光标的位置,或者作为(行,列)的元组,或者作为文本对象的单个整数偏移量。

我正在使用镜头构建整个东西,所以这似乎是了解 Isos 的好地方。

最初我有一个Buffer对象:

但现在游标可能是 (row, col) 元组,我已将其更改为:

由于在缓冲区的上下文中,我有一个从Buffer Intto的同构Buffer (Int, Int)(这种限制是因为我需要文本和偏移量才能进行转换),我希望我的所有函数都采用缓冲区操作,并且'只是工作'。

现在我被困在如何在我的定义中使其具有多态性,

我可以:

但是当然我实际上根本无法使用光标,因为它完全没有类型。

我能找到的唯一大致相关的库是这个type-iso库,它看起来不是很流行。那个,我找不到任何博客文章的想法让我想知道这是否是人们做的事情?

如果这是一个很好的库,我想我需要为 Isomorphic 编写一个实例,如果我为Injective编写每个实例,我似乎可以免费获得这个,但我找不到任何文档或示例我很容易理解,所以我想检查这是否是惯用的方式。如果这是正确的,我是使用同构约束还是内射约束?

编辑:我稍微摆弄了一下,似乎我确实可以实现 Injective 并免费获得 Iso,但同样,这个库似乎并不受欢迎,所以我正在寻找惯用的方法。

最后,对于我的镜头isos,我必须写:

还是有更好/更简单的方法?这些可以从我的实例中得出吗?

有谁知道一些好的镜头同构示例或教程?谷歌没有太多帮助:/

谢谢您的帮助!只是想检查一下,以确保我做的一切都是惯用的。

0 投票
0 回答
222 浏览

graph - 接口 Julia 和 nauty

我想找到一个(二分)图的自同构群(它是一个使用 LightGraphs 包创建的对象),为此我想在 Julia 中调用 nauty。可能吗?如果是,你会怎么做?

我阅读了文档,似乎 Julia 有一个 C 接口...... http://docs.julialang.org/en/release-0.5/manual/calling-c-and-fortran-code/

谢谢你的帮助。

0 投票
1 回答
117 浏览

haskell - 两种流类型之间的转换

我有一个关于在 Haskell 中的两种数据类型之间转换的问题。

考虑以下两种数据类型

Q2:写

在流的两种表示之间转换

我遇到的第一件事是 Stream 数据类型,我们可以看到这是一个递归数据类型,但没有基本情况,这让我想知道这是否是无限的,以及如何创建流数据类型。此外,Stream2 的构造函数以记录语法给出,其中字段之一也是 Stream2 类型。我知道有一个类似于 time where 的问题

但我不确定如何将这个问题的答案应用于我的特殊困惑。

0 投票
1 回答
760 浏览

algorithm - 检查两个图是否同构的复杂性?

计算复杂度 - (i) 给定两个图并检查图是否同构?(ii) 子图匹配。

0 投票
1 回答
2075 浏览

algorithm - Understanding Nauty algorithm

I am trying to understand the Nauty algorithm. Following this article: http://www.math.unl.edu/~aradcliffe1/Papers/Canonical.pdf
In this algorithm the vertices are distinguished based on their degree and the relative degree of a group corresponding to other groups(group action). In this way we get the groups as:

1379|2468|5
After this step, splitting is done as mentioned in this paper - page 7. One image from this article is: Search Tree

I am unable to understand how the splitting is done from 1379|2468|5 to 1|9|37|68|24|5 Why 1 and 9 went to different groups and 37 went to another group.

0 投票
1 回答
182 浏览

graph - 具有同构子图的两个图的图同构

假设我们有两个彼此同构的图(G 和 H)。我们也有这两个图的顶点之间的双射。现在我们为每个图添加一条边(G+e,H+e)。有什么简单的方法可以确定结果图是否仍然是同构的?并且还发现节点之间的bejections?我真的很感激任何帮助。

0 投票
0 回答
147 浏览

java - 这两个函数背后的逻辑 - Java

介绍

我们在这里谈谈同构。我有一个实现等态的类,它被称为ISO类。我有这个类来自代码战中 kata 的解决方案。同构的参考可以在这里看到。这个类有很多函数来表示等态的特征。起初,我可以理解类的一些功能背后的逻辑。但是,在某些时候,我被这两个功能卡住了。这给了我两个问题,这些问题可以在下面的部分中看到。

问题 1

问题 2

每个功能都给我一个问题。问题是我不理解 return 语句的内部工作。我知道语法,但我不知道它的逻辑。有人可以向我解释这两个问题的逻辑吗?

笔记

  1. 这里的逻辑术语与内部工作术语相同。
  2. 代码的完整结构如下所示。

完整代码

完整代码:ISO类的完整代码

0 投票
1 回答
650 浏览

python - 用于查找子图同构的 QuickSI 算法

我正在研究快速子图同构 (QuickSI) 算法,但在理解第 6 页、(2) 和 (3) 中描述的有关内部支持和平均内部支持计算的公式时遇到了问题。如果“v”代表顶点,“e”代表边,那么 f(v) 和 f(e) 是做什么的?如何从第 6 页获取表 2 的值?第 5 页中的定义 4 在帮助我理解方面并没有多大帮助。通过从查询图到数据图的同构映射,我理解从查询图中获取不同的组件,看看它们是否可以在数据图中找到。但是对于大图来说,这个计算时间似乎不太可行。

在这里可以找到原文: http ://www.cse.unsw.edu.au/~lxue/10papers/vldb08_haichuan.pdf

先感谢您!

0 投票
0 回答
177 浏览

graph-theory - Graph isomorphism checking using BFS

Is there any fast algorithm to check the isomorphism and find the mapping between two rooted undirected graphs by BFS? Since my two input graphs are rooted I am just assuming that BFS can find it out quicker if they are not isomorphic. Any help/clue is greatly appreciated. Thanks.