数据结构与算法(一)时间复杂度与空间复杂度

大家好 来自小985的一枚小菜鸡 在这里记录自己学习数据结构与算法的全过程

认识时间复杂度

排序 从0-n-1下标找到一个最小值然后做位置交换 n*C (C为每次遍历一个数的代价)
从1-n-1下标再找到一个最小值再次做位置交换 (n-1)C…1C
所以到排序完成付出的总代价为以上的累加 N(N+1)*C/2=(aN^2+bN+c)*C 其中a、b、c为常数
时间复杂度 不要低阶项 只要高阶项 并且忽略高阶项的系数
所以时间复杂度为O(n^2) 当作一种评价标准
举一个例子 在一个数组中我们设定一个目标值 0 1 2 3 4 4 5 7 9 其中一个目标值为9
我们可以依次把整个数组遍历一遍 时间复杂度为O(n)
我们可以二分查找 每一次我们都可以排除一半 从另外一半中查找 时间复杂度为O(logn)

现由数组A 长度为n 现有数组B长度为m 求数组A和B的公共部分
1.如果每个数组A每个元素都去数组B中遍历一遍 时间复杂度为O(n*m)
2.如果每个数组A每个元素都去数组B中二分遍历一遍 时间复杂度为O(nlogm)
3.可以在A、B中各设置一个指针 哪个小那个往后移动过 如果两个相同则同时向后移动 时间复杂度 则指针最多向后移动n+m次 所以时间复杂度为O(n+m)

认识空间复杂度

传给你一个数组 不算额外空间 预期要拿到的东西 也不算额外空间
为了支持我的流程 我创造了多少辅助空间去得到 我想要拿到的东西
现有一个数组1 2 3 4 5 6 7 给定size长度为L 比如说L长度为5
则原来的顺序为1 2 3 4 5 6 7 目标得到的是6 7 1 2 3 4 5
1.先将前面五个数进行逆序1 2 3 4 5 变成5 4 3 2 1
再将最后两个数 6 7 交换得到7 6 则整个序列为 5 4 3 2 1 7 6
再将整个数据进行逆序 得到6 7 1 2 3 4 5为目标序列
通过逆序这种方式 我们不需要额外空间
2.我们创造一个7个位置的空间 先将后面两个数字写进去 再将前面五个数字写进去 那么我们所创造的额外空间为O(N)

最优解就是在时间复杂度最优的情况下 空间复杂度最低 得到的解是最优解

已标记关键词 清除标记
相关推荐
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页