string - 拓扑排序在算法中的正确使用

标签 string algorithm data-structures graph topological-sort

给定具有 N 个单词和标准词典的 k 个起始字母的外星语言的排序字典,任务是完成返回表示语言中字符顺序的字符串的函数。

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

我已经通过引用网上的一些文章使用拓扑排序实现了该问题的解决方案,但是没有人提到他们是如何得出使用拓扑排序的决定的?

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

供引用:

解决方案是遍历给定的列表并将每个字符串与下一个字符串进行比较。每当发现第一个不匹配时,在图中的两个字符之间添加边,然后继续比较下两个字符串。

图形准备好后,应用拓扑排序。

最佳答案

您将需要练习更多的问题并培养解决问题的直觉。至于拓扑,您可以从确定一些可以使用拓扑排序的标志开始。
1. 标记是否为有向无环图(DAG),因为拓扑排序只能应用于DAG
2. 是否可以通过某些操作将图形转换为 DAG,例如您的示例。有向图可以通过合并其强连通分量转换为 DAG,或者您能否以某种方式将问题简化为 DAG
3. 您是否需要节点之间的某种线性关系?
4.要不要求最短路径(拓扑排序也可以通过带权有向无环图快速计算最短路径)

暂时就这些了,以后会继续更新这个答案

关于string - 拓扑排序在算法中的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45539237/

相关文章:

Javascript 字符串替换没有效果

c - ICU 和 UTF-8 字符串的基本操作

c - strtok_r 提取引号内的字符串

algorithm - 计算给定输入数据的中值及其频率

java - 棋子表和绳子的时间复杂度

c++ - 二叉树中的删除

java - 为什么要以初始容量启动 ArrayList?

python - 当字符位于 unicode 范围内时,如何用空格填充字符?

database - 在给定子集的集合中查找最接近完成字符串

c# - 尝试使用画线算法移动矩阵中的对象