图形中路径的紧凑表示


9

我在图中有一些简单路径。路径的长度以为界。d

我能以哪种最紧凑的方式(从内存角度)表示路径,以使除所选路径之外的其他路径都无法表示?

请注意,我想在一种算法中使用这种表示形式,该算法将一遍又一遍地遍历路径的这一子集,并且我想相当快,因此,例如,我不能使用任何标准压缩算法。

我想到的一个表示是将它们表示为一组树木。我在猜测,将其降低到最佳数量的树是NP难的吗?还有哪些其他表示形式会很好呢?


2
在“遍历此子集”时,需要有关每个路径的哪些信息?长度?访问过的节点?与其他路径的交叉点?...可能有,所以如果您需要存储整个路径,则必须做好“不太快”的准备。2d
拉斐尔

GPGPG

好吧,即使两个不相交的简单路径的结合也可以创建一个循环,因此计算MST会使您失去我猜想的路径之一。但是以上可能会给您一些想法。
Juho 2014年

2
k

有可能使用FSM来表示路径,然后可以执行基本操作,如并集,交点,减法等,并且使FSM最小化的“压缩”操作已广为人知/最有效。还没有在论文中看到这一点,但是在另一个类似的问题上提出了它……
vzn 2014年

Answers:


4

特里(Trie)也许可以解决问题:http : //en.wikipedia.org/wiki/Trie

用字母标记图形的每个边缘。然后将代表通过图形的路径的字符串添加到特里。要满足“不显示除选定路径之外没有其他路径的要求”的要求,您可以将trie的所有顶点都留为空白,并标记边缘,除非从根到顶点的边缘代表您的路径之一,然后用一些东西标记顶点。布尔值,某些排序下的路径编号等。

一旦构建了特里,就会有将其压缩到最佳(或接近最佳)表示的算法。(请参阅链接的维基百科文章。)


有趣。但是,特里树带来了我不真正关心的一大套规格(快速查找,与键关联等),所以我想知道是否有更好的
选择

2

也许您应该看看简洁的数据结构。它们是试图在接近信息理论下限的空间中存储信息的数据结构,同时仍保留对其执行操作的能力。

树,字典等都有这样的结构。我不记得有什么结构可以完全满足您的需求,但是也许对它们进行某种组合或修改会有所帮助。


1

取决于算法的复杂性和所需的前后处理,也许最简单的选择就是方法。您可以将它们简单地表示为数组,并将其压缩后保存在HDF5中。该库配备了一些快速压缩算法,因此读取和写入压缩数据可能比未压缩数据还要快。

这是一些情节:

15 GB EArray和不同块大小的每个元素的顺序访问时间: http://pytables.github.io/_images/seq-chunksize-15GB.png

在PyTables上使用Blosc的解压缩速度: 在此处输入图片说明

而且,如果它们的长度受限制,则可以将它们存储在表中,从而可能会获得更多的空间。当从内存中检索它们时,您已经以一种非常方便的形式使用它们来应用算法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.