2017-08-07 82 views
1

给定一个外来语言的排序字典,它包含N个单词和k个标准字典的起始字母,任务是完成返回字符串的函数,该字符串表示语言中字符的顺序。在算法中正确使用拓扑排序

Input: Dict[] = { "baa", "abcd", "abca", "cab", "cad" }, k = 4 
Output: Function returns "bdac" 
Here order of characters is 'b', 'd', 'a', 'c' 

我已经实施了这个问题用拓扑排序参考一些网上的文章的解决方案,但他们没有提及他们是如何在使用拓扑排序的做出决定吗?

问题:某人可能怎么知道何时使用图或其拓扑排序等概念来解决问题?

参考:

的解决方案是遍历给出的列表,并比较每个字符串与下一个。只要发现第一个不匹配,就在图形中的两个字符之间添加边,然后继续比较接下来的两个字符串。

一旦图形准备就绪,应用拓扑排序。

回答

0

你将不得不练习更多的问题并发展一种直觉来解决问题。至于拓扑,您可以从确定某些标志开始,在这些标志中可以使用拓扑排序。
1.是对标志一个向非循环图(DAG),因为拓扑排序只能被应用到DAG
2.能曲线图通过一些操作被转换为DAG,像您的示例。有向图可以通过合并其强连接组件转换为DAG,或者您可以将问题以某种方式减少到DAG中:
3.在节点中是否需要某种线性?
4.你想找到最短路径(拓扑排序也可以用来快速计算通过加权有向无环图的最短路径)

这就是我现在,我会继续稍后更新此答案

0

实际上,我认为关于图的方式是它表示对象之间的关系。在这里,对象是字母,而你试图找出三种情况之一(两个字母x和y):

1)字母x来在y之前

2)字母y自带X前

3)的x和y可以来以任何顺序

然而,由于图1和2不能同时发生,我们有一个DAG(有向无环图)。因此,“试图在DAG中寻找订单”响应拓扑排序响铃。事实上,问题现在与用于教学拓扑排序的经典问题非常相似,也就是说,我们有一堆任务,任务x应该在任务y之前完成,等等,找到要完成的任务的有效顺序。

然而,正如在生活中能够区分立即使用哪种算法一样,是经验和大量练习的结果:)