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

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

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

顶级模块代数。图表定义核心数据类型图表,它是四个图构造原语的深度嵌入空的,顶点,覆盖连接。要表示非空图形,请参阅代数。图表。非空.更多传统的图形表示可以在代数。图表。相邻地图代数。图表。关系.

中定义的类型类代数。图表。等级代数。图表。高级种类。等级可以用于多态图的构造和操作。另请参见代数。图表。折叠它定义了代数图的Boehm-Berarducci编码,并提供了额外的多态图操作的灵活性。

这是一个实验性的库,在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.9.1 && <0.11),容器(>=0.5.5.1 && <0.8),深度seq(>=1.3.0.1 && <1.5),mtl公司(>=2.1 && <2.3),半群(>=0.18.3 && <0.18.4)[细节]
许可证 麻省理工学院
版权 安德烈·莫霍夫,2016-2018
作者 安德烈·莫霍夫<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
已上传 通过雪豹2018年9月11日23:59:46Z
分配 架构(architecture):0.7,LTSHaskell公司:0.7,NixOS:0.7,堆叠:0.7
反向依赖关系 21直接,59间接[细节]
下载 总计26147(过去30天内为234)
额定值 2.75(票数:7)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
上次成功报告时间:2018-09-12[所有1个报告]

代数图自述文件-0.2

[返回包描述]

代数图

黑客版本 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中的图提供了一个方便、安全和强大的接口,并允许应用等式推理来证明图形算法的正确性。

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

图书馆有多快?

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

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

博客文章

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