第八章_位运算_2019-03-29

2019-03-29  本文已影响0人  雨住多一横

介绍

算术运算有:加(+)、减(-)、乘(*)、除(/)、求模(%)
位运算有:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(按位左移右边补0)、>>(按位右移左边补符号位)、>>>(按位右移左边补0)
神仙题:在面试中如果之前见到过就会,没见到过就不会

布隆过滤器

布隆过滤器可以精确地表示一个集合,可以精确地判断元素是否在此集合中,精确程度由用户的具体设计决定,做到100%的精确即正确是不可能的,如果面试中的题目涉及到以下几点,则面试官需要你掌握布隆过滤器的知识

布隆过滤器的优势在于,利用很少的空间可以做到精确率较高。
布隆过滤器具体原理如下:
假设有一个长度为m的bit类型的数组array,其中每个元素只有0和1两个状态
假设一共有k个hash函数,这些函数的输出域都大于或等于m,对hash的要求是它能够容纳题目中要求过滤的数据特征表示的大小的参数,并且足够优秀,相互独立。

经典题

#位运算(与、或、异或)满足交换律和结合律
a = a ^ b
b = b ^ a
a = a ^ b
class Compare:
    def flip(self, n):
        return n ^ 1
    def sign(self, n):
        return self.flip((n >> 31) & 1)
    def getMax(self, a, b):
        # write code here
        c = a - b
        a_sign = self.sign(a)
        b_sign = self.sign(b)
        c_sign = self.sign(c)
        diff_ab_sign = a_sign ^ b_sign #符号相同则为0,符号不同则为1
        same_ab_sign = self.flip(diff_ab_sign)
        return_a = diff_ab_sign * a_sign + same_ab_sign * c_sign
        return_b = self.flip(return_a)
        return return_a * a + return_b * b
上一篇下一篇

猜你喜欢

热点阅读