我计划创建一个表示严格偏序集的类,并且我假设对其接口建模的最自然方法是作为二元关系。这提供了如下功能:
bool test(elementA, elementB); //return true if elementA < elementB
void set(elementA, elementB); //declare that elementA < elementB
void clear(elementA, elementB); //forget that elementA < elementB
可能的功能如下:
void applyTransitivity(); //if test(a,b) and test(b, c), then set(a, c)
bool checkIrreflexivity(); //return true if for no a, a < a
bool checkAsymmetry(); //return true if for no a and b, a < b and b < a
简单的实现是有一个对列表,使得 (a, b) 表示 a < b。但是,它可能不是最优的。例如,test
将是线性时间。也许它可以更好地作为列表的哈希映射来完成。
但是,理想情况下,内存中的表示将根据其性质强制applyTransitivity
始终“有效”,并且不允许创建导致自反性或对称性的边。换句话说,数据结构的自由度代表了严格偏序集的自由度。有没有已知的方法可以做到这一点?set
或者,更现实地说,是否有一种方法可以检查是否是周期性的,并在每次调用and时保持可摊销和迭代的传递性clear
,从而降低执行正确性的成本。有工作实施吗?