SlideShare a Scribd company logo
1 of 63
Download to read offline
Estruturas de Dados
Probabilísticas para lidar com
   DADO PRA CARAMBA


Juan Lopes
@juanplopes
Bloom Filters (1970)
Hit Counting (1990)
HyperLogLog (2007)
Detectar duplicações


indexar(documento):
  se documento não está indexado:
    lucene.indexar(documento)
Detectar duplicações


indexar(documento):
  se documento não está indexado:
    lucene.indexar(documento)
Consultar no disco?
Consultar no disco?
Consultar em memória?
              HashSet<T>
Consultar em memória?




      100M ids
Consultar em memória?



  100M ids × 32 chars / id
Consultar em memória?


 100M ids × 104 bytes / id
        > 10GB
Consultar em memória?


 100M ids × 104 bytes / id
        > 10GB
Bloom Filters

      I had a big data problem,
  "I know, I'll use a bloom filter."
Now I'm not sure how many
problems I have, but I know
   which ones I don't.
Bloom Filters


    Adicione!(item)

     Contém?(item)
Bloom Filters


     Contém?(item)
       não 100%
       sim ~95%
Bloom Filters
                       0
   x
                h(x)
                       0


                       1


                       0


                       0


                       0


                       0


                       0
Bloom Filters
                        1
   x
                 h(x)
                        0


                        1

          h(y)
                        0
   y

                        0


                        0


                        0


                        0
Bloom Filters
                        1
   x
                 h(x)
                        0


                        1

          h(y)
                        0
   y

                        0


                        0

         h(z)
   z                    0


                        0
Bloom Filters

adicionar!(item):
  V[hash(item)] ← 1

contém?(item):
  retorne V[hash(item)] = 1
Bloom Filters


      100M itens
    2Gbits (256MB)
      5% de erro
Bloom Filters
                           g(x)   1
   x
                          h(x)
                                  0


          h(y)                    1


                                  0
   y
                 g(y)
                                  0

        h(z)                      1


   z                    g(z)      0


                                  1
Bloom Filters
adicionar!(item):
  para cada hash em hashes:
    V[hash(item)] ← 1

contém?(item):
  para cada hash em hashes:
    se V[hash(item)] = 0:
      retorne falso
  retorne verdadeiro
Bloom Filters

       100M itens
   4 funções de hash
   625Mbits (78MB)
      5% de erro
Bloom Filters

       100M itens
   5 funções de hash
     1Gbit (128MB)
      1% de erro
Bloom Filters

       100M itens
   7 funções de hash
    2Gbit (256MB)
    0.01% de erro
Bloom Filters

 Probabilidade de falso
       positivo:
Cardinalidade


 Quantos ips distintos
  acessaram o site na
     última hora?
Cardinalidade



Qual a cardinalidade do
       stream S?
Consultar em memória?
              HashSet<T>
Usando HashSet

adicionar!(item):
  S ← S ∪ { item }

quantos?:
  retorne |S|
Consultar em memória?




  >10K eventos/s
Consultar em memória?


> 10K eventos/s × 3.600s/h
× 100 bytes / evento
       > 3GB/h
Consultar em memória?


> 10K eventos/s × 3.600s/h
× 100 bytes / evento
       > 3GB/h
Hit Counting
                n/10 bits
-c log (z/c)   2% de erro
Hit Counting
                n/10 bits
-c log (z/c)   2% de erro


36M eventos
3.6Mbits
450KB
Hit Counting
adicionar!(item):
  V[hash(item)] ← 1

quantos?:
  z ← número de zeros em V
  c ← tamanho de V
  retorne -c × log(z/c)
HyperLogLog


Contar até 1 bilhão
  de elementos
  usando 1.5KB
Hash



       "To hash" é
        "espalhar"
Hash

  04 = 00000100
  08 = 00001000
  12 = 00001100
  16 = 00010000
Hash
It is theoretically impossible to define a
   hash function that creates random
 data from non-random data in actual
 files. But in practice it is not difficult to
    produce a pretty good imitation of
               random data.

                           Donald Knuth
