hyperloglog求交集

有兩種方法實(shí)現(xiàn)容斥原理理朋,一種是遍歷絮识,一種是遞歸(DFS),對(duì)于hyperloglog求交集而言選擇遍歷暗挑。

第一步初始化 redis

import redis
r = redis.Redis(host='localhost', port=6379, db=0)  
r.pfadd('day1',*['user_1','user_2','user_3','user_4','user_5','user_6','user_7'])
r.pfadd('day2',*['user_8','user_2','user_3','user_4','user_5','user_6','user_7'])
r.pfadd('day3',*['user_8','user_9','user_3','user_4','user_5','user_6','user_7'])
r.pfadd('day4',*['user_8','user_9','user_10','user_4','user_5','user_6','user_7'])
r.pfadd('day5',*['user_8','user_9','user_10','user_11','user_5','user_6','user_7'])
r.pfadd('day6',*['user_8','user_9','user_10','user_11','user_12','user_6','user_7'])
r.pfadd('day7',*['user_8','user_9','user_10','user_11','user_12','user_13','user_7'])
r.pfadd('day8',*['user_8','user_9','user_10','user_11','user_12','user_13','user_14'])

第二部實(shí)現(xiàn)排列函數(shù)和歸屬函數(shù)

#求排列
from itertools import combinations
def arrangement(length):
    combins = {}
    for i in range(length):
        combins[i+1] = [c for c in combinations(range(length), (i+1))]
    return combins
#lst1是否包含lst2
def is_exist_in_tuple(lst1,lst2):
    d1 = {}
    for i in lst1:
        if i in d1:
            d1[i] += 1
        else:
            d1[i] = 1
    d2 = {}
    for i in lst2:
        if i in d2:
            d2[i] += 1
        else:
            d2[i] = 1
    for key,value in d2.items():
        if key not in d1 or value>d1[key]:
            return False
    return True

第三步 實(shí)現(xiàn)交集函數(shù)

#combins--排列字典
#combins_intersection--交集
#i--第幾層
#j--第幾個(gè)
#k--第幾個(gè)的第幾個(gè)
#下面開(kāi)始計(jì)算交集
#l--同i
#m--同j

def intersection(lst):
    count_intersection = 0
    combins = arrangement(len(lst))
    combins_intersection = combins

    for i in range(len(combins)):
        for j in range(len(combins[i+1])):
            for k in range(len(combins[i+1][j])):
                r.pfmerge("combins_intersection%s_%s" % (i+1,j), lst[combins[i+1][j][k]])
            
            combins = arrangement(len(lst))
            combins_intersection[i+1][j] = r.pfcount("combins_intersection%s_%s" % (i+1,j))
            
            if(i>0):
                for l in range((i)):
                    for m in range(len(combins[l+1])):
                        if(is_exist_in_tuple(combins[i+1][j], combins[l+1][m])):
                            combins_intersection[i+1][j] += ((-1)**(l+1))*abs(combins_intersection[l+1][m]) 
                            
        for n in range(len(combins[i+1])):
            combins_intersection[i+1][n] = abs(combins_intersection[i+1][n])
    
    for i in range(len(combins)):
        for j in range(len(combins[i+1])):
            r.delete("combins_intersection%s_%s" % (i+1,j))
    return combins_intersection[i+1][0]

測(cè)試

combins_intersection1 = intersection(["day1","day2","day3","day4","day5","day6","day7","day8"])
combins_intersection = intersection(["day1","day2","day3","day4","day5","day6","day7"])

看結(jié)果輸出為

print combins_intersection
print "----------------"
print combins_intersection1

1
----------------
0

大功告成

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笋除,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子炸裆,更是在濱河造成了極大的恐慌垃它,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烹看,死亡現(xiàn)場(chǎng)離奇詭異国拇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)惯殊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門酱吝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人土思,你說(shuō)我怎么就攤上這事务热∫涫龋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵崎岂,是天一觀的道長(zhǎng)捆毫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)冲甘,這世上最難降的妖魔是什么绩卤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮江醇,結(jié)果婚禮上濒憋,老公的妹妹穿的比我還像新娘。我一直安慰自己陶夜,他們只是感情好凛驮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著条辟,像睡著了一般辐烂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捂贿,一...
    開(kāi)封第一講書(shū)人閱讀 49,856評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音胳嘲,去河邊找鬼厂僧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛了牛,可吹牛的內(nèi)容都是我干的颜屠。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鹰祸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼甫窟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蛙婴,我...
    開(kāi)封第一講書(shū)人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粗井,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后街图,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體浇衬,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年餐济,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耘擂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡絮姆,死狀恐怖醉冤,靈堂內(nèi)的尸體忽然破棺而出秩霍,到底是詐尸還是另有隱情,我是刑警寧澤蚁阳,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布铃绒,位于F島的核電站,受9級(jí)特大地震影響韵吨,放射性物質(zhì)發(fā)生泄漏匿垄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一归粉、第九天 我趴在偏房一處隱蔽的房頂上張望椿疗。 院中可真熱鬧,春花似錦糠悼、人聲如沸届榄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)铝条。三九已至,卻和暖如春席噩,著一層夾襖步出監(jiān)牢的瞬間班缰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工悼枢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留埠忘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓馒索,卻偏偏與公主長(zhǎng)得像莹妒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绰上,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容