Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Davi Marcondes Moreira

May 26, 2017
Tweet

More Decks by Davi Marcondes Moreira

Other Decks in Programming

Transcript

  1. 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)
  2. O que contém? • Classes • Funções • Interfaces •

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

    ◦ PHP Hash Table (DJBX33A) ◦ Formato dinâmico e seu custo na memória
  4. 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 :)
  5. 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.
  6. 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!)
  7. E para quê saber disso tudo? • Identificar as situações

    que acontecem dentro da sua aplicação. • Saber aplicar qual estrutura é a mais adequada.
  8. Listas Duplamente Encadeadas • SplDoublyLinkedList ◦ SplStack ◦ SplQueue •

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

    Características ◦ Ordenação automática dos elementos. ◦ Toda iteração acaba percorrendo todos os elementos.
  10. 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
  11. 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
  12. 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!
  13. • 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