AKSZ-算法入门
2024-07-03 19:11:17
发布于:广东
算法
五大特性
1有穷性 明确运行次数(不为死循环)
2确切性 程序中不出现歧义
3输入项 0~n个输入均可
4输出项 必须有输出,无输出的算法无意义
5可行性 输出要正确,在有效时间中完成
时间复杂度
T()为程序运行的次数
O()为T()最高项去系数
数据量推算法复杂度
竞赛通常限制时长为1s,一般运行10^8次左右。以下为常用时间复杂度。
时间复杂度 | 数据大小 |
---|---|
O(n) | <5*10^7 |
O(n logn) | <5*10^5 |
O(n^2) | <5000 |
O(n^3) | <500 |
O(2^n) | <20 |
O(n!) | <10 |
两种数据点超出时空范围的报错:
TLE:程序超时(死循环/算法繁琐)
MLE:超内存(空间过大)
模拟算法
1 审题立意 不遗漏提取题目条件 ,分析题目样例
2 分析关系 最好用流程图或表格列出各条件关系
3 编写程序 用相应语言,逐步求精的方法描述具体算法
例:
时间复杂度 | 算法 |
---|---|
O(n^3) | 暴力 |
O(n^2) | 枚举 |
O(n) | dp(动态规划) |
4 调试运行 调试代码并测试样例,如输出中间重要过程,观察中间过程是否正确
5 构造数据 构造一些更复杂,更全面的测试数据检查程序正确性
对拍
自己给数据点,将两种不同复杂度的算法的结果进行对比。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
while(true)
{
system("数据.exe>test.in");
system("正解优化代码.exe<test.in>my.out");
system("暴力代码.exe<test.in>std.out");
if(system("fc my.out std.out"))
system("pause");
}
return 0;
}
全部评论 1
关键点很明确 , 记录很简洁清晰 。👍不错,继续努力。
2024-03-10 来自 广东
1
有帮助,赞一个