【问题标题】:How is the cost of suffix array generation O(n^2 log n)?后缀数组生成 O(n^2 log n) 的成本如何?
【发布时间】:2014-02-23 09:15:49
【问题描述】:

要在 n 个字符的字符串上构建一个 suffis 数组,

  1. 我们首先生成n个后缀O(n)
  2. 然后对它们进行排序 O(n log n)

总时间复杂度似乎是 O(n) + O(nlogn) = O(nlogn)。

但我读到它是 O(n^2 log n) 并且无法理解。谁能解释一下?

【问题讨论】:

标签: algorithm big-o complexity-theory time-complexity suffix-array


【解决方案1】:

首先声明O(n) + O(nlogn) = O(n) 是错误的。 O(n) + O(nlogn) = O(nlog(n)).

第二个也是你感到困惑的原因——比较两个后缀不是一成不变的。由于每个后缀都是长度不超过n的字符串,因此两个后缀的比较顺序为O(n)。因此排序n个后缀的顺序是O(n * log (n) * n) = O(n^2 * log(n))

【讨论】:

  • 大约 O(n) + O(nlogn) = O(n)...这是一个错误..感谢您指出。
  • 现在考虑比较字符串的长度,虽然它看起来很合乎逻辑,但奇怪的是我们从来没有看到这被认为是一般的字符串排序......它只是说字符串的排序需要 O( n log n),n 是字符串的数量..为什么会这样?
  • @Aadith 这个说法又不是真的。排序时始终考虑字符串的长度。在估计排序的复杂性时,不能忽略比较的复杂性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
相关资源
最近更新 更多