Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Agenda

Slide 3

Slide 3 text

Agenda ● Introdução à SPL ● Estruturas de Dados ● Conclusão ● Referências

Slide 4

Slide 4 text

Introdução à SPL

Slide 5

Slide 5 text

O que é a SPL? Standard PHP Library Surgiu como parte do core do PHP a partir da versão 5.0.0

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

O que contém? ● Classes ● Funções ● Interfaces ● Exceptions

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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 :)

Slide 10

Slide 10 text

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.

Slide 11

Slide 11 text

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!)

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Estruturas de Dados

Slide 14

Slide 14 text

Listas Duplamente Encadeadas ● SplDoublyLinkedList

Slide 15

Slide 15 text

Listas Duplamente Encadeadas ● SplDoublyLinkedList ○ SplStack

Slide 16

Slide 16 text

Listas Duplamente Encadeadas ● SplDoublyLinkedList ○ SplStack ○ SplQueue

Slide 17

Slide 17 text

Listas Duplamente Encadeadas ● SplDoublyLinkedList ○ SplStack ○ SplQueue ● Características ○ Trabalham melhor com sequências onde a ordem dos elementos precisa ser respeitada

Slide 18

Slide 18 text

Árvore ● SplHeap ○ SplMaxHeap ○ SplMinHeap

Slide 19

Slide 19 text

Árvore ● SplHeap ○ SplMaxHeap ○ SplMinHeap ○ SplPriorityQueue

Slide 20

Slide 20 text

Árvore ● SplHeap ○ SplMaxHeap ○ SplMinHeap ○ SplPriorityQueue Fila, com a implementação de uma árvore :P

Slide 21

Slide 21 text

Árvore ● SplHeap ○ SplMaxHeap ○ SplMinHeap ○ SplPriorityQueue ● Características ○ Ordenação automática dos elementos. ○ Toda iteração acaba percorrendo todos os elementos.

Slide 22

Slide 22 text

Array ● SplFixedArray

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Dicionário ● SplObjectStorage

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

NOW STOP LIVE CODING TIME!!

Slide 27

Slide 27 text

Conclusão

Slide 28

Slide 28 text

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!

Slide 29

Slide 29 text

Referências

Slide 30

Slide 30 text

● 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

Slide 31

Slide 31 text

Perguntas?

Slide 32

Slide 32 text

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