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

位运算

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)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和
所需要占用的存储空间两个方面衡量。


你可能感兴趣的:(数据结构与算法,位运算,时间复杂度)