【发布时间】:2013-08-27 23:19:14
【问题描述】:
我有一些文本的顺序遵循特定的顺序。一些文本会因遍历的轨迹而改变。我的目标是为每个页面生成静态页面,并通过链接将它们相互连接。
问题是解决一个为印刷书籍生成文本的工具的问题(显然是静态的)。因此,假设您正在阅读示例 1 中表示的一本书(如下图所示)。最初,您在节点 A 中,此页面的文本是“转到页面 B 或页面 C”。选择节点 C,然后选择 F -> B -> E -> H,您将在节点 H 中看到一个内容,该内容应该与您是否被 A -> B -> D 遍历时看到的内容不同-> H,例如。由于是印刷书,所以需要复制一些路径,以便根据遍历的路径改变一些节点的内容。
例子:
在这个例子中,我有两种遍历的可能:
A -> B -> D
A -> C -> D
预期结果:
Page 1: A (link to page 2 and 3)
Page 2: B (link to page 4)
Page 3: C (link to page 5)
Page 4: D
Page 5: DD'
这个简单的例子生成了 5 个页面,一旦第 4 页有一部分文本应该只在阅读通过第 3 页时才显示。
为了模拟这个问题,我选择使用图论。为了更好地理解,我在下图中绘制了我要解决的问题的两个示例:
请注意,红色虚线边缘实际上不是边缘。这些是我用来表示给定节点 X 的内容何时因访问节点 Y 而发生变化的方式(读作“如果到达 X 的路径经过 Y,则节点 X 的内容发生变化”)。
我阅读了很多关于图、遍历策略(BFS 和 DFS)和其他一些主题的文章。我的目标是开发一种算法,以一种可能生成前面提到的页面的方式重新排列给定的图形。我没有发现任何众所周知的问题可以解决这个问题,但我相信它应该已经存在。我的研究没有发现任何有用的东西,所以我尝试自己解决。
我成功的方法是向上遍历图表以找到一个节点,该节点包含依赖于其他节点的内容。找到此节点后,查找从依赖节点到当前节点的所有路径。遍历这些路径,复制包含多个传入边的所有节点,删除先前的连接并将当前节点与复制的节点连接,依此类推,直到消耗路径的所有节点。这种算法效果很好,但这种方法效率不高,而且对于长文本可能会很慢。
我的问题是:您知道解决此问题的其他更好方法吗?有没有什么理论或已知的算法可以解决这类问题?
提前致谢。
【问题讨论】:
-
例1中从A到I经过H的路径有5条,为什么只有H1~H4?是不是路径 ABDHI 和 ACGHI 在节点 H 上支持相同的内容?
-
是的,因为 H 的内容只会随着 E 和 F 的变化而改变,所以我们有以下可能的组合: - 不通过 E 或 F (A->B->D->H) -通过 E (A->B-E->H> - 通过 F (A->C->F->B->D->H) - 通过 E 和 F (A->C->F-> B->E->H>
标签: algorithm math graph tree graph-algorithm