SPL - Estruturas de Dados (PHPeste 2017)

SPL - Estruturas de Dados (PHPeste 2017)

Talk realizada no PHPeste 2017 (http://phpeste.net/).

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

049fbbe4e5fb94c45d6ccd656290d6fb?s=128

Davi Marcondes Moreira

October 07, 2017
Tweet

Transcript

  1. SPL Estruturas de Dados 2017-10-07 @ PHPeste Davi Marcondes Moreira

    - @devdrops
  2. Agenda

  3. Agenda • Introdução à SPL • Estruturas de Dados •

    Conclusão • Referências
  4. Introdução à SPL

  5. O que é a SPL? Standard PHP Library Surgiu como

    parte do core do PHP a partir da versão 5.0.0
  6. None
  7. O que contém? • Classes • Funções • Interfaces •

    Exceptions
  8. Além do array() • Array ◦ Jogue valores, pegue valores

    ◦ PHP Hash Table (DJBX33A) ◦ Formato dinâmico e seu custo na memória
  9. 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 :)
  10. Notações Matemáticas • 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.
  11. Complexidades de Algoritmos • 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!)
  12. None
  13. Estruturas de Dados

  14. Listas Duplamente Encadeadas • SplDoublyLinkedList

  15. Listas Duplamente Encadeadas • SplDoublyLinkedList ◦ SplStack

  16. Listas Duplamente Encadeadas • SplDoublyLinkedList ◦ SplStack ◦ SplQueue

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

    Características ◦ Trabalham melhor com sequências onde a ordem dos elementos precisa ser respeitada
  18. Árvore • SplHeap ◦ SplMaxHeap ◦ SplMinHeap

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

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

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

    Características ◦ Ordenação automática dos elementos. ◦ Toda iteração acaba percorrendo todos os elementos.
  22. Array • SplFixedArray

  23. 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
  24. Dicionário • SplObjectStorage

  25. 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
  26. NOW STOP LIVE CODING TIME!!

  27. Conclusão

  28. Aprendi que • Estruturas e algoritmos são incríveis de estudar

    • 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!
  29. Referências

  30. • 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
  31. Perguntas?

  32. Muito obrigado! :D https://github.com/devdrops/php-ds @devdrops devdrops.me/about