时间复杂度分析
面试题目:求x的n次方
时间复杂度为O(n)。
int function1(int x,int n)
{
int result=1;
for (int i=0;i<n;i++)
{
result=result*x;
}
return result;
}
时间复杂度为O(n)。
int function(int x,int n)
{
if(n==0)
{
return 1;
}
return function(x,n-1)*x;
}
时间复杂度为O(logn)。
int function(int x,int n)
{
if(n==0)
{
return 1;
}
int t=function(x,n/2);
if(n%2==1)
{
return t*t*x
}
return t*t;
}
个人理解:不需要遍历整个数组下空间复杂度为logn,需要遍历一遍数组空间复杂度为n,需要遍历两遍数组空间复杂度为n^2。
编程语言的内存管理
程序运行时所需内存空间
- 固定部分:代码区:存储进制代码;数据区:全局变量、静态变量、变量、常量等;
- 可变部分:栈区:运行方式的形参、局部变量、返回值、递归栈所需的空间(系统自动分配与回收);堆区:动态开辟的空间,存放new出来的对象在堆中的真实数据(需要手动回收)。
数据类型大小
64位编译器:char:1、short:2、int:4、long:8、float:4、double:8、指针:8。单位Byte字节(8bite位)。
为什么会有内存对齐?
- 平台原因:不是所有的硬件平台都能访问任意内存地址上的数据,某些平台只能在一些地址初获取特定类型的数据,否则抛出硬件异常,为了使某一个程序可以在多个平台运行,需要进行内存对齐。
- 硬件原因:经过内存对齐后,CPU访问内存的速度会大大的提升
空间复杂度分析
空间复杂度: