我正在寻找一种功能数据结构,它代表两种类型之间的有限双射,即节省空间和节省时间。
例如,考虑到大小为n的双射f,我会很高兴。
我知道排列的有效表示,例如this paper,但它似乎无法解决我的问题。
答案 0 :(得分:10)
请查看my answer以获得相对类似的问题。 provided code可以处理一般的NxM关系,但也可以专门用于双向投射(就像你对二叉搜索树一样)。
在此完成答案:
最简单的方法是使用一对单向贴图。它有一些成本,但你不会变得更好(你可以使用专用二叉树更好一点,但如果你必须自己实现它,你需要支付巨大的复杂成本)。从本质上讲,查找速度一样快,但添加和删除速度会慢一倍。这对于对数操作来说并不是那么糟糕。此技术的另一个优点是,如果有可用的键,则可以使用专用的地图类型作为键或值类型。使用特定的通用数据结构不会获得足够的灵活性。
另一种解决方案是使用四叉树(而不是将NxN关系视为一对1xN和Nx1关系,您将其视为类型的笛卡尔积(Key * Value)中的一组元素,即,一个空间平面),但我不清楚时间和内存成本比两个地图好。我想它需要进行测试。
答案 1 :(得分:5)
虽然它不能满足你的第三个要求,bimap似乎是要走的路。 (他们只制作两个有限的地图,每个方向一个,方便使用。)