代数图:代数图构造和转换库

[代数,算法,数据结构,,图书馆,麻省理工学院][建议标签]

阿尔加是用于代数构造和Haskell中的图形操作。请参见这篇论文对于图书馆背后的动机、基础理论和实施细节。

顶级模块代数。图表定义的主要数据类型代数图 图表,以及相关联的算法。对于类型安全表示和操纵非空代数图,请参阅代数。图表。非空.此外,带边标签的代数图在中实现代数。图表。贴标签于.

该库还提供了传统的图形数据结构,例如代数。图表。相邻地图以及它的各种风格:专门用于具有顶点类型国际(代数。图表。相邻IntMap),非空邻接映射(代数。图表。非空。相邻地图),和带有边缘标签的相邻地图(代数。图表。贴标签于。相邻地图).代数图和邻接图的大部分API可用通过可折叠的-相似类型类代数。图表。ToGraph(ToGraph).

中定义的类型类代数。图表。等级代数。图表。高级种类。等级可以用于图的多态构造和操作。

这是一个实验性的库,在1.0.0版本之前,该API将保持不稳定。请考虑为正在进行的关于图书馆API的讨论.


[跳到自述]

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

  • 没有候选人
版本[RSS(RSS)] 0.0.1,0.0.2,0.0.3,0.0.4,0.0.5,0.1.0,0.1.1,0.1.1.1,0.2,0.3,0.4,0.5,0.6,0.6.1,0.7
更改日志 变化.md
依赖关系 阵列(>=0.4 && <0.6),基础(>=4.7 && <5),容器(>=0.5.5.1 && <0.8),深度seq(>=1.3.0.1 && <1.5),mtl公司(>=2.1 && <2.3),变压器(>=0.4 && <0.6)[细节]
许可证 麻省理工学院
版权 安德烈·莫霍夫,2016-2019
作者 安德烈·莫霍夫<andrey.mokhov@gmail.com>,github:@雪豹
维护人员 安德烈·莫霍夫<andrey.mokhov@gmail.com>,github:@雪豹,亚历山大·梅因<alexandre@moine.me>,github:@nobrakal
类别 代数,算法,数据结构,
主页 https://github.com/snowleopar/alga
源回购 头部:git克隆https://github.com/snowleopar/alga.git
已上传 通过雪豹2020-02-02T23:48:46Z
分配 架构(architecture):0.7,LTSHaskell公司:0.7,NixOS:0.7,堆叠:0.7
反向依赖关系 21直接,59间接[细节]
下载 总计26147(过去30天内为234)
额定值 2.75(票数:7)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
上次成功报告时间:2020-02-03[所有1个报告]

代数图自述-0.5

[返回包描述]

代数图

黑客版本 Linux和OS X状态 Windows状态

阿尔加是Haskell中用于图的代数构造和操作的库。请参见哈斯克尔研讨会论文相应的谈话为了动机在图书馆的背后,有着底层的理论和实现细节。还有一个Haskell交换话题,和a辅导的亚历山大·莫恩(Alexandre Moine)。

主要想法

考虑在顶级模块中定义的以下数据类型代数。图表库的:

数据图a=空|顶点a|覆盖(图a)

我们可以根据对为构造函数提供以下语义(V、E)图形的顶点边缘:

  • 清空构造空图(∅, ∅).
  • 顶点x构造包含单个顶点的图,即。({x},∅).
  • 覆盖x y覆盖图(Vx,Ex)(Vy,Ey)建造(VxáVy,ExáEy).
  • 连接x y连接图形(Vx,Ex)(Vy,Ey)建造(VxŞVy,ExŞEyŞVx×Vy).

或者,我们可以通过定义以下内容为上述图构造原语提供代数语义类型类并为其实例指定一组规则(参见模块代数。图表。等级):

类图g,其中类型Vertex g空::g顶点::顶点g->g覆盖::g->g->g连接::g->g->g

类型类的定律与半环,所以我们使用+*作为方便快捷方式覆盖连接,分别为:

  • (+,空的)是幂等交换幺半群。
  • (*,空的)是一个幺半群。
  • *分布在+,即:x*(y+z)==x*y+x*z(x+y)*z==x*z+y*z.
  • *可以分解为:x*y*z==x*y+x*z+y*z.

这个代数结构对应于无标记有向图:每个表达式表示一个图形,每个图形可以用表达式表示。可以通过修改上述法律。代数图为Haskell中的图提供了一个方便、安全和强大的接口,并允许应用等式推理来证明图形算法的正确性。

代表非空图,我们可以放弃清空构造函数——参见模块代数。图表。非空.

代表边标记图,我们可以切换到以下数据类型,如在我的Haskell eXchange 2018谈话:

数据图e a=空|顶点a|连接e(图ea)

在这里e(电子)是边缘标签的类型。如果e(电子)是单半群(<+>,零)然后可以恢复图形覆盖作为连接零、和<+>对应于平行合成边缘标签的数量。

图书馆有多快?

Alga可以在几秒钟内处理由数百万个顶点和数十亿条边组成的图形,速度很快对于许多应用程序来说足够了。我们相信有很大的潜力可以提高库的性能,并且这是我们的首要任务之一。如果您在使用库时遇到性能问题,请告诉我们。

可以找到一些初步基准在这里.

博客帖子

图书馆的发展已记录在一系列博客帖子中:

其他语言的代数图

请参阅中的实现草案阿格达斯卡拉.