我在图中有一些简单路径。路径的长度以为界。
我能以哪种最紧凑的方式(从内存角度)表示路径,以使除所选路径之外的其他路径都无法表示?
请注意,我想在一种算法中使用这种表示形式,该算法将一遍又一遍地遍历路径的这一子集,并且我想相当快,因此,例如,我不能使用任何标准压缩算法。
我想到的一个表示是将它们表示为一组树木。我在猜测,将其降低到最佳数量的树是NP难的吗?还有哪些其他表示形式会很好呢?
我在图中有一些简单路径。路径的长度以为界。
我能以哪种最紧凑的方式(从内存角度)表示路径,以使除所选路径之外的其他路径都无法表示?
请注意,我想在一种算法中使用这种表示形式,该算法将一遍又一遍地遍历路径的这一子集,并且我想相当快,因此,例如,我不能使用任何标准压缩算法。
我想到的一个表示是将它们表示为一组树木。我在猜测,将其降低到最佳数量的树是NP难的吗?还有哪些其他表示形式会很好呢?
Answers:
特里(Trie)也许可以解决问题:http : //en.wikipedia.org/wiki/Trie
用字母标记图形的每个边缘。然后将代表通过图形的路径的字符串添加到特里。要满足“不显示除选定路径之外没有其他路径的要求”的要求,您可以将trie的所有顶点都留为空白,并标记边缘,除非从根到顶点的边缘代表您的路径之一,然后用一些东西标记顶点。布尔值,某些排序下的路径编号等。
一旦构建了特里,就会有将其压缩到最佳(或接近最佳)表示的算法。(请参阅链接的维基百科文章。)
也许您应该看看简洁的数据结构。它们是试图在接近信息理论下限的空间中存储信息的数据结构,同时仍保留对其执行操作的能力。
树,字典等都有这样的结构。我不记得有什么结构可以完全满足您的需求,但是也许对它们进行某种组合或修改会有所帮助。