赞
踩
本文是计划花一些时间学习《代码随想录》时做一个记录,水平有限,可能理解有误,内容摘抄总结自Carl大佬的 代码随想录算法性能分析 感谢大佬开源的面向算法初学者的好资料
时间复杂度是在数学上对代码的执行情况的一个估计,建立在默认单元运算在计算机中所消耗的时间相同,便可以通过计算算法的单元运算数量来进行消耗时间的估算,算法在问题规模n增大的时候,其单元运算数量渐进函数f(n),那么时间复杂度则为O(n)
计算机通过读指令执行的方式来进行每一次计算,执行每一次的速度取决于CPU的主频,每一个单元运算需要经过差不多的几个机器周期来执行,当总运行时间超过了题目允许的时间后就会发生运行超时错误。
想要估计大概允许多少个操作,可以写一个简单的程序来试一试,但考虑到各种原因,通常得到的并不准确
递归调用 中,对中间结果进行保存,在需要的时候直接用,通过多余的存储空间的方式,减少重复计算的时间。
与时间复杂度类似,空间复杂度也使用大O来表示,表示随着事件规模增长,算法在应用过程中占用内存空间的单位数量大小
递归调用 中,空间复杂度的计算通常使用递归深度*每次递归的空间复杂度
以C语言为例子
首先要了解自己语言定义的数据类型的大小
32位编译器与64位编译器之前指针的存储大小不同,因为64位需要更多的位来保证其能够寻址到正确的内存空间
内存对齐
这是面试中面试官非常喜欢问到的问题,就是:为什么会有内存对齐?
主要是两个原因
平台原因:不是所有的硬件平台都能访问任意内存地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。为了同一个程序可以在多平台运行,需要内存对齐。
硬件原因:经过内存对齐后,CPU访问内存的速度大大提升。
CPU读取内存不是一次读取单个字节,而是一块一块的来读取内存,块的大小可以是2,4,8,16个字节,具体取多少个字节取决于硬件。
例如:
吐槽 :我们真的在编程考虑空间复杂赌读的时候还会考虑内存对齐吗,感觉不会有太大的变化,感觉空间相对时间来说还是更便宜
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。