您的位置:首页 > 其它

位运算、时间复杂度、空间复杂度

2016-11-16 23:41 190 查看

位运算

1、&  与运算

都为1则是1,否则为0

2、| 或运算

有一个1,就为1,否则是0

3、~ 非运算

取相反数

4、^ 异或运算

相同为0,不同为1

注:

1、对两个数进行位运算,需要将两个数转化为二进制:

例如:a = 128的二进制形式为:10000000

           b = 129的二进制形式为:10000001

   a&b 10000000

   a|b   10000001

    ~a   01111111

   a^b  00000001

 

特别的:android中,我们经常会传入参数比如 left | top确定位置,其原理就是,left top对应的int值进行 或运算,

例如left = 128,top = 129 left | top = 10000001,传入参数,

通过result & left来判断是否选择了left,result & left = 10000000即等于left,说明选择了这个参数。

时间复杂度

http://blog.csdn.net/firefly_2002/article/details/8008987

在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。
时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。它是描述一个算法的执行时间,但是执行时间是我们不能确定的,但是我们能
确定一个算法的执行次数,所以我们通过执行次数来判断时间复杂度是多少。

按数量级递增排列,常见的时间复杂度有:

常数阶O(1),对数阶O(
 

 
),线性阶O(n),

线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,

k次方阶O(n^k),指数阶O(2^n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

例如:

for(i=1; i<=n; ++i)
{
for(j=1; j<=n; ++j)
{
c[i][j] = 0;//该步骤属于基本操作执行次数:n的平方次
for(k=1; k<=n; ++k)
c[i][j] += a[i][k] * b[k][j];//该步骤属于基本操作执行次数:n的三次方次
}
}


空间复杂度

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序时间复杂度
O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和
所需要占用的存储空间两个方面衡量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息