边标记图的代数数据类型
数据 图表电子商务来源 #
边标记图,其中类型变量e(电子)
代表边缘标签。例如,图表
布尔
一
与中定义的未标记图同构顶级模块代数。图表。图表,其中False(错误)
和真的
表示无标记边的缺失和存在。
(-<)::a->e->(a,e)中缀5 来源 #
方便的ternary-ish运算符的左侧部分x-<e>-y
对于创建带标签的边。
x-<e>-y==边缘
e x y(e x y)
(>-)::(a,e)->a->图表电子商务中缀5 来源 #
方便的ternary-ish运算符的右侧部分x-<e>-y
对于创建标记的边。
x-<e>-y==边缘
e x y(e x y)
边缘::单体e=>[(e,a,a)]->图表电子商务来源 #
从带标签的边列表构建图形。复杂性:O(左)时间、内存和大小,其中L(左)是的长度给定列表。
边[]==空的
边[(e,x,y)]==边缘
e x y(e x y)边缘==覆盖层
.地图
(\(e,x,y)->边缘
e x y)
图形折叠
折叠::b->(a->b)->(e->b->b->b)->图表e a->b来源 #
建筑物:: (对于所有人r.r->(a->r)->(e->r->r->r)->r)图表电子商务来源 #
构建一个图,给出三种图结构的解释基本体空的
,顶点
和连接
,按此顺序。请参见以下示例进一步澄清。
建筑物f==f空的
顶点
连接
建筑(\e _ _->e)==空的
建筑物(v _->v x)==顶点
x个建筑(\e v c->c l(折叠
e v c x)(折叠
e v c y))==连接
长x长建筑(\e v c->文件夹
(c)零
)电子(地图
v x))==顶点
X轴建筑(\e v c->折叠
电子伏(轻弹
.c)克)==转置
克折叠
e v c(建筑f)==f e v c
图上的关系
是SubgraphOf:: (等式e、,单体e、,订单a) =>图表e a->图表e a->布尔 来源 #
这个是的子图
函数接受两个图形并返回真的
如果第一个图形是子图第二个。复杂性:O(s+m*log(m))时间。请注意,边的数量米的图形可以是表达式大小的二次曲线秒.
是SubgraphOf空的
x==正确是SubgraphOf(顶点
x)空的
==错误是x的子图(覆盖
x y)==真是SubgraphOf(覆盖
x年)(连接
x y)==真是x y的子图==>x<=y
图形属性
大小::图表e a->国际 来源 #
这个大小图的叶数,即表达式的叶数包括空的
树叶。复杂性:O(s)个时间。
大小空的
== 1尺寸(顶点
x) ==1尺寸(覆盖
x y)==尺寸x+尺寸y尺寸(连接
x y)==尺寸x+尺寸y尺寸x>=1尺寸x>=顶点计数
x个
边缘列表:: (等式e、,单体e、,订单a) =>图表e a->[(e,a,a)]来源 #
图的边列表,根据成对连接的顶点(即边标签在排序时被忽略)。复杂性:O(n+m)时间和O(米)内存。
边缘列表空的
== []边缘列表(顶点
x) ==[]边缘列表(边缘
e x y)==如果e==零
然后是[]其他[(e,x,y)]
图形转换
移除顶点::等式a=>a->图表e a->图表电子商务来源 #
从给定图形中删除顶点。复杂性:O(s)个时间、内存和大小。
移除顶点x(顶点
x)==空的
删除顶点1(顶点
2) ==顶点
2移除顶点x(边缘
e x x)==空的
删除顶点1(边缘
e 1 2)==顶点
2删除顶点x。移除顶点x==移除顶点x
删除边缘:: (等式a、,等式e、,单体e) =>a->a->图表e a->图表电子商务来源 #
从给定图形中删除边。复杂性:O(s)个时间、内存和大小。
删除边缘x y(边缘
e x y)==顶点
[x,y]移除边缘x y。removeEdge x y==删除边缘x y移除边缘x y。移除顶点
x个==移除顶点
x个removeEdge 1 1(1*1*2*2)==1*2*2removeEdge 1 2(1*1*2*2)==1*1+2*2
替换顶点::等式a=>a->a->图表e a->图表电子商务来源 #
功能替换顶点
x年
替换顶点x个
带顶点年
在一个鉴于图表
.如果年
已经存在,x个
和年
将合并。复杂性:O(s)个时间、内存和大小。
替换顶点x x==id替换顶点x y(顶点
x)==顶点
年替换顶点x y==功能性维修计划
(\v->如果v==x,则y为v)
replaceEdge(替换边缘):: (等式e、,单体e、,订单a) =>e->a->a->图表e a->图表电子商务来源 #
替换给定图形中的边。如果它不存在,就会被创建。复杂性:O(对数(n))时间。
replaceEdge e x y z==覆盖
(移除边缘x y z)(边缘
e x y)replaceEdge e x y(边缘
f x y)==边缘
e x y公司边缘标签
x y(replaceEdge e x y z)==e
电子邮箱::(e->f)->图表e a->图表财务报表来源 #
通过对每个边标签应用函数来变换图形。复杂性:O(s)个时间、内存和大小。
功能小时
必须是同态关于标签e(电子)
.至少它必须保存零
和<+>
:
小时零
==零
高x<+>
h y==h(x<+>
年)
如果e(电子)
也是半环,那么小时
还必须保留乘法结构:
小时一
==一
高x<.>
h y==h(x<.>
年)
如果上述要求成立,那么实现将提供以下保证。
emap小时空的
==空的
emap小时(顶点
x)==顶点
x个emap小时(边缘
e x y)==边缘
(h e)x yemap小时(覆盖
x年)==覆盖
(电子邮件地址x)(电子邮件地址)电子地图h(连接
e x y)==连接
(电子邮件)(电子邮件)电子邮箱身份证件
==身份证件
电子邮件。emap h==emap(g.h)
诱导::(a->布尔) ->图表e a->图表电子商务来源 #
构造诱导子图通过移除不满足给定谓词的顶点。复杂性:O(s)个时间、内存和大小,假设谓词恒定时间。
诱导(常数
真)x==x诱导(常数
假)x==空的
诱导(/=x)==移除顶点
x个诱导p。诱导q==诱导(\x->px&&qx)是的子图
(诱导px)x==真
关系操作
反射闭合:: (订单a、,半环e) =>图表e a->图表电子商务来源 #
计算自反闭合下半环上的图的增加一个自循环重量一
到每个顶点。复杂性:O(n*log(n))时间。
反射闭合空的
==空的
反射闭合(顶点
x)==边缘
一
x x x反射闭包(边缘
e x x)==边缘
一
x x x反射闭合(边缘
e x y)==边缘
[(一
,x,x),(e,x,y)(一
,y,y)]反射性闭合。reflectiveClosure==reflective闭包
对称闭合::单体e=>图表e a->图表e a公司来源 #
计算对称闭包用自己的图覆盖它转置。复杂性:O((n+m)*log(n))时间。
对称闭合空的
==空的
对称闭合(顶点
x)==顶点
x个对称闭合(边缘
e x y)==边缘
[(e,x,y),(e,y,x)]对称闭合x==覆盖
x个(转置
x)对称闭合。symmetricClosure==对称闭合
边标记图的类型
上下文
数据 上下文电子商务来源 #
这个上下文
子图的输入
和输出
,即所有连接到子图顶点的顶点(以及相应的边缘标签)。请注意,输入和输出可以属于子图本身。通常,顶点的顺序没有保证在里面输入
和输出
; 此外,可能会有重复。
上下文:: (等式e、,单体e) =>(a->布尔) ->图表e a->也许 吧(上下文e a)来源 #
提取上下文
由给定谓词指定的子图的。退换商品没有什么
如果指定的子图为空。
上下文(常数
假)x==无上下文(==1)(边缘
e 12)==如果e==零
然后就这样(上下文
[][])其他只是(上下文
[][(e,2)])上下文(==2)(边缘
e 12)==如果e==零
然后就这样(上下文
[][])其他只是(上下文
[(e,1)][])上下文(常数
正确)(边缘
e 12)==如果e==零
然后就这样(上下文
[][])其他只是(上下文
[(e,1)](e,2))上下文(==4)(3*1*4*1*5)==仅(上下文
[(一
,3), (一
,1)] [(一
,1), (一
,5)])