后缀尝试与字符串算法的动态编程

时间:2013-01-26 10:51:16

标签: string algorithm data-structures tree dynamic-programming

似乎许多困难的字符串算法都可以使用后缀尝试(树)和动态编程来解决 但我不确定哪种方法最好用,何时使用。
另外,哪种方法可以更好地掌握算法的特定领域,并将其纳入求职面试领域的工具库中?我认为这将是程序员在任何任务或类似事情中更频繁使用的那个? 在简单地比较渐近符号时,这种算法技术对于掌握最常用的工作技术更为有用

2 个答案:

答案 0 :(得分:2)

想想需要Lexicographically nth substring of a given string的问题:后缀数组正是您所需要的......并且很容易学习解决涉及后缀数组的大多数问题的基本要点。
另一方面,DP是一种算法技术。它可以解决大量的问题......不仅仅是字符串。
虽然我会在任何时候采取DP ...对于采访者来说,一个DP问题让他们弄清楚如果没有DP几乎不可能解决(在给定的限制范围内),但解决方案意味着你给他们一个基本的递归以及如何DP可以帮助你解决它。如果它只是一个后缀数组问题,那就意味着他们正在评估你的单一数据结构(很容易一次学习),而不是一种需要掌握的更通用的技术。

PS :直到最近,当我厌倦了尝试使用任何高级数据结构来解决问题(需要DP)并且总是会失败时,我推迟学习DP(例如:{{ 3}} - 简单的问题现在我知道如何使用DP来解决它,而是继续研究分段树并实现了O(nlgn),而DP给了我O(n)。所以最后的建议:如果没有研究DP掉落其他所有东西并继续下去。

答案 1 :(得分:1)

老实说,对于求职面试,不需要后缀树。这太困难了,超出了范围。然而,DP广泛用于谷歌和脸书等知名公司的采访。

与DP相比,

后缀树在解决问题方面存在局限性。通常它用于解决字符串相关的问题。但DP可以解决许多不同的领域。