HyperLogLog
      Qual a
probabilidade dos n
   primeiros bits
   serem 0...01?
HyperLogLog

1xxxxxxx -> 50%
01xxxxxx -> 25%
001xxxxx -> 12.5%
0001xxxx -> 6.25%
HyperLogLog
 Dado que existe uma
   palavra com os n
     primeiros bits
     0...01, qual a
cardinalidade provável?
HyperLogLog

1xxxxxxx -> 2
01xxxxxx -> 4
001xxxxx -> 8
0001xxxx -> 16
HyperLogLog



 Multiplas funções de
        hash?
HyperLogLog



  Dividir o stream em
    "m" substreams
HyperLogLog
          01100010
           i=3 v=4

  0   0   0   4   0   0   0   0
  0   1   2   3   4   5   6   7
HyperLogLog

 21   22   20   24   20   25   20   20
  1   2    0    4    0    5    0    0
  0   1    2    3    4    5    6    7
HyperLogLog

  2   4   1   16   1   32   1   1
  1   2   0   4    0   5    0   0
  0   1   2   3    4   5    6   7
HyperLogLog



          M(i)
      2          , i<m
HyperLogLog



               M(i)
 Ê = média(2          , i<m)
HyperLogLog



                   M(i)
 Ê = m × média(2          , i<m)
HyperLogLog


  Ê = αm × m × média(2M(i), i<m)
      α m=
HyperLogLog


  Ê = αm × m × média(2M(i), i<m)
      α m=


       αm= (0.7213 / (1 + 1.079 / m))
HyperLogLog
adicionar!(item):
 x ← hash(item)
 i ← log2m primeiros bits de x
  v ← pos. do primeiro 1 nos bits restantes de x
  M(i) ← max(M(i), v)

quantos?:
  retorne αm × m × média(2M(i), i<m)
HyperLogLog
        média aritmética:
   (M(0) + M(1) + ... + M(m-1)) / m

        média geométrica:
    (M(0) × M(1) × ... × M(m-1))1/m

        média harmônica:
  m / (M(0)-1 + M(1)-1 + ... + M(m-1)-1)
HyperLogLog
  Cada registro de M tem 5 bits.
       Por isso "LogLog":
                   32
        log2(log2(2 )) = 5
   Registradores         Erro
         m             (104/√m) %
  m = 2048 (1.25KB)      2.3%
  m = 65536 (40KB)       0.4%
 m = 1048576 (648KB)      0.1%
HyperLogLog


      Para baixas
 cardinalidades, o erro
   relativo aumenta.
HyperLogLog
quantos?:
  Ê ← αm × m × média(2M(i), i<m)
  se Ê < 2.5 × m:
    z ← número de zeros em M
    retorne -m × log(z/m)
  senão:
    retorne Ê
HyperLogLog
  1   2   2   4   0   5   0   0
  0   1   2   3   4   5   6   7



  5   0   1   0   5   2   3   1
  0   1   2   3   4   5   6   7
HyperLogLog
  1   2   2   4   0   5   0   0
  0   1   2   3   4   5   6   7



  5   0   1   0   5   2   3   1
  0   1   2   3   4   5   6   7




  5   2   2   4   5   5   3   1
  0   1   2   3   4   5   6   7
Referências
Space/Time Trade-offs in Hash Coding with Allowable Errors (Bloom Filters)
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.2080



A Linear-Time Probabilistic Counting Algorithm for Database Applications
http://dblab.kaist.ac.kr/Publication/pdf/ACM90_TODS_v15n2.pdf



HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm
http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf



Hashing Explained - Google Guava
http://code.google.com/p/guava-libraries/wiki/HashingExplained



StreamLib
https://github.com/clearspring/stream-lib

More Related Content

What's hot

Sessao 2 Introdução à T.I e Entropias
Sessao 2 Introdução à T.I e EntropiasSessao 2 Introdução à T.I e Entropias
Sessao 2 Introdução à T.I e EntropiasPedro De Almeida
 
