Course-day-1-时间复杂度和C++的查漏补缺

本文发表于csdn,个人 blog

今天是课程的第一天,众所周知上课不做笔记等于没上。

时间复杂度

时间复杂度:算法需要跑的时间(单位是操作数)。

一般会省略常数项,所以

for(int i=1;i<2^32-1;i++){
	printf("%d\n",i);
}

的时间复杂度是O(1);

所以在时间复杂度中 log的底数可以省略.

空间复杂度

粗略定义:整个程序占用了多大的内存。

各种变量类型占用的空间

C 结构体占用空间(内存)

{% label struct red%} 的空间占用不要目测,要用 {% label siezeof red%} 查看

sizeof是个假函数,在编译器就已经跑了.

一个类型占用的空间和操作系统平台也息息相关。

C++ 坑点

不要在局部变量开大数组(虽然我开数组从来开全局)

给大数组直接赋值

int a[1e10+5]={1,2,3,4,5};

会直接给你的可执行文件中中写1e10个0,然而在CSP中你的代码不得超过512KB(和可执行文件没有关系),但是这样会编译超时。

所以应该:

int a[1e10+5];
void init(){
	a[0]=1;
	a[1]=2;
	a[2]=3;
	a[3]=4;
	a[4]=5;
}

Define

define的本质是{% label 字符串替换 red %}

不要使用define实现Max,Min等函数

#define MAX(a,b) a>b?a:b

这样写看起来没有什么问题,但是如果a和b是函数呢?

那么a,b会被重复调用

void a(){
    printf("A\n");
	return 1;
}
void b(){
    printf("B\b");
	return 2;
}
MAX(a(),b());

那么输出会

A
B
B

函数被{% label 重复调用了 red %},所以不能用{% label define blue %}实现Max,Min等函数,而且使用define也提高不了{% label 效率 blue %}。

用define代替变量

#define a 1+5
cout<< a*2;

输出不会是{% label 12 blue%},会是{% label 11 red%},因为define是字符串替换。会替换成{% label 1+5*2=11 pink%} 。

This post was written on July 22, 2022 at 22:45

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值