1、空间复杂度问题(我不会算)

幽冥北极 2024-01-31 13:54:28

#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值?

...全文
237 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

谢谢大佬赐教!

  • 打赏
  • 举报
回复

这段代码的空间复杂度主要取决于以下几个因素:

  1. 字符串数组 bbt,其大小为 10000000。每个元素是一个结构体,包含一个字符串和一个长整型数。因此,这个数组的空间复杂度是 O(n),其中 n 是数组的大小。

  2. 布尔数组 f,其大小为 16777300。这是一个固定大小的数组,所以它的空间复杂度是 O(1)。

  3. 其他变量(如 h, t, p, n, s1, s2, tx, c)都只占用常数空间,所以它们的空间复杂度也是 O(1)。

因此,这段代码的总空间复杂度是 O(n) + O(1) + O(1) = O(n)。

  • 打赏
  • 举报
回复

空间复杂度主要由数组和字符串的存储空间占用决定。在这段代码中,主要的空间占用来自于以下几个部分:

  1. bool数组 f[16777300] 用于标记状态是否访问过,数组大小为 16777300,占用的空间为 16777300 * sizeof(bool)

  2. 结构体数组 bbt[10000000] 用于存储状态信息,数组大小为 10000000,占用的空间为 10000000 * sizeof(struct dx)

  3. 字符串变量 tx 用于存储状态信息,在每一次循环中都会被更新,所以实际占用的空间大小取决于最大的字符串长度。

综合考虑以上几个部分,空间复杂度的最大值为:

[16777300 \times \text{{sizeof(bool)}} + 10000000 \times \text{{sizeof(struct dx)}} + \text{{最大字符串长度}}]

请注意,实际的空间占用可能会受到编译器和系统的影响。在这里,我们可以得到一个大致的估计,但实际运行时的空间占用可能略有不同。

lvchunhu_ 01-31
  • 打赏
  • 举报
回复

这段代码的空间复杂度主要取决于以下几个因素:

字符串数组 bbt 的大小,其大小为 10000000。
布尔数组 f 的大小,其大小为 16777300。
因此,这段代码的空间复杂度最大值为 O(n),其中 n 是 bbt 和 f 数组中元素数量的最大值。

29,635

社区成员

发帖
与我相关
我的任务
社区描述
就等你来冒个泡~
社区管理员
  • 灌水乐园
  • 社区助手
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

版主:

社区助手

 

试试用AI创作助手写篇文章吧