Trabalho de Cálculo Numérico
Trabalho  de Cálculo NuméricoTrabalho  de Cálculo Numérico
Trabalho de Cálculo NuméricoItaylane Malta
 
Exercícios resolvidos matematica 01
Exercícios resolvidos matematica 01Exercícios resolvidos matematica 01
Exercícios resolvidos matematica 01resolvidos
 
InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...
InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...
InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...iMasters
 

What's hot (9)

Sessao 2 Introdução à T.I e Entropias
Sessao 2 Introdução à T.I e EntropiasSessao 2 Introdução à T.I e Entropias
Sessao 2 Introdução à T.I e Entropias
 
Trabalho de Cálculo Numérico
Trabalho  de Cálculo NuméricoTrabalho  de Cálculo Numérico
Trabalho de Cálculo Numérico
 
Exercícios resolvidos matematica 01
Exercícios resolvidos matematica 01Exercícios resolvidos matematica 01
Exercícios resolvidos matematica 01
 
Matematica2 14
Matematica2 14Matematica2 14
Matematica2 14
 
Matematica2 13
Matematica2 13Matematica2 13
Matematica2 13
 
InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...
InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...
InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensa...
 
1 serie exercicios_logica
1 serie exercicios_logica1 serie exercicios_logica
1 serie exercicios_logica
 
3 terceira_lista_de_exerc_cios_po2
3  terceira_lista_de_exerc_cios_po23  terceira_lista_de_exerc_cios_po2
3 terceira_lista_de_exerc_cios_po2
 
Questesdematemtica ano2003
Questesdematemtica ano2003Questesdematemtica ano2003
Questesdematemtica ano2003
 

Viewers also liked

PIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosPIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosJuan Lopes
 

Viewers also liked (7)

uerj201212
uerj201212uerj201212
uerj201212
 
dnarj20130504
dnarj20130504dnarj20130504
dnarj20130504
 
tdc2012
tdc2012tdc2012
tdc2012
 
qconsp2015
qconsp2015qconsp2015
qconsp2015
 
rioinfo2012
rioinfo2012rioinfo2012
rioinfo2012
 
qconrio2015
qconrio2015qconrio2015
qconrio2015
 
PIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosPIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexos
 

Similar to dnarj-20120630

Similar to dnarj-20120630 (12)

Solução de equações não lineares weslley
Solução de equações não lineares weslleySolução de equações não lineares weslley
Solução de equações não lineares weslley
 
Logaritmos
LogaritmosLogaritmos
Logaritmos
 
Função Quadrática
Função QuadráticaFunção Quadrática
Função Quadrática
 
www.videoaulagratisapoio.com.br - Matemática - Logaritmo
www.videoaulagratisapoio.com.br - Matemática -  Logaritmowww.videoaulagratisapoio.com.br - Matemática -  Logaritmo
www.videoaulagratisapoio.com.br - Matemática - Logaritmo
 
Doc matematica _250829635
Doc matematica _250829635Doc matematica _250829635
Doc matematica _250829635
 
www.AulasDeMatematicanoRJ.Com.Br -Matemática - Logaritmo
 www.AulasDeMatematicanoRJ.Com.Br  -Matemática -  Logaritmo www.AulasDeMatematicanoRJ.Com.Br  -Matemática -  Logaritmo
www.AulasDeMatematicanoRJ.Com.Br -Matemática - Logaritmo
 
www.AulasDeMatematicaApoio.com.br - Matemática - Logaritmo
 www.AulasDeMatematicaApoio.com.br  - Matemática - Logaritmo www.AulasDeMatematicaApoio.com.br  - Matemática - Logaritmo
www.AulasDeMatematicaApoio.com.br - Matemática - Logaritmo
 
Matematica2 4
Matematica2 4Matematica2 4
Matematica2 4
 
Logaritmos
LogaritmosLogaritmos
Logaritmos
 
L
LL
L
 
LOGARITMOS BY GLEDSON
LOGARITMOS BY GLEDSONLOGARITMOS BY GLEDSON
LOGARITMOS BY GLEDSON
 
Logaritmos
LogaritmosLogaritmos
Logaritmos
 

dnarj-20120630