【发布时间】:2018-07-08 23:37:04
【问题描述】:
我正在编写倾斜算法来构造后缀数组,并且我有一个长字符串(长度 >= 4000)。 在 Skew 算法中,我必须构造 Triples Array 和 Sub-Strings Array。
例如:我有一个字符串s = 'abcddd'。
-
三元组是:
'abc', 'bcd', 'cdd', 'ddd' -
子字符串数组是:
'abcddd', 'bcddd', 'cddd', 'ddd', 'dd', 'd'
这是我的解决方案:
import numpy as np
# example
string = 'abdcb.....' (length >= 4000)
temp = 'abdcb......###' (length >= 4000)
triples_arr = np.array([])
sub_strings = np.array([])
for i in range (0, len(temp) - 3):
triples_arr = np.append(triples_arr, temp[i:i + 3])
sub_strings = np.append(sub_strings, string[i:string_len])
对于长字符串(长度 >= 4000),需要一分钟才能完成。
是否有任何解决方案可以减少该任务的处理时间?
【问题讨论】:
-
我认为在构建后缀数组时,不要复制所有后缀,而是使用更轻量级的东西,比如起始位置来表示后缀
-
在倾斜算法中,我需要三重后缀来排序和标记字母表中的字符。 @StephenRauch 的解决方案解决了我的问题。
-
我认为构建三元组数组很好。但是构建 sub_strings 数组需要 n^2 空间和时间,这违背了在线性时间内构建后缀数组的目的。
标签: python arrays string algorithm performance