29,635
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a1,b1;
bool f[16777300];
ll h=0,t=1,p,n;
string s1,s2,tx;
char c;
struct dx
{
string jyc;
ll s;
}bbt[10000000];
ll zjz(string s)
{
ll t=0,st;
for(ll i=0;i<s.size();i++)
{
if(s[i]=='A')st=0;
if(s[i]=='T')st=1;
if(s[i]=='C')st=2;
if(s[i]=='G')s3zt=3;
t=t*4+st;
}
return t;
}
void bfs(string xx)
{
bbt[0].jyc=xx;
f[zjz(xx)]=1;
while(h!=t)
{
for(ll i=1;i<=2;i++)
{
tx=bbt[h].jyc;
if(i==1)
{
c=tx[0];
tx[0]=tx[1];
tx[1]=c;
}
else
{
c=tx[0];
tx.erase(0,1);
tx+=c;
}
p=bbt[h].s;
if(f[zjz(tx)]==1)continue;
if(tx==s2)
{
cout<<p+1;
exit(0);
}
f[zjz(tx)]=1;
bbt[t].jyc=tx;
bbt[t].s=p+1;
t++;
}
h++;
}
}
int main()
{
cin>>n;
cin>>s1>>s2;
if(s1==s2)
{
cout<<0;
return 0;
}
bfs(s1);
return 0;
}
问:空间复杂度的max值?
谢谢大佬赐教!
这段代码的空间复杂度主要取决于以下几个因素:
字符串数组 bbt
,其大小为 10000000
。每个元素是一个结构体,包含一个字符串和一个长整型数。因此,这个数组的空间复杂度是 O(n),其中 n 是数组的大小。
布尔数组 f
,其大小为 16777300
。这是一个固定大小的数组,所以它的空间复杂度是 O(1)。
其他变量(如 h
, t
, p
, n
, s1
, s2
, tx
, c
)都只占用常数空间,所以它们的空间复杂度也是 O(1)。
因此,这段代码的总空间复杂度是 O(n) + O(1) + O(1) = O(n)。
空间复杂度主要由数组和字符串的存储空间占用决定。在这段代码中,主要的空间占用来自于以下几个部分:
bool数组 f[16777300]
: 用于标记状态是否访问过,数组大小为 16777300,占用的空间为 16777300 * sizeof(bool)
。
结构体数组 bbt[10000000]
: 用于存储状态信息,数组大小为 10000000,占用的空间为 10000000 * sizeof(struct dx)
。
字符串变量 tx
: 用于存储状态信息,在每一次循环中都会被更新,所以实际占用的空间大小取决于最大的字符串长度。
综合考虑以上几个部分,空间复杂度的最大值为:
[16777300 \times \text{{sizeof(bool)}} + 10000000 \times \text{{sizeof(struct dx)}} + \text{{最大字符串长度}}]
请注意,实际的空间占用可能会受到编译器和系统的影响。在这里,我们可以得到一个大致的估计,但实际运行时的空间占用可能略有不同。
这段代码的空间复杂度主要取决于以下几个因素:
字符串数组 bbt 的大小,其大小为 10000000。
布尔数组 f 的大小,其大小为 16777300。
因此,这段代码的空间复杂度最大值为 O(n),其中 n 是 bbt 和 f 数组中元素数量的最大值。