做网站卖彩票/站长工具综合查询系统
什么是算法
在计算机领域里,算法是一系列程序指令,用于处理特定的运算和逻辑问题
衡量算法优劣的主要标准是时间复杂度和空间复杂度
- 什么是数据结构
数据结构是数据的组织、管理和存储格式,其使用目的是为了高效地访问和修 改数据。
数据结构包含数组、链表这样的线性数据结构,也包含树、图这样的复杂数据 结构。
- 什么是时间复杂度
若存在函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的 常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称为O(f(n)),O为算 法的渐进时间复杂度,简称为时间复杂度;
直白地讲,时间复杂度就是把程序的相对执行时间函数T(n)简化为一个数量级,这个数量级可以是n、n2、n3等;
时间复杂度是对一个算法运行时间长短的量度,用大O表示,记作 T(n)=O(f(n));
常见的时间复杂度按照从低到高的顺序,O(1)<O(logn)<O(n)<O(n2)
1)T(n) = 3n,
最高阶项为3n,省去系数3,则转化的时间复杂度为:T(n)=O(n)
2)T(n) = 5logn,
最高阶项为5logn,省去系数5,则转化的时间复杂度为:T(n) =O(logn)
3)T(n) = 2,
只有常数量级,则转化的时间复杂度为:T(n) =O(1)
4)T(n) = 0.5n2+ 0.5n,
最高阶项为0.5n2,省去系数0.5,则转化的时间复杂度为:T(n) =O(n2)
- 什么是空间复杂度
和时间复杂度类似,空间复杂度是对一个算法在运行过程中临时占用存储空间 大小的量度,用大O表 示,记作S(n)=O(f(n)),程序占用空间大小的计算公式记作S(n)=O(f(n)),其中n为问题的规模,f(n)为 算法所占存储空间的函数。
常见的空间复杂度按照从低到高的顺序,包括O(1)、O(n)、O(n2)等。其中递 归算法的空间复杂度和递归深度成正比。
常见的空间复杂度有下面几种情形:
1)常量空间
当算法的存储空间大小固定,和输入规模没有直接的关系时,空间复杂度记 作O(1)。例如下面这段程序:
void fun1(int n){ int var = 3; …}
2)线性空间
当算法分配的空间是一个线性的集合(如数组),并且集合大小和输入规模n成 正比时,空间复杂度记作O(n)
void fun2(int n){int[] array = new int[n]; … }
3) 二维空间
当算法分配的空间是一个二维数组集合,并且集合的长度和宽度都与输入规模n 成正比时,空间复杂度记作O(n2)
例如下面这段程序:
void fun3(int n){ int[][] matrix = new int[n][n]; … }
4) 递归空间
递归是一个比较特殊的场景。虽然递归代码中并没有显式地声明变量或集合, 但是计算机在执行程序时,会专门分配一块内存,用来存储“方法调用栈”。
“方法调用栈”包括进栈和出栈两个行为
当进入一个新方法时,执行入栈操作,把调用的方法和参数信息压入栈中;
当方法返回时,执行出栈操作,把调用的方法和参数信息从栈中弹出。
下面这段程序是一个标准的递归程序:
void fun4(int n){ if(n<=1){ return; } fun4(n-1);… }
——————————————————————————————
内容来源:《漫画算法》