关于这份代码的复杂度
  • 板块学术版
  • 楼主b__b
  • 当前回复3
  • 已保存回复4
  • 发布时间2025/8/2 19:44
  • 上次更新2025/8/3 10:32:00
查看原帖
关于这份代码的复杂度
1121063
b__b楼主2025/8/2 19:44

原题

#include <cstdio>
int n;
char s[1030];
void dfs(int begin, int end) {
	if (begin == end) {putchar(s[begin] == '0' ? 'B' : 'I'); return;}
	int mid = (begin + end) >> 1;
	dfs(begin, mid), dfs(mid + 1, end);
	bool h0 = 0, h1 = 0;
	for (; begin <= end; ++begin) {
		if (s[begin] == '0') h0 = 1;
		else h1 = 1;
		if (h0 && h1) {putchar('F'); return;}
	}
	putchar(h0 ? 'B' : 'I');
}
int main() {
	scanf("%d%*c%s", &n, s), dfs(0, (1 << n) - 1);
}

我认为这份代码的复杂度是 O(n2n)O(n2^n)

如果我们把dfs函数得到的二叉树画出来,我们会发现:在同一层内,所有节点的区间长度和是 2n2^n;总共会递归 nn 层,总复杂度为 O(n2n)O(n2^n)

但是不太确定,于是在这里问问各位大佬qwq

2025/8/2 19:44
加载中...