Algoritmos e Estruturas de Dados
com
Confira TODO O CONTEÚDO disponível que você terá acesso, em nossa plataforma exclusiva, incluindo aulas gravadas e a programação das próximas sessões ao vivo.
Tudo organizado para sua conveniência e para enriquecer ainda mais sua experiência de aprendizado!
Masterclass AO VIVO
Acontecem mensalmente nas quintas feiras às 19:30hrs
Confira quais são as próximas sessões de masterclass que já estão agendadas para este grupo:
Entenda o Algoritmo de Multicast Confiável, chave para garantir a entrega de mensagens em sistemas distribuídos.
Aprenda sobre as Árvores de Van Emde Boas e suas operações eficientes para intervalos de inteiros.
Examine algoritmos avançados de roteamento utilizados em modernas redes de comunicação.
Domine Árvores Rubro-Negras, uma estrutura de dados dinâmica para armazenamento e busca eficiente.
Aprenda o Algoritmo GHS e sua aplicação na construção de Árvores Geradoras Mínimas em sistemas distribuídos.
Descubra como Matrizes Esparsas otimizam o armazenamento de dados com muitos elementos nulos.
Masterclass já realizadas
Lições Complementares
Essas lições são elaboradas em colaboração com os alunos, que têm a oportunidade de propor os temas em conjunto com ElemarJr. Confira as lições complementares já disponíveis:
A B-Tree é uma árvore balanceada, ou seja, todas as suas folhas estão no mesmo nível. Ela é usada para armazenar grandes quantidades de dados em disco e em memória secundária, o que a torna muito útil em bancos de dados e sistemas de arquivos que manipulam conjuntos grandes de dados. Ela tenta equilibrar o custo de processamento com o custo de I/O.
Nesta lição falamos sobre o conceito de Pareto, pois é através deste tema que programadores conseguem ter uma visão mais clara da relação entre desempenho de código e recursos utilizados. A ideia ainda pode ser ampliada e dividida em três níveis, onde é possível fazer uma conexão com a arquitetura de software, algoritmos e estruturas de dados e micro otimização.A matemática fornece a base teórica necessária para analisar a eficiência dos algoritmos, entender os princípios subjacentes das estruturas de dados e resolver problemas complexos de maneira lógica e sistemática.
A matemática fornece a base teórica necessária para analisar a eficiência dos algoritmos, entender os princípios subjacentes das estruturas de dados e resolver problemas complexos de maneira lógica e sistemática.
Vídeo dedicado para responder algumas questões em comum dos alunos do grupo de estudos.
Alguns conceitos podem parecer confusos se você tiver ouvindo sobre eles pela primeira vez, é o caso quando falamos sobre “Redução” e “Completude”, mas nesta lição, eu busco te mostrar um pouco do conceito sobre esses dois temas de uma forma mais clara, que te ajude a entender melhor.
QuickSort é um algoritmo de ordenação tremendamente popular. Ele é famoso, principalmente por seu desempenho. Ele adota recursividade e a abordagem “dividir-para-conquistar” – ambos conceitos importantes para quem quer saber algoritmos de verdade. Nesta lição te explico de um jeito descomplicado, passo-a-passo, o QuickSort – esse algoritmo clássico de ordenação.
Você sabe o que é a Binary Heap? Saberia explicar como ela funciona? Se a resposta for não, você pode estar deixando passar excelentes oportunidades de “turbinar” as aplicações que você desenvolve. Nesta lição, te explico de um jeito descomplicado, passo-a-passo, a BinaryHeap – uma estrutura de dados fundamental que serve como base para o HeapSort – um algoritmo clássico de ordenação.
Estudar e compreender esses algoritmos permite que os programadores ampliem seu repertório, adquiram uma base sólida em estruturas de dados e estratégias de solução de problemas, e desenvolvam habilidades analíticas e de otimização. Além disso, os algoritmos clássicos fornecem uma base sólida para explorar algoritmos mais avançados e compreender a teoria por trás deles.
O Bubble Sort é um algoritmo de ordenação simples e intuitivo. Ele percorre a lista várias vezes, comparando pares de elementos adjacentes e trocando-os se estiverem fora de ordem. Nesta lição, te explico de um jeito descomplicado, passo-a-passo, o BubbleSort – esse algoritmo clássico de ordenação.
Na carreira de um programador, ele vai enfrentar diversos desafios na elaboração de códigos. Vão haver problemas mais simples, mais complexos, enfim, são inúmeros cenários. Para ele vai ser importante saber como classificar estes problemas dentro das classes (P, NP, NP-completo, etc), pois é desta forma que ficará mais claro, por exemplo, saber que tipo de algoritmo conseguirá escrever, alinhando com os objetivos de negócio.
Nesta lição, abordamos a importância de definir claramente o que o sucesso significa para você. Explicamos como essa definição ajuda a manter o foco, identificar oportunidades e criar um plano de ação eficiente. Se você está enfrentando dificuldades para alcançar seus objetivos, esse vídeo pode trazer insights valiosos e ser um guia para traçar seu caminho rumo ao sucesso.
#LiveCoding
As sessões de livecoding são realizadas de forma interativa, permitindo a participação ativa dos alunos que desejam aprofundar seus conhecimentos. Confira as sessões de live coding já realizadas:
Você sabe o que é uma hashtable? Saberia como implementar uma? Se a resposta é NÃO, eu posso te ajudar. Nesse vídeo, mostro, passo a passo, o que é e como implementar uma hashtable em uma “sessão particular”, com muito código.
Nesta lição, exploramos o fascinante mundo da manipulação de bits com a ajuda de Elemar Júnior e seu grupo de estudos de algoritmos e estruturas de dados! Através de uma conversa descontraída e muito código, vamos entender o que é a manipulação de bits e como ela pode ser aplicada em diversos contextos, desde a criação de representações mais eficientes para campos lógicos até a relação com métodos de compressão, como o Huffman.
Algoritmos genéticos são uma técnica de otimização que se baseia na evolução biológica. Assim como na natureza, onde os indivíduos com características mais vantajosas têm mais chances de sobreviver e passar seus genes para as próximas gerações, nos algoritmos genéticos as soluções mais promissoras são selecionadas para “cruzar” e gerar novas soluções.
Recomendações de Livros
Em algumas sessões de masterclass são recomendados livros para complementar e aprofundar os temas estudados.
Bônus Exclusivo
Introdução a Análise de Algoritmos e Big-O
Saber Big-O é importante porque permite determinar a complexidade de um algoritmo em relação ao tamanho da entrada. Isso ajuda a identificar algoritmos eficientes e escaláveis para lidar com grandes quantidades de dados e muitas requisições simultâneas. Empresas como Google, Amazon e Microsoft frequentemente fazem perguntas sobre complexidade de algoritmos durante o processo de seleção de candidatos.
O desempenho de um algoritmo é fundamental para a eficiência e escalabilidade de uma solução. Compreender como medir e melhorar o desempenho é essencial para criar soluções eficientes e escaláveis. Além disso, muitas empresas valorizam o conhecimento desses conceitos durante o processo de seleção de candidatos.
Medir o desempenho de um algoritmo requer técnicas adequadas para obter resultados precisos. É importante evitar armadilhas comuns, como medir o tempo de execução em um ambiente não controlado ou medir apenas um caso específico em vez de uma amostra representativa de entradas.
A complexidade linear descreve um algoritmo cujo tempo de execução aumenta linearmente com o tamanho da entrada. Isso significa que o tempo de execução é proporcional ao número de elementos na entrada.
A complexidade constante descreve um algoritmo cujo tempo de execução não varia com o tamanho da entrada. Isso significa que o tempo de execução é constante, independentemente do número de elementos na entrada.
A complexidade quadrática descreve um algoritmo cujo tempo de execução aumenta quadraticamente com o tamanho da entrada. Isso significa que o tempo de execução é proporcional ao quadrado do número de elementos na entrada.
A complexidade cúbica descreve um algoritmo cujo tempo de execução aumenta cúbicamente com o tamanho da entrada. Isso significa que o tempo de execução é proporcional ao cubo do número de elementos na entrada.
A complexidade fatorial descreve um algoritmo cujo tempo de execução aumenta exponencialmente com o tamanho da entrada. Isso significa que o tempo de execução é proporcional ao fatorial do número de elementos na entrada.
Big-O é uma notação usada para descrever a complexidade assintótica de um algoritmo. Isso significa que Big-O descreve a taxa de crescimento do tempo de execução ou alocação de recursos em relação ao tamanho da entrada.
P e NP são classes de problemas em teoria da computação. Problemas em P podem ser resolvidos em tempo polinomial, enquanto problemas em NP podem ser verificados em tempo polinomial. A questão P = NP é uma das perguntas mais importantes em ciência da computação.
A complexidade assintótica descreve o comportamento do algoritmo quando a entrada aumenta para um tamanho infinito. Ela é representada por Big-O e é uma forma de descrever a complexidade de um algoritmo sem se preocupar com constantes e termos de baixa ordem.
Escalabilidade é a capacidade de um sistema lidar com o aumento de demanda sem comprometer o desempenho. Na computação, isso se refere à capacidade de um algoritmo lidar com grandes quantidades de dados e muitas requisições simultâneas. A análise de algoritmos é fundamental para determinar a escalabilidade de um algoritmo.
Existem várias técnicas para determinar a complexidade de um algoritmo, incluindo análise de tempo, análise de espaço e análise assintótica. A análise assintótica, representada por Big-O, é uma forma de descrever a complexidade de um algoritmo sem se preocupar com constantes e termos de baixa ordem. Ela é a técnica mais comum e útil para determinar a complexidade de um algoritmo.
Bônus Exclusivo
Arquitetura de Software
Você terá acesso exclusivo a uma aula gravada de mentoria de arquitetura de software, com um conteúdo extremamente valioso para impulsionar sua carreira. Nessa aula, você terá 2 horas e 30 minutos de informações e insights poderosos. Não perca essa oportunidade incrível de aprender com um especialista no assunto.
Telegram
Grupo no Telegram é uma comunidade criada exclusivamente para nossos alunos onde é possível debater, compartilhar, obter novos aprendizados e ainda fazer um super networking.
Plano semestral
Com mais de 30 anos de experiência e uma carreira internacional bem-sucedida, Elemar Jr. compartilha suas vivências para ajudar outros profissionais a aproveitarem oportunidades e evitarem desafios que enfrentou em sua trajetória.
Ele aprendeu que conhecer os fundamentos, como algoritmos e estruturas de dados, é mais importante para resolver problemas do que seguir as tendências de bibliotecas e frameworks. Sua abordagem tem levado a resultados maiores e mais rápidos, influenciando outras pessoas a seguirem o mesmo caminho.
Há anos, Elemar vem ajudando desenvolvedores a fazer software de maneira mais efetiva, enfatizando a importância do estudo dos fundamentos.
Por isso, hoje se considera mais do que um desenvolvedor de software, mas também um profissional que ajuda a “desenvolver gente que desenvolve software”.
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de DDD do Jeito Certo:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados:
Preencha os dados a seguir para iniciar o seu cadastro no Programa ElemarJR de Aceleração, Do Jeito Certo:
Preencha os dados a seguir para iniciar o seu cadastro no Programa ElemarJR de Aceleração, Do Jeito Certo:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de DDD do Jeito Certo:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de DDD do Jeito Certo:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados:
Para se candidatar nesta turma aberta, preencha o formulário a seguir:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Reputação e Marketing Pessoal:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de DDD do Jeito Certo:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Padrões de Projeto:
Preencha os dados a seguir para iniciar o seu cadastro no Grupo Intensivo de Estudos de Algoritmos e Estruturas de Dados: