算法复杂度:高效编程的黄金法则
一、为什么要学复杂度同样实现一个功能写法不同效率天差地别普通写法数据量大直接超时优写法时间空间最优笔试稳稳通过复杂度就是用来衡量算法运行效率的两把尺子时间复杂度运行耗时多少空间复杂度占用内存多少二、大 O 表示法 核心规则只看最高次项忽略常数、忽略低次项。常见复杂度从快到慢排序\(O(1) O(logn) O(n) O(nlogn) O(n^2) O(2^n)\)三、常见时间复杂度逐一讲解1. O (1) 常数级执行次数固定和数据量 n 无关int a 10; int b 20; cout a b;2. O (n) 线性级一层循环循环 n 次for(int i 0; i n; i) { cout i; }3. O (n²) 平方级两层嵌套循环笔试最容易超时for(int i 0; i n; i) { for(int j 0; j n; j) { } }4. O (logn) 对数级每次数据缩小一半二分查找就是典型 O (logn)效率极高十万级数据也秒跑。5. O(nlogn)排序常用复杂度快排、归并排序四、空间复杂度看额外开辟的辅助空间大小O (1)只用到几个变量不开数组 / 容器O (n)开了大小为 n 的数组、vector递归也要算空间递归栈五、复杂度优化思想能用 O (n) 绝不写 O (n²)能二分就不用遍历把 O (n) 降为 O (logn)尽量少开多余数组节约空间递归深度太大容易栈溢出改用迭代六、今日总结算法好坏看时间 空间复杂度大 O 只保留最高次项常见复杂度速率(O(1)O(logn)O(n)O(nlogn)O(n^2)刷题第一件事先分析复杂度再写代码
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2585697.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!