拟阵交
拟阵交(matroid intersection)是在同一有限底集上,同时满足两个拟阵独立性约束的选择问题。典型目标是在公共独立集中选出元素最多的一个。两个约束各自有交换结构,并不意味着它们的交仍是一个拟阵。
例如,左侧人员 与右侧任务 之间只有三条允许指派:。人员每人至多接一个任务是一种分划拟阵,任务每项至多交给一人是另一种分划拟阵;两者同时成立恰好就是匹配。只选 后不能直接再加边,但换成 就能完成两项指派。这个例子说明单步只加不换的策略会停在非最大方案。
公共独立集与上界证书
设 、 是两个拟阵,目标为 公共独立集族仍有遗传性,但开头例子中的 与 违反增广公理,所以不能把交当作一个拟阵继续使用单拟阵结论。[1]
记两者的秩函数为 。对任意 及公共独立集 ,把 按是否落在 内分开: 第一项用第一拟阵的独立性,第二项用第二拟阵的独立性。于是若找到大小为 的公共独立集,又找到 使右端为 ,便已完整证明最优,不必枚举其他候选。
在上述三边例中,取 。这两条边属于同一人员,所以 ;余下只有 ,其第二拟阵秩为一。因此任意公共独立集大小至多二, 达界。
拟阵交定理进一步保证总能找到这样的证书: 上面的逐项分割只证明“≤”方向;一般的反向不等式需要拟阵交换路径论证,本篇引用该定理,不把一个达界算例当成其一般证明。它解释了为何除了一个好方案,还存在可核对的秩上界证书。
小底集上的完整精确求解
下面实现直接按大小递减枚举公共独立集,可用于核对小例子或新独立性判定器。输入 elements 为无重复、可哈希元素,independent1、independent2 接收一个 frozenset 并返回真假;它们应正确表示两个拟阵。返回最大公共独立集,不改写输入。程序的正确性甚至不依赖交换公理,但代价是指数枚举。
from itertools import combinations
def matroid_intersection_small(elements, independent1, independent2):
items = tuple(elements)
if len(set(items)) != len(items):
raise ValueError("elements must be distinct")
for size in range(len(items), -1, -1):
for choice in combinations(items, size):
candidate = frozenset(choice)
if independent1(candidate) and independent2(candidate):
return candidate
raise ValueError("the empty set must be independent")
edges = {"a": ("u", "x"), "b": ("u", "y"), "c": ("v", "x")}
def left_ok(choice):
return len({edges[e][0] for e in choice}) == len(choice)
def right_ok(choice):
return len({edges[e][1] for e in choice}) == len(choice)
answer = matroid_intersection_small(edges, left_ok, right_ok)
assert answer == frozenset({"b", "c"})
assert matroid_intersection_small([], left_ok, right_ok) == frozenset()
print(sorted(answer)) # ['b', 'c']
循环不变量是:开始处理大小 时,所有大小大于 的子集都已检查且不可行。因此第一次找到的可行集不可能被更大的可行集超过;大小为零时至少有空集,所以合法输入必然终止。共至多检查 个子集;若一次判定耗时 ,包括建立集合的成本后,时间为 ,额外存储为 加判定器空间。本例判定器线性扫描候选,故总体时间为 。
变式。 删除边 后,最大公共独立集大小为一。取 ,得到 、;代码会返回 或 中一个。证书同时说明缺少人员 的边使第二项任务无法新增指派。
一般拟阵交存在基于交换图增广路径的多项式次独立性查询算法。路径上需要交替换出和换入元素,并选择无捷径的路径,不能把任意一串局部可换操作当成最终可行性保证。上述枚举代码刻意保留直接的正确性论证,适用范围是小底集;它的指数代价不代表拟阵交本身需要指数时间。若把第二个约束增加成多个任意拟阵约束,则也不能直接沿用两个拟阵的极小极大公式。
参考资料
- ↑ Michel X. Goemans,MIT 18.453:Lecture notes on matroid intersection,§6.1.1 二部匹配、§6.2 公共独立集及定理6.1。访问日期:2026-10-25。