有关时间复杂度分析
  • 板块灌水区
  • 楼主Brainless_zxc
  • 当前回复8
  • 已保存回复9
  • 发布时间2024/4/17 08:40
  • 上次更新2024/4/17 15:43:16
查看原帖
有关时间复杂度分析
661274
Brainless_zxc楼主2024/4/17 08:40

rt,感觉自己分析得跟 √10 没啥区别。请问具体的分析方法是什么。

举例:关于 Manacher 算法,如下板子代码为什么是 O(n)O(n) 的?(马蜂不好,轻喷)

#include<bits/stdc++.h>
using namespace std;
char a[11000005],s[22000005],dui[500];
long long n,k,ans=1,P[22000005],cnt=0;
inline void Manacher(){
	long long r=0,c;
	for(int i=1;i<n;i++){
		if(i>=r){
			P[i]=1;
		}
		else{
			P[i]=min(P[2*c-i],r-i);
		}
		while(s[i+P[i]]==s[i-P[i]]){
			P[i]++;
			cnt++;
		}
		if(i+P[i]>r){
			r=i+P[i];
			c=i;
		}
	}
}
int main(){
//	cin>>n;
	scanf("%s",a);
	s[k++]='S';
	s[k++]='$';
	n=strlen(a);
	for(int i=0;i<n;i++){
		s[k++]=a[i];
		s[k++]='$';
	}
	s[k++]='B';
	n=k;
	Manacher();
//	cout<<cnt<<endl;
	for(int i=0;i<n;i++){
		ans=max(ans,P[i]);
	}
	cout<<ans-1;
}
2024/4/17 08:40
加载中...