python - 我的后缀数组生成代码的时间复杂度是多少
问题描述
我正在尝试使用 python 语言创建一个后缀数组。我的程序没有通过所有测试用例并显示超时错误。我认为它的时间复杂度是 O(N logN logN)。这是我的代码:
def criteria1(s):
return s[0]
def criteria2(s):
return s[1]
def criteria3(s):
return s[0][0]
text='banana'
l=len(text)
s=[]
for i in range(l):
s.append([[ord(text[i])-ord('a'),None],i]) # s is list of [[rank1,rank2],original_index] where rank1 is set according to first character of suffices of 'text'
doTill=1
while doTill<l:
for i in range(l): # assigning the second rank
try:
s[i][0][1]=s[i+doTill][0][0]
except IndexError:
s[i][0][1]=-1
s.sort(key=criteria1) # sorting based on [rank1,rank2]
#print('first sort',s)
temp=list(s[0][0]) # now assigning new rank1 based on [rank1,rank2]
s[0][0][0]=0 # setting rank1 of first element to 0
r=0
for i in range(1,l):
if temp==s[i][0]:
s[i][0][0]=r
else:
temp=list(s[i][0])
r+=1
s[i][0][0]=r
#print('reassign ranks',s)
s.sort(key=criteria2) # again sorting based on original_index of suffices
doTill*=2
s.sort(key=criteria3) # now getting the required suffix array from s by first sorting it according to rank1 and then getting original_indices
for i in range(l):
s[i]=s[i][1]
print(s)
请提供建议以改进我的代码及其时间复杂度。提前致谢
解决方案
推荐阅读
- java - 在数据流服务器中运行时出现spring cloud task taskLifecycleListener错误
- java - 自动化 jproflier 分析和保存 sanpshots
- oracle - 如何在 Oracle APEX 中为交互式报表的所有列设置相同的固定宽度?
- c# - 在 Asp .Net Webform 中使用 Excel 2016 扩展名 xlsx 导出
- php - 如何从 Google_Service_PeopleService 获取数据?
- php - 如何在 php 中使用 FPDF 在多列上换行?
- google-cloud-firestore - Firestore中部分数据上传的标准做法错误处理?
- mysql - MySQL 5.6 CAST String to Int 返回错误 1064
- ruby-on-rails - 无法在画布 lms 中投递邮件?我缺少什么配置设置?
- python - django 如何分别为每个用户加载视图?