Exercício resolvidos durante o Curso de Grafos e Algoritmos (como aluno de Engenharia da Computação) do Departamento de Computação da Universidade Federal de Sergipe.
Victor Hazin é um engenheiro de software e professor com mais de 10 anos de experiência. Ele possui graduação e mestrado em Ciências da Computação pela UFPE.
Este documento apresenta o uso de varargs no Java, permitindo que métodos aceitem uma quantidade variável de parâmetros do mesmo tipo. São mostrados três métodos soma() para somar números, um aceitando dois parâmetros fixos, outro três fixos, e um usando varargs para aceitar uma array de inteiros. O último método soma() é reescrito usando varargs para aceitar uma quantidade variável de inteiros.
Apresentação no TDC2013 - Florianópolis da trilha Mobile e Embedded (25/05/2013). Apresenta algumas dicas, técnicas e sugestões de como melhorar o processamento e uso de memória no código.
Este documento descreve como objetos Java podem ser transformados e enviados como parâmetros para procedures no Oracle, permitindo a integração entre as linguagens Java e PL/SQL. Ele também discute como listas de objetos podem ser mapeadas para tipos tabela no Oracle e retornadas como resultados de queries.
JavaFX é uma plataforma para desenvolvimento de interfaces gráficas ricas baseada na linguagem Java. O documento apresenta os principais conceitos e recursos de JavaFX, como exemplos de código, tipos de dados suportados e animações. Também discute as vantagens e desafios de se usar JavaFX.
Victor Hazin é um engenheiro de software e professor com mais de 10 anos de experiência. Ele possui graduação e mestrado em Ciências da Computação pela UFPE.
Este documento apresenta o uso de varargs no Java, permitindo que métodos aceitem uma quantidade variável de parâmetros do mesmo tipo. São mostrados três métodos soma() para somar números, um aceitando dois parâmetros fixos, outro três fixos, e um usando varargs para aceitar uma array de inteiros. O último método soma() é reescrito usando varargs para aceitar uma quantidade variável de inteiros.
Apresentação no TDC2013 - Florianópolis da trilha Mobile e Embedded (25/05/2013). Apresenta algumas dicas, técnicas e sugestões de como melhorar o processamento e uso de memória no código.
Este documento descreve como objetos Java podem ser transformados e enviados como parâmetros para procedures no Oracle, permitindo a integração entre as linguagens Java e PL/SQL. Ele também discute como listas de objetos podem ser mapeadas para tipos tabela no Oracle e retornadas como resultados de queries.
JavaFX é uma plataforma para desenvolvimento de interfaces gráficas ricas baseada na linguagem Java. O documento apresenta os principais conceitos e recursos de JavaFX, como exemplos de código, tipos de dados suportados e animações. Também discute as vantagens e desafios de se usar JavaFX.
O documento fornece uma introdução sobre como criar jogos para Android usando AndEngine, mencionando:
1) É necessário usar uma engine gráfica para criar os jogos;
2) Existem várias engines populares como Corona, jMonkey Engine e AndEngine;
3) Criar jogos requer estudo, dedicação e colocar a mão na massa, começando com uma ideia, layout e programação.
O documento discute como otimizar aplicações Node para o motor V8. Ele explica como o V8 compila código JavaScript para código de máquina nativo e como o Crankshaft e o TurboFan otimizam esse processo. O documento também lista 12 técnicas que podem prejudicar a otimização, como atribuições em argumentos, vazamentos do arguments e uso de for-in em objetos.
1) O documento descreve a aplicação do algoritmo k-NN (k vizinhos mais próximos) utilizando a ordenação Bitônica para resolver o problema da mochila fracionária, onde objetos podem ser colocados parcialmente na mochila.
2) É apresentada a estrutura de dados, funções e algoritmos como Quicksort e Bitônica Sort utilizados para ordenar os elementos e resolver o problema da mochila fracionária de forma paralela.
3) Os resultados da abordagem paralela utilizando Bitônica Sort são comparados com
O documento apresenta técnicas de visão computacional com MATLAB, incluindo detecção de objetos através de features, criação de imagens panorâmicas, análise de movimento por fluxo ótico e classificação de imagens por bag of features. É descrito o processo de detecção de objetos em imagens usando features, extração de descritores e correspondência de pontos. Também são explicados métodos para estimar fluxo ótico em vídeos e criar um classificador de imagens de comida usando bag of features.
Spock é um framework de testes para Java e Groovy que oferece código limpo e fácil de ler, além de ser altamente expressivo. Ele utiliza recursos da linguagem Groovy e é usado por ferramentas como Gradle e Grails. Spock permite definir dados de entrada e saída esperada para os testes, além de limpar recursos utilizados após cada execução por meio de blocos setup, given, when, then e cleanup.
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...Danilo J. S. Bellini
Slides da apresentação no DevInSampa 2013 (18 de maio), com algumas complementações e correções. Esses mesmos slides foram utilizados na apresentação feita no fisl 2014 (2013-07-05).
Este documento discute os motivos pelos quais o autor gosta da linguagem Scala. Brevemente aborda conceitos como programação funcional, concorrência, atores e como Scala suporta esses paradigmas de maneira elegante.
Este documento apresenta as etapas para desenvolvimento de um jogo 2D usando a biblioteca AndEngine, incluindo a criação de sprites, animações, física e colisões.
O documento discute iteração em diferentes linguagens de programação como C, Java e Python. Ele apresenta exemplos de como iterar sobre argumentos da linha de comando, strings e outros iteráveis em cada linguagem. O documento também explica conceitos-chave relacionados à iteração em Python como iteráveis, iteradores, geradores e o uso do método enumerate().
O documento discute Git e GitHub, ferramentas de controle de versão. Explica que Git permite backup e controle de versão de código e lista alguns comandos básicos. Também descreve GitHub como uma plataforma de hospedagem para compartilhamento e contribuição em projetos open source.
AudioLazy é um projeto open source que fornece ferramentas de processamento digital de sinal (DSP) expressivas e em tempo real para Python. Ele permite análise, síntese e processamento de áudio com código Python de forma concisa e facilita a prototipagem de aplicações de áudio interativas e em tempo real.
Este documento fornece um resumo de uma palestra sobre iteráveis, geradores e interfaces em Python. O palestrante discute:
1) Como iterar sobre diferentes tipos de objetos em Python usando laços for;
2) A diferença entre iteradores e geradores;
3) Como criar objetos iteráveis e iteradores em Python usando interfaces como Iterable e protocolos como sequência.
Implementação de Aplicações Móveis e Jogos com Python - Aula 4Flávio Ribeiro
Este documento fornece uma revisão sobre aplicações móveis e jogos com Python para S60. Ele discute tópicos como formulários, guias, bluetooth, rede e câmera. Também fornece dicas sobre organização de projetos Python para S60.
O documento discute iteradores e iteráveis em Python, incluindo: 1) Como obter iteradores de objetos através da função built-in iter(); 2) Como iter funciona com dois argumentos para criar um iterador; 3) Tipos iteráveis como sequências e suas interfaces; 4) Listas de compreensão versus expressões geradoras.
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Flávio Ribeiro
O documento discute implementação de aplicações móveis e jogos com Python, abordando tópicos como Bluetooth, câmera, rede e informações do sistema. Ele fornece exemplos de código para realizar tarefas como transferência de arquivos via Bluetooth, captura e envio de fotos, comunicação via rede e acesso a detalhes do dispositivo.
O documento discute as características da tipagem dinâmica que o Java não possui, como variáveis sem tipo e checagem de tipos em tempo de execução. Também aborda conceitos como duck typing, funções de primeira classe, closure e list comprehension, presentes em linguagens de tipagem dinâmica como Python, Ruby e Javascript.
O documento apresenta exemplos de códigos Java para controle de programa usando estruturas condicionais e repetitivas e arrays unidimensionais e bidimensionais. Também apresenta o esboço de um sistema de agendamento de visitas comerciais com classes como Cliente, Produto, Vendedor e Visita.
O documento resume técnicas de refactoring de código, apresentando um exemplo de extração de método onde fragmentos de código são agrupados em métodos com nomes explicativos para tornar a lógica mais clara.
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
O documento discute o conceito de refatoração de código e apresenta um exemplo de como refatorar um código para melhorar sua estrutura e legibilidade. O Capitão Nascimento explica que a refatoração envolve reescrever um programa preservando seu comportamento para facilitar a manutenção e entendimento do código. Ele também destaca a importância de testar o código e sentir quando ele tem "mau cheiro" para identificar onde pode ser refatorado.
O documento fornece uma introdução sobre como criar jogos para Android usando AndEngine, mencionando:
1) É necessário usar uma engine gráfica para criar os jogos;
2) Existem várias engines populares como Corona, jMonkey Engine e AndEngine;
3) Criar jogos requer estudo, dedicação e colocar a mão na massa, começando com uma ideia, layout e programação.
O documento discute como otimizar aplicações Node para o motor V8. Ele explica como o V8 compila código JavaScript para código de máquina nativo e como o Crankshaft e o TurboFan otimizam esse processo. O documento também lista 12 técnicas que podem prejudicar a otimização, como atribuições em argumentos, vazamentos do arguments e uso de for-in em objetos.
1) O documento descreve a aplicação do algoritmo k-NN (k vizinhos mais próximos) utilizando a ordenação Bitônica para resolver o problema da mochila fracionária, onde objetos podem ser colocados parcialmente na mochila.
2) É apresentada a estrutura de dados, funções e algoritmos como Quicksort e Bitônica Sort utilizados para ordenar os elementos e resolver o problema da mochila fracionária de forma paralela.
3) Os resultados da abordagem paralela utilizando Bitônica Sort são comparados com
O documento apresenta técnicas de visão computacional com MATLAB, incluindo detecção de objetos através de features, criação de imagens panorâmicas, análise de movimento por fluxo ótico e classificação de imagens por bag of features. É descrito o processo de detecção de objetos em imagens usando features, extração de descritores e correspondência de pontos. Também são explicados métodos para estimar fluxo ótico em vídeos e criar um classificador de imagens de comida usando bag of features.
Spock é um framework de testes para Java e Groovy que oferece código limpo e fácil de ler, além de ser altamente expressivo. Ele utiliza recursos da linguagem Groovy e é usado por ferramentas como Gradle e Grails. Spock permite definir dados de entrada e saída esperada para os testes, além de limpar recursos utilizados após cada execução por meio de blocos setup, given, when, then e cleanup.
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...Danilo J. S. Bellini
Slides da apresentação no DevInSampa 2013 (18 de maio), com algumas complementações e correções. Esses mesmos slides foram utilizados na apresentação feita no fisl 2014 (2013-07-05).
Este documento discute os motivos pelos quais o autor gosta da linguagem Scala. Brevemente aborda conceitos como programação funcional, concorrência, atores e como Scala suporta esses paradigmas de maneira elegante.
Este documento apresenta as etapas para desenvolvimento de um jogo 2D usando a biblioteca AndEngine, incluindo a criação de sprites, animações, física e colisões.
O documento discute iteração em diferentes linguagens de programação como C, Java e Python. Ele apresenta exemplos de como iterar sobre argumentos da linha de comando, strings e outros iteráveis em cada linguagem. O documento também explica conceitos-chave relacionados à iteração em Python como iteráveis, iteradores, geradores e o uso do método enumerate().
O documento discute Git e GitHub, ferramentas de controle de versão. Explica que Git permite backup e controle de versão de código e lista alguns comandos básicos. Também descreve GitHub como uma plataforma de hospedagem para compartilhamento e contribuição em projetos open source.
AudioLazy é um projeto open source que fornece ferramentas de processamento digital de sinal (DSP) expressivas e em tempo real para Python. Ele permite análise, síntese e processamento de áudio com código Python de forma concisa e facilita a prototipagem de aplicações de áudio interativas e em tempo real.
Este documento fornece um resumo de uma palestra sobre iteráveis, geradores e interfaces em Python. O palestrante discute:
1) Como iterar sobre diferentes tipos de objetos em Python usando laços for;
2) A diferença entre iteradores e geradores;
3) Como criar objetos iteráveis e iteradores em Python usando interfaces como Iterable e protocolos como sequência.
Implementação de Aplicações Móveis e Jogos com Python - Aula 4Flávio Ribeiro
Este documento fornece uma revisão sobre aplicações móveis e jogos com Python para S60. Ele discute tópicos como formulários, guias, bluetooth, rede e câmera. Também fornece dicas sobre organização de projetos Python para S60.
O documento discute iteradores e iteráveis em Python, incluindo: 1) Como obter iteradores de objetos através da função built-in iter(); 2) Como iter funciona com dois argumentos para criar um iterador; 3) Tipos iteráveis como sequências e suas interfaces; 4) Listas de compreensão versus expressões geradoras.
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Flávio Ribeiro
O documento discute implementação de aplicações móveis e jogos com Python, abordando tópicos como Bluetooth, câmera, rede e informações do sistema. Ele fornece exemplos de código para realizar tarefas como transferência de arquivos via Bluetooth, captura e envio de fotos, comunicação via rede e acesso a detalhes do dispositivo.
O documento discute as características da tipagem dinâmica que o Java não possui, como variáveis sem tipo e checagem de tipos em tempo de execução. Também aborda conceitos como duck typing, funções de primeira classe, closure e list comprehension, presentes em linguagens de tipagem dinâmica como Python, Ruby e Javascript.
O documento apresenta exemplos de códigos Java para controle de programa usando estruturas condicionais e repetitivas e arrays unidimensionais e bidimensionais. Também apresenta o esboço de um sistema de agendamento de visitas comerciais com classes como Cliente, Produto, Vendedor e Visita.
O documento resume técnicas de refactoring de código, apresentando um exemplo de extração de método onde fragmentos de código são agrupados em métodos com nomes explicativos para tornar a lógica mais clara.
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
O documento discute o conceito de refatoração de código e apresenta um exemplo de como refatorar um código para melhorar sua estrutura e legibilidade. O Capitão Nascimento explica que a refatoração envolve reescrever um programa preservando seu comportamento para facilitar a manutenção e entendimento do código. Ele também destaca a importância de testar o código e sentir quando ele tem "mau cheiro" para identificar onde pode ser refatorado.
O documento apresenta uma introdução à linguagem C, incluindo seu histórico, estrutura básica de programas, diretivas para incluir bibliotecas, e exemplos de entrada e saída de dados. É apresentado o ambiente Dev-C++ para desenvolvimento de programas em C.
O documento apresenta uma introdução à linguagem C, incluindo seu histórico, estrutura básica de programas, diretivas para incluir bibliotecas, e exemplos de entrada e saída de dados. É descrito como usar o ambiente de desenvolvimento Dev-C++ para editar, compilar e executar programas em C.
O documento apresenta uma introdução à visão computacional e à biblioteca OpenCV. Resume os principais tópicos abordados: 1) Apresentação do palestrante; 2) Instalação e uso básico da OpenCV em Python; 3) Exemplos iniciais de detecção de bordas e conversão para escala de cinza usando a biblioteca.
Apresentação para o Hack Thursday (http://hackthursday.com/) sobre a linguagem C. Pode servir como uma introdução para a linguagem. O material é inspirado nesse curso aqui: http://www.cs.cf.ac.uk/Dave/C/ Para quem não participou da apresentação pode ser mais didático olhar o link.
O documento resume algumas funcionalidades pouco conhecidas do Java, como inicialização de mapas usando classes internas anônimas, métodos que retornam subclasses, e o uso de exceções não checadas.
O documento descreve recursos pouco conhecidos da linguagem Java, incluindo inicialização de mapas usando Double BraceInitialization, lançar exceções de métodos sem declaração e acessar membros privados usando reflexão.
O documento apresenta conceitos e técnicas de vetorização. Discute sobre introdução à vetorização, incluindo vantagens do processamento vetorial. Apresenta abordagens para vetorização como auto-vetorização, diretivas como #pragma, e uso de Intel Cilk Plus para notação vetorial.
O documento apresenta códigos em C++ que demonstram o uso de estruturas, uniões e enumeração. São mostrados exemplos de declaração e uso de estruturas para representar dados como alunos e funcionários, exemplos de união para armazenar diferentes tipos de dados e exemplos do uso de enumeração para representar opções em um menu.
Este documento resume as seguintes informações essenciais:
1) Rodrigo Branas é um especialista em refatorização de código e desenvolvimento ágil que oferece treinamentos, escreve artigos e faz palestras.
2) Ele tem formação acadêmica em ciência da computação e gestão de projetos e certificações como PMP, Java e ágil.
3) Rodrigo Branas tem mais de 12 anos de experiência desenvolvendo software Java em diversas empresas.
O documento apresenta as principais novidades da especificação EcmaScript 6 (ES6). Em 3 frases: Apresenta novos recursos como valores padrão para parâmetros, blocos let e const, funções arrow, operador spread, compreensão de arrays, classes, módulos, destructuring e promises. Explica que grande parte dos recursos já está disponível em versões preliminares de navegadores e Node.js, mas a versão final é esperada para o primeiro semestre de 2016.
Webinar: Porque o RTOS não faz o que eu quero?Embarcados
Nesta apresentação iremos abordar três conceitos comuns na programação embarcada e como eles devem ser modificados para que funcionem quando se tem um RTOS no meio: multitasking, temporização e compartilhamento de variáveis.
Acesse o video em: https://www.embarcados.com.br/webinars/webinar-porque-o-rtos-nao-faz-o-que-eu-quero/
O documento resume conceitos fundamentais sobre vetores, matrizes e funções (subrotinas) em linguagem de programação C, incluindo declaração, atribuição, preenchimento e impressão de vetores e matrizes, além de tipos de funções com e sem passagem de parâmetros e retorno de valores.
O documento apresenta informações sobre registros em C++, incluindo definição, declaração, acesso a membros, vetores de registros e passagem de registros como parâmetros para funções. É apresentado um exemplo de cadastro de alunos usando registros e vetores.
Este código Java implementa o algoritmo de ordenação bubble sort para ordenar vetores de números de forma crescente e decrescente. Ele contém métodos para solicitar o tamanho do vetor, preencher o vetor com números, imprimir o vetor, ordenar o vetor de forma crescente usando bubble sort e ordenar o vetor de forma decrescente também usando bubble sort.
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
Julio Viegas é um engenheiro de software e instrutor com 15 anos de experiência trabalhando com tecnologia. Ele fala sobre o framework Spring, ferramentas como Spring Roo, Spring Tool Suite, Grails e CloudFoundry.
1) O documento descreve a linguagem de programação Java, sua história e conceitos principais.
2) Java foi originalmente criado para dispositivos embarcados e lançado publicamente em 1996.
3) A máquina virtual Java (JVM) executa os bytecodes gerados a partir do código Java, tornando a linguagem independente de plataforma.
Similar to Grafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes (20)
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!Annelise Gripp
Você vai encontrar nessa apresentação ferramentas e técnicas que podem ser usadas em todo o processo de Engenharia de Software ponta a ponta, com seu time.
Teoria de redes de computadores redes .docanpproferick
O documento "Teoria de redes de computadores redes" oferece uma visão abrangente dos princípios e elementos fundamentais das redes de computadores. Começando com uma introdução sobre o que constitui uma rede, seus componentes e mecanismos de comunicação, o texto explora a diversidade de redes existentes, desde as redes pessoais de curto alcance (PAN) até as extensas redes de longa distância (WAN), incluindo redes metropolitanas (MAN) e redes de armazenamento (SAN).
Além disso, o documento aprofunda a análise dos tipos de redes cliente-servidor e ponto a ponto, elucidando suas vantagens e desvantagens em diferentes cenários. A transmissão de dados é outro ponto crucial abordado no texto, que detalha os meios físicos de transmissão, como cabos de par trançado, cabos coaxiais e fibra óptica, além das tecnologias sem fio que permitem a comunicação sem a necessidade de cabos.
O documento também apresenta os principais equipamentos de rede, como repetidores, modems, hubs, switches, roteadores, bridges e gateways, detalhando suas funções e a importância de cada um para o funcionamento eficiente de uma rede. Adicionalmente, o texto introduz o conceito de comutação de pacotes, um mecanismo essencial para a transmissão de dados em redes modernas, que permite que múltiplos usuários compartilhem recursos de rede de forma eficiente.
Em resumo, o documento "Teoria de redes de computadores redes" serve como um guia completo para entender os conceitos básicos e os componentes essenciais das redes de computadores, desde os diferentes tipos de redes até os equipamentos que as compõem e os protocolos que regem a comunicação entre dispositivos.O documento "Teoria de redes de computadores redes" oferece uma visão abrangente dos princípios e elementos fundamentais das redes de computadores. Começando com uma introdução sobre o que constitui uma rede, seus componentes e mecanismos de comunicação, o texto explora a diversidade de redes existentes, desde as redes pessoais de curto alcance (PAN) até as extensas redes de longa distância (WAN), incluindo redes metropolitanas (MAN) e redes de armazenamento (SAN).
Além disso, o documento aprofunda a análise dos tipos de redes cliente-servidor e ponto a ponto, elucidando suas vantagens e desvantagens em diferentes cenários. A transmissão de dados é outro ponto crucial abordado no texto, que detalha os meios físicos de transmissão, como cabos de par trançado, cabos coaxiais e fibra óptica, além das tecnologias sem fio que permitem a comunicação sem a necessidade de cabos.
O documento também apresenta os principais equipamentos de rede, como repetidores, modems, hubs, switches, roteadores, bridges e gateways, detalhando suas funções e a importância de cada um para o funcionamento eficiente de uma rede. Adicionalmente, o texto introduz o conceito de comutação de pacotes, um mecanismo essencial para a transmissão de dados em redes modernas, que permite que múltiplos usuários compartilhem recursos de rede de forma eficiente.
Gestão de dados: sua importância e benefíciosRafael Santos
O gerenciamento de dados abrange todos os aspectos do gerenciamento de dados ao longo de seu ciclo de vida — desde a criação até a exclusão ou arquivamento. Isso inclui atividades como entrada de dados, transformação de dados, armazenamento de dados, gerenciamento de metadados e governança de dados.
Esses tópicos de gerenciamento de dados são extremamente importantes. Pense no gerenciamento de dados como a infraestrutura — a espinha dorsal das organizações — permitindo que você tome decisões acertadas com base em dados confiáveis.
Por que escolhi o Flutter - Campus Party Piauí.pdfIan Oliveira
Exploraremos as razões pelas quais o Flutter se tornou o favorito do Google e de desenvolvedores em todo o mundo. Desde sua estrutura flexível e eficiente até sua capacidade de criar aplicativos belos e funcionais em tempo recorde, mergulhe no mundo do Flutter e saiba por que ele está mudando a maneira como pensamos sobre o desenvolvimento de aplicativos móveis. Prepare-se para ser inspirado a dar o próximo passo em direção ao futuro do desenvolvimento de aplicativos multiplataforma com Flutter!
PRATICANDO O SCRUM Scrum team, product owneranpproferick
Scrum: Uma Estrutura Ágil para Projetos Complexos
Scrum é uma estrutura ágil amplamente utilizada para gerenciar e concluir projetos complexos. Sua abordagem iterativa e incremental permite que equipes multifuncionais colaborem de forma eficaz, respondam a mudanças e entreguem produtos de alta qualidade que atendam às necessidades dos clientes.
Princípios Fundamentais do Scrum
Transparência: Todos os aspectos do projeto, incluindo metas, progresso e desafios, são visíveis para todos os membros da equipe e partes interessadas.
Inspeção: O trabalho em andamento é revisado regularmente para identificar desvios do plano e oportunidades de melhoria.
Adaptação: As mudanças necessárias são feitas com base nas informações coletadas durante a inspeção, garantindo que o projeto permaneça no caminho certo.
Papéis no Scrum
Product Owner: Responsável por definir a visão do produto, priorizar as funcionalidades e garantir que o produto entregue valor ao cliente.
Scrum Master: Facilita a implementação do Scrum, remove obstáculos e garante que a equipe siga os princípios e práticas do Scrum.
Equipe de Desenvolvimento: Um grupo multifuncional responsável por entregar um incremento de produto "Pronto" potencialmente utilizável ao final de cada Sprint.
Eventos do Scrum
Sprint: Um período de tempo fixo (normalmente de 1 a 4 semanas) durante o qual um incremento de produto utilizável é criado.
Sprint Planning: Uma reunião no início de cada Sprint para definir as metas da Sprint e planejar o trabalho a ser realizado.
Daily Scrum: Uma breve reunião diária de 15 minutos onde os membros da equipe discutem o progresso, os desafios e o plano para o dia seguinte.
Sprint Review: Uma reunião no final de cada Sprint para apresentar o incremento de produto às partes interessadas e obter feedback.
Sprint Retrospective: Uma reunião após a Sprint Review para que a equipe reflita sobre o processo e identifique oportunidades de melhoria.
Artefatos do Scrum
Product Backlog: Uma lista ordenada de tudo o que é necessário para desenvolver e entregar o produto.
Sprint Backlog: Uma lista de itens do Product Backlog selecionados para serem concluídos durante a Sprint.
Incremento de Produto: Um resultado concreto do trabalho realizado durante a Sprint, que deve ser utilizável e agregar valor ao produto.
Benefícios do Scrum
Maior adaptabilidade a mudanças: O Scrum permite que as equipes respondam rapidamente às mudanças nas necessidades do cliente ou do mercado.
Melhora na qualidade do produto: A ênfase na entrega de incrementos de produto utilizáveis em cada Sprint garante que o produto seja testado e validado regularmente.
Maior satisfação do cliente: O envolvimento do cliente em todo o processo de desenvolvimento garante que o produto final atenda às suas necessidades e expectativas.
Maior produtividade da equipe: O Scrum promove a colaboração, a comunicação e a autonomia da equipe, resultando em maior produtividade e motivação.
Redução de riscos: A abordagem iterativa e incrementa
Como fui de 0 a lead na gringa em 3 anos.pptxtnrlucas
Esse documento conta a história do autor em sua jornada na área de Desenvolvimento de Software e como ele conseguiu chegar numa vaga de liderança numa empresa internacional em um curto período de tempo.
Grafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
1. JULIO CESAR DE ARAUJO MENEZES
PROVA ON-LINE (1ª AVALIAÇÃO - EXERCÍCIO)
GRAFOS E ALGORÍTIMOS
ALGORITMO:
Dijkstra e Bellman-Ford para encontrar caminhos mínimos,
e os de Kruskal e Prim para encontrar árvores geradoras
mínimas.
Orientador: Prof. Dr. Jânio Coutinho Canuto
São Cristóvão/SE
2020
UNIVERSIDADE FEDERAL DE SERGIPE
CENTRO DE CIÊNCIAS EXATAS E TECNOLOGICAS
DEPARTAMENTO DE ENGENHARIA DA COMPUTAÇÃO
2. Serviço Público Federal
Universidade Federal de Sergipe
Centro de Ciências Exatas e Tecnologia
Departamento de Ciência da Computação
Avaliação de Grafos - 2019/2
Professor: Jânio Coutinho Canuto
Na sala de aula vimos os algoritmos de Dijkstra e Bellman-Ford para encontrar caminhos mínimos,
e os de Kruskal e Prim para encontrar árvores geradoras mínimas. Para cada um dos quatro algoritmos
faça:
1) Implemente os algoritmos na linguagem de programação de sua preferência. Não precisa de
executável nem de interface com usuário.
ˆ Os algoritmos de árvore mínima devem ser funções que recebem como argumento o nome de
um arquivo contendo a matriz de adjacência de um dígrafo simples ponderado. O retorno
deve ser a matriz de adjacência da árvore.
ˆ Os algoritmos de caminho mínimo, além do nome do arquivo, também devem receber um
número indicando o vértice de origem como entrada. O retorno deve ser uma lista com a
distância do vértice de origem para os demais vértices.
2) Expresse o número aproximado de operações (somas, subtrações, divisões, multiplicações, com-
parações) necessárias para obter a resposta na sua implementação, em função do número de
vértices e/ou arestas do grafo de entrada.
Os arquivos de testes usados conterão uma lista de valores separados por vírgula. Cada linha do arquivo
de texto corresponde a uma linha da matriz de adjacência. Valores iguais a 0 indicam a ausência de
aresta, valores diferentes de 0 indicam o peso da aresta. Assuma que os vértices são numerados de
1 a N, onde N é o número de linhas da matriz de adjacência, para as entradas e saídas das funções
implementadas.
3. 1 //+++++++++++++++++++++++++++++++++++++++++++++++//
2 //ALUNO: JULIO CESAR DE ARAUJO MENEZES//
3 //PROFESSOR ORIENTADOR: DR. JÂNIO COUTINHO CANUTO//
4 //+++++++++++++++++++++++++++++++++++++++++++++++//
5
6 import java.io.BufferedReader;
7 import java.io.FileNotFoundException;
8 import java.io.FileReader;
9 import java.io.IOException;
10
11 public class Djisktra {
12 int qtd_vert;
13
14 int menor_dist(int dist[], Boolean cam_mais_leve[]) {
15 int min = Integer.MAX_VALUE;
16 int min_index = -1;
17
18 for (int v = 0; v < qtd_vert; v++) // ++++++++ v iterações ++++++++++++++
19 if (cam_mais_leve[v] == false && dist[v] <= min) {
20 min = dist[v];
21 min_index = v;
22 }
23
24 return min_index;
25 }
26 // ++++++++++ v iterações +++++++
27 void imprimirSaida(int dist[], int origem) {
28 System.out.println("V�rtice ttDistancia da origem " +
String.valueOf(origem));
29 for (int i = 0; i < qtd_vert; i++)
30 System.out.println(i + " ttt " + dist[i]);
31 }
32
33 void dijkstra(int grafo[][], int origem) {
34 int dist[] = new int[qtd_vert];
35
36 Boolean cam_mais_leve[] = new Boolean[qtd_vert];
37
38 //+++++++++++++++ inicializa as distancias ++++++++++++++++
39 for (int i = 0; i < qtd_vert; i++) { // v iterações
40 dist[i] = Integer.MAX_VALUE;
41 cam_mais_leve[i] = false;
42 }
43
44 // +++++++++++++++++++distancia da origem para ela mesma+++++++++++++++++++
45 dist[origem] = 0;
46
47 // +++++++++++++++ v(v+v) iterações ++++++++++++++++
48 for (int i = 0; i < qtd_vert - 1; i++) {
49 int u = menor_dist(dist, cam_mais_leve);
50 cam_mais_leve[u] = true;
51 for (int v = 0; v < qtd_vert; v++) {
52 if (!cam_mais_leve[v] && grafo[u][v] != 0 && dist[u] !=
Integer.MAX_VALUE
53 && dist[u] + grafo[u][v] < dist[v]) {
54 dist[v] = dist[u] + grafo[u][v];
55 }
56 }
57 }
58 imprimirSaida(dist, origem);
59 }
60
61 private static void principal(String caminho_arquivo, int origem) throws
FileNotFoundException, IOException {
62 BufferedReader br = new BufferedReader(new FileReader(caminho_arquivo));
63 int qtd_vert = 0;
64 while (br.ready()) { // +++++++++++++ quantidade de vertices ++
65 String linha = br.readLine();
66 linha = linha.replace("n", "");
67 String lin_vet[] = linha.split(",");
68 qtd_vert = lin_vet.length;
69 break;
70 }
4. 71 br = new BufferedReader(new FileReader(caminho_arquivo));
72 int grafo[][] = new int[qtd_vert][qtd_vert];
73 int linha_corr = 0;
74 while (br.ready()) {
75 String linha = br.readLine();
76 linha = linha.replace("n", "");
77 String lin_vet[] = linha.split(",");
78 for (int i = 0; i < lin_vet.length; i++) {
79 grafo[linha_corr][i] = Integer.parseInt(lin_vet[i]);
80 }
81 linha_corr++;
82 }
83 Djisktra djk = new Djisktra();
84 djk.qtd_vert = qtd_vert;
85 djk.dijkstra(grafo, origem);
86 br.close();
87 }
88
89 public static void main(String[] args) throws IOException {
90
91 String caminho_arquivo = ""; //+++++++++++++ preecnher caminho do arquivo
++++++++
92 int origem = 0; // +++++++++++++++++++++++++ origem do vertice ++++++++++
93 principal(caminho_arquivo, origem);
94 }
95
96
97 }
98
5. 1 //+++++++++++++++++++++++++++++++++++++++++++++++//
2 //ALUNO: JULIO CESAR DE ARAUJO MENEZES//
3 //PROFESSOR ORIENTADOR: DR. JÂNIO COUTINHO CANUTO//
4 //+++++++++++++++++++++++++++++++++++++++++++++++//
5
6 import java.io.BufferedReader;
7 import java.io.FileNotFoundException;
8 import java.io.FileReader;
9 import java.io.IOException;
10
11 public class Bford {
12
13 static void bFord(int gf[][], int qtd_vert, int qt_a, int origem) {
14
15 int[] d = new int[qtd_vert];
16 for (int i = 0; i < qtd_vert; i++) // +++++v iterações+++
17 d[i] = Integer.MAX_VALUE;
18
19
20 d[origem] = 0;
21
22 //+++++++++++relaxamento de arestas+++++++++++
23 for (int i = 0; i < qtd_vert - 1; i++) { //+++++v*a iterações++++
24
25 for (int j = 0; j < qt_a; j++) {
26 if (d[gf[j][0]] + gf[j][2] < d[gf[j][1]])
27 d[gf[j][1]] = d[gf[j][0]] + gf[j][2];
28 }
29 }
30
31 //+++++++existe ciclos de pesos negativos++++++++
32 for (int i = 0; i < qt_a; i++) { // +++++++aresta iterações
33 int x = gf[i][0];
34 int y = gf[i][1];
35 int peso = gf[i][2];
36 if (d[x] != Integer.MAX_VALUE && d[x] + peso < d[y])
37 System.out.println("O gf possui algum ciclo de peso negativo");
38 }
39
40 System.out.println("Vertice t dancia da origem " + String.valueOf(origem));
41 for (int i = 0; i < qtd_vert; i++) // +++++++vertice iterações
42 System.out.println(i + "ttt" + d[i]);
43 }
44
45 private static void principal(String caminho_arquivo, int origem) throws
FileNotFoundException, IOException {
46 BufferedReader br = new BufferedReader(new FileReader(caminho_arquivo));
47 int qtd_vert = 0;
48 while (br.ready()) { // +++++++++qtd de vertices
49 String linha = br.readLine();
50 linha = linha.replace("n", "");
51 String lin_vet[] = linha.split(",");
52 qtd_vert = lin_vet.length;
53 break;
54 }
55 br = new BufferedReader(new FileReader(caminho_arquivo));
56
57
58 int qt_a = 0;
59 // ++++++++++++++cont as arestas
60 while (br.ready()) {
61 String linha = br.readLine();
62 linha = linha.replace("n", "");
63 String lin_vet[] = linha.split(",");
64 for (int i = 0; i < lin_vet.length; i++) {
65 if(!lin_vet[i].equalsIgnoreCase("0")) {
66 qt_a++;
67 }
68 }
69
70 }
71 int l_corr = 0;
72 int ar_aux= 0;
6. 73 int gf[][] = new int[qt_a][3];
74 br = new BufferedReader(new FileReader(caminho_arquivo));
75 while (br.ready()) {
76 String linha = br.readLine();
77 linha = linha.replace("n", "");
78 String lin_vet[] = linha.split(",");
79 for (int i = 0; i < lin_vet.length; i++) {
80 if(!lin_vet[i].equalsIgnoreCase("0")) {
81 gf[ar_aux][0] = l_corr;
82 gf[ar_aux][1] = i;
83 gf[ar_aux][2] = Integer.parseInt(lin_vet[i]);
84 aresta_aux ++;
85 }
86 }
87
88 l_corr++;
89 }
90
91 bFord(gf, qtd_vert, qt_a, origem);
92 }
93
94 public static void main(String[] args) throws FileNotFoundException, IOException {
95 String caminho_arquivo = "";
96 int origem = 0;
97 principal(caminho_arquivo, origem);
98 }
99 }
100
7. 1 //+++++++++++++++++++++++++++++++++++++++++++++++//
2 //ALUNO: JULIO CESAR DE ARAUJO MENEZES//
3 //PROFESSOR ORIENTADOR: DR. JÂNIO COUTINHO CANUTO//
4 //+++++++++++++++++++++++++++++++++++++++++++++++//
5
6
7 import java.io.BufferedReader;
8 import java.io.FileReader;
9 import java.io.IOException;
10 import java.util.ArrayList;
11 import java.util.Comparator;
12 import java.util.PriorityQueue;
13
14 public class Kruska {
15 static class Ares {
16 int vert1;
17 int vert2;
18 int peso;
19
20 public ares(int vert1, int vert2, int peso) {
21 this.vert1 = vert1;
22 this.vert2 = vert2;
23 this.peso = peso;
24 }
25 }
26
27 static class Grafo {
28 int vert;
29 ArrayList<Ares> lista_ares = new ArrayList<>();
30
31 Grafo(int vert) {
32 this.vert = vert;
33 }
34
35 public void adicionar_ares(int vert1, int vert2, int peso) {
36 Ares are = new Ares(vert1, vert2, peso);
37 lista_arest.add(are);
38 }
39
40 public void kruska(){
41 PriorityQueue<Ares> pq = new PriorityQueue<>(lista_ares.size(),
Comparator.comparingInt(o -> o.peso));
42
43 //++Adiciona arestas na fila e Ordena com o peso ++
44 for (int i = 0; i <lista_arestas.size() ; i++) { //+++++++++ are
iterações+++++++
45 pq.add(lista_ares.get(i));
46 }
47
48 int [] pai = new int[vert];
49
50 makeSet(pai); // +++++ vert iterações +++++++
51
52 ArrayList<Ares> arvore_geradora = new ArrayList<>();
53
54 int index = 0;
55 while(index<vert-1){ // ++++ vert iterações vert(vert+veret+2vert+are) +++
56 Ares ares = pq.remove();
57 int conjuntoX = find(pai, ares.vert1);// +++ vert iterações ++++
58 int conjuntoY = find(pai, ares.vert2);// ++++vert iterações+++++
59
60 if(conjuntoX!=conjuntoY){
61 arvore_geradora.add(ares);
62 index++;
63 union(pai,conjuntoX,conjuntoY); // +++ vert+vert iterações +++++
64 }
65 }
66 imprimirGrafo(arvore_geradora); // ++++++++ are iterações ++++++++
67 }
68
69 public void makeSet(int [] pai){
70 for (int i = 0; i <vert ; i++) { // +++++++ vert iterações +++++
71 pai[i] = i;