SPL - Estruturas de Dados (Pagar.me Talks)

SPL - Estruturas de Dados (Pagar.me Talks)

Talk realizada no Pagar.me Talks (https://www.youtube.com/watch?v=pA3zduWocew).

Código fonte usado na apresentação: https://github.com/devdrops/spl-ds

049fbbe4e5fb94c45d6ccd656290d6fb?s=128

Davi Marcondes Moreira

May 26, 2017
Tweet

Transcript

  1. SPL Estruturas de Dados 2017-05-26 @ Pagar.me Talks Davi Marcondes

    Moreira - @devdrops
  2. Por quê esse assunto?

  3. None
  4. None
  5. None
  6. None
  7. Introdução à SPL

  8. Extensão externa ao core (instalação pelo PECL) Surgiram como parte

    do core do PHP a partir da versão 5.3.0
  9. Extensão externa ao core (instalação pelo PECL) Surgiram como parte

    do core do PHP a partir da versão 5.3.0 (porém, SplObjectStorage já fazia parte desde a versão 5.1.0)
  10. O que contém? • Classes • Funções • Interfaces •

    Exceptions
  11. O que contém? • Classes • Funções • Interfaces •

    Exceptions Esta é a parte que nos interessa aqui!
  12. Além do array() • Array ◦ Jogue valores, pegue valores

    ◦ PHP Hash Table (DJBX33A) ◦ Formato dinâmico e seu custo na memória
  13. Além do array() • Array ◦ Jogue valores, pegue valores

    ◦ PHP Hash Table (DJBX33A) ◦ Formato dinâmico e seu custo na memória • Estruturas de dados da SPL ◦ Jogue valores, pegue valores, mas com eficiência ◦ Oferecem diferentes performances ◦ Podem substituir os arrays tradicionais :)
  14. Notações • Big-O Pior cenário possível. O elemento é o

    último na sequência, ou nem mesmo existe. • Big-Omega (Ω) Melhor cenário possível. O elemento é o primeiro na sequência. • Big-Theta (Θ) Pior cenário e melhor cenário são equivalentes. Há somente um elemento.
  15. Complexidades • Constante O(1) Tempo é sempre o mesmo. •

    Linear O(n) Tempo cresce de forma constante. • Logarítmico O(log n) Mais rápido quando há mais elementos. • Quadrática O(n^2) Iteração dupla com cada elemento. E outras como • Polinomial O(n^c) • Exponencial O(c^n) • Fatorial O(n!)
  16. None
  17. E para quê saber disso tudo? • Identificar as situações

    que acontecem dentro da sua aplicação. • Saber aplicar qual estrutura é a mais adequada.
  18. Estruturas de Dados

  19. Listas Duplamente Encadeadas • SplDoublyLinkedList

  20. Listas Duplamente Encadeadas • SplDoublyLinkedList ◦ SplStack

  21. Listas Duplamente Encadeadas • SplDoublyLinkedList ◦ SplStack ◦ SplQueue

  22. Listas Duplamente Encadeadas • SplDoublyLinkedList ◦ SplStack ◦ SplQueue •

    Características ◦ Trabalham melhor com sequências onde a ordem dos elementos precisa ser respeitada
  23. NOW STOP LIVE CODING TIME!!

  24. Árvore • SplHeap ◦ SplMaxHeap ◦ SplMinHeap

  25. Árvore • SplHeap ◦ SplMaxHeap ◦ SplMinHeap ◦ SplPriorityQueue

  26. Árvore • SplHeap ◦ SplMaxHeap ◦ SplMinHeap ◦ SplPriorityQueue Fila,

    com a implementação de uma árvore :P
  27. Árvore • SplHeap ◦ SplMaxHeap ◦ SplMinHeap ◦ SplPriorityQueue •

    Características ◦ Ordenação automática dos elementos. ◦ Toda iteração acaba percorrendo todos os elementos.
  28. NOW STOP LIVE CODING TIME!!

  29. Array • SplFixedArray

  30. Array • SplFixedArray • Características ◦ Pode ter o tamanho

    alterado através de setSize() ◦ Aceita arrays comuns como parâmetro através de fromArray() ◦ Não aceita índices que não sejam inteiros
  31. NOW STOP LIVE CODING TIME!!

  32. Dicionário • SplObjectStorage

  33. Dicionário • SplObjectStorage • Características ◦ Comportamento semelhante ao array

    (hash table), porém mais lento ◦ Possui métodos implementados interessantes (adicionar/remover/buscar elementos) ◦ Indicado para grandes quantidades de objetos, onde a ordem não é relevante
  34. NOW STOP LIVE CODING TIME!!

  35. Conclusão

  36. Aprendi que • Estruturas e algoritmos são incríveis • Velocidade

    sempre é relativa • Testes com grande quantidade de dados são importantes • Na dúvida, use um array • Procurar melhorar sempre - tanto o código como você mesmo!
  37. Referências

  38. • Documentação oficial https://secure.php.net/manual/pt_BR/book.spl.php • [Apresentação] New SPL Features in

    PHP 5.3 https://www.slideshare.net/tobias382/new-spl-features-in-php-53 • [Apresentação] PHP UK Conference 2014 - (Re)Discovering the SPL https://www.youtube.com/watch?v=Z4piH7PTjVc • [Livro] Mastering the SPL Library https://www.amazon.com/Mastering-SPL-Library-architect-guide/dp/1940111005 • [Curso] Princeton Algorithms I https://www.youtube.com/watch?v=pRnKTFo1zss&list=PL7D8f3XHhvX-SyX8Bzj5OeJVox EYgWNtJ • Efficient data structures for PHP 7 https://medium.com/@rtheunissen/efficient-data-structures-for-php-7-9dda7af674cd
  39. Muito obrigado! :D @devdrops devdrops.me/about