时间复杂度的学习
今天是课程的第一天,众所周知上课不做笔记等于没上。
时间复杂度
时间复杂度:算法需要跑的时间(单位是操作数)。
一般会省略常数项,所以
1 | for(int i=1;i<2^32-1;i++){ |
的时间复杂度是O(1);
所以在时间复杂度中 log的底数可以省略.
空间复杂度
粗略定义:整个程序占用了多大的内存。
各种变量类型占用的空间
C 结构体占用空间(内存)
struct 的空间占用不要目测,要用 siezeof 查看
sizeof是个假函数,在编译器就已经跑了.
一个类型占用的空间和操作系统平台也息息相关。
C++ 坑点
不要在局部变量开大数组(虽然我开数组从来开全局)
给大数组直接赋值
1 | int a[1e10+5]={1,2,3,4,5}; |
会直接给你的可执行文件中中写1e10个0,然而在CSP中你的代码不得超过512KB(和可执行文件没有关系),但是这样会编译超时。
所以应该:
1 | int a[1e10+5]; |
Define
define的本质是字符串替换
不要使用define实现Max,Min等函数
1 |
这样写看起来没有什么问题,但是如果a和b是函数呢?
那么a,b会被重复调用
1 | void a(){ |
那么输出会
1 | A |
函数被重复调用了 ,所以不能用define 实现Max,Min等函数,而且使用define也提高不了效率 。
用define代替变量
1 |
|
输出不会是12 ,会是11 ,因为define是字符串替换。会替换成1+5*2=11 。
This post was written on July 22, 2022 at 22:45
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CS奇妙!
评论
WalineTwikoo