Mudanças entre as edições de "Algoritmos e Estruturas de Dados"

De CInWiki
Ir para: navegação, pesquisa
 
(7 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
 
{{CourseBox
 
{{CourseBox
 
  | name = Algoritmos e Estruturas de Dados
 
  | name = Algoritmos e Estruturas de Dados
| code = IF672
 
 
  | ccProfessor = [[Paulo Fonseca]]
 
  | ccProfessor = [[Paulo Fonseca]]
  | ccWebsite = [https://cin.ufpe.br/~if672cc https://cin.ufpe.br/~if672cc]
+
  | ccWebsite = https://cin.ufpe.br/~if672cc
 
  | ccSemester = 2
 
  | ccSemester = 2
 +
| ccCode = IF672
 +
| ccClass = I2
 
  | ccRoom = D003
 
  | ccRoom = D003
 
  | ccDateTime = Ter - 08h às 10h / Qui - 10h às 12h
 
  | ccDateTime = Ter - 08h às 10h / Qui - 10h às 12h
 
  | ecProfessor = [[Katia Guimarães]]
 
  | ecProfessor = [[Katia Guimarães]]
| ecWebsite = [https://cin.ufpe.br/~if672ec https://cin.ufpe.br/~if672ec]
 
 
  | ecSemester = 2
 
  | ecSemester = 2
 +
| ecCode = IF672
 +
| ecClass = E2
 
  | ecRoom = D004
 
  | ecRoom = D004
 
  | ecDateTime = Ter - 08h às 10h / Qui - 10h às 12h
 
  | ecDateTime = Ter - 08h às 10h / Qui - 10h às 12h
 +
| siProfessor = [[Renato Vimieiro]]
 +
| siWebsite = https://sites.google.com/a/cin.ufpe.br/if969-aeds-rvimieiro/
 +
| siSemester = S2
 +
| siCode = IF969
 +
| siClass = S2
 +
| siRoom = D002
 +
| siDateTime = Seg - 17h às 18h40 / Qua - 18h50 às 20h30
 +
 
}}
 
}}
  
A disciplina explora o conhecimento e aplicação de Algoritmos e Estrutura de dados para solução de problemas computacionais. O curso é ministrado pela professora Kátia Guimarães e se destaca no segundo período pois requer que o aluno tenha um certo domínio das técnicas de programação e que saiba pensar de forma criativa para solucionar os problemas algorítmicos. A avaliação consiste em duas provas (em alguns anos são aplicadas duas mini-provas no semestre) e de quatro listas. As listas consistem de problemas que os alunos devem solucionar individualmente e são corrigidas de forma automática por um servidor, onde as notas são dadas de acordo com a porcentagem de linhas corretas que a solução gerou para o problema.
+
Estudamos estruturas de dados para que possamos aprender a escrever programas mais eficientes. Mas por que os programas devem ser eficientes quando os novos computadores ficam mais rápidos a cada ano? A razão é que nossas ambições crescem com nossas capacidades. Em vez de tornar as necessidades de eficiência obsoletas, a revolução moderna em poder de computação e capacidade de armazenamento simplesmente aumenta as apostas de eficiência à medida que tentamos tarefas mais complexas.
 
 
As Recomendações para os alunos que estão pagando tal cadeira é tentar fazer as listas com antecedência já que existem bônus para os que entregam as respostas da lista em tempo menor que o estipulado. Para resolver os problemas da lista o aluno deve ter conhecimentos sólidos em programação e nas linguagens Java ou C/C++.
 
 
 
Você pode acessar o site da disciplina [http://cin.ufpe.br/~if672cc/ aqui].
 
 
 
__TOC__
 
 
 
== Professores ==
 
[[Kátia Guimarães]] e Paulo Fonseca
 
 
 
== Objetivos ==
 
O curso visa criar no aluno a capacidade de resolver e compreender problemas algorítmicos, tanto na solução quanto nas questões de eficiência de uso dos recursos computacionais (Tempo e Espaço de Memória). Também é discutido sobre tópicos em complexidade dos algoritmos e sobre estruturas básicas de dados. Em particular, pretende-se alcançar os seguintes objetivos:
 
 
 
* Saber como usar de estrutura de dados para solução de problemas
 
* Discutir e avaliar a complexidade dos algoritmos
 
* Ter conhecimento dos algoritmos e do contexto que eles podem ser utilizados.
 
* Compreender as diferentes classes de algoritmos, estudados na teoria da complexidade computacional.
 
 
 
== Tópicos Abordados ==
 
 
 
*Estrutura de dados: [http://pt.wikipedia.org/wiki/Estrutura_de_dados#Fila Fila],[http://pt.wikipedia.org/wiki/Estrutura_de_dados#Lista Lista], [http://pt.wikipedia.org/wiki/Estrutura_de_dados#Pilha Pilha], [http://pt.wikipedia.org/wiki/Estrutura_de_dados#.C3.81rvores Árvores], [http://pt.wikipedia.org/wiki/Estrutura_de_dados#Grafo Grafos], [http://pt.wikipedia.org/wiki/Heap Heap].
 
  
*Algoritmos: [http://pt.wikipedia.org/wiki/Algoritmo_de_ordena%C3%A7%C3%A3o Ordenação],[http://pt.wikipedia.org/wiki/Busca_em_profundidade Busca em Grafos], [http://pt.wikipedia.org/wiki/Pesquisa_bin%C3%A1ria Busca Binária], [http://pt.wikipedia.org/wiki/Algoritmo_de_Dijkstra Dijkstra], [http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_din%C3%A2mica Programação Dinâmica]
+
A busca pela eficiência do programa não precisa e não deve entrar em conflito com o design e a clareza do código. Criar programas eficientes tem pouco a ver com "truques de programação", mas sim com base em boa organização de informações e bons algoritmos. É provável que um programador que não dominou os princípios básicos de um design claro escreva programas pouco eficientes. Por outro lado, as preocupações relacionadas aos custos de desenvolvimento e manutenção não devem ser usadas como uma desculpa para justificar um desempenho ineficiente. A generalidade no design pode e deve ser alcançada sem sacrificar o desempenho, mas isso só pode ser feito se o designer entender como medir o desempenho e fizer parte integrante do processo de projeto e implementação. A maioria dos currículos de ciência da computação reconhece que as boas habilidades de programação começam com uma forte ênfase nos princípios fundamentais de engenharia de software. Então, uma vez que um programador aprendeu os princípios de design e implementação de programas claros, o próximo passo é estudar os efeitos da organização de dados e algoritmos sobre a eficiência do programa.

Edição atual tal como às 08h32min de 1 de novembro de 2017

Erro em Lua: Não é possível criar o processo: proc_open(/dev/null): failed to open stream: Operation not permitted

Estudamos estruturas de dados para que possamos aprender a escrever programas mais eficientes. Mas por que os programas devem ser eficientes quando os novos computadores ficam mais rápidos a cada ano? A razão é que nossas ambições crescem com nossas capacidades. Em vez de tornar as necessidades de eficiência obsoletas, a revolução moderna em poder de computação e capacidade de armazenamento simplesmente aumenta as apostas de eficiência à medida que tentamos tarefas mais complexas.

A busca pela eficiência do programa não precisa e não deve entrar em conflito com o design e a clareza do código. Criar programas eficientes tem pouco a ver com "truques de programação", mas sim com base em boa organização de informações e bons algoritmos. É provável que um programador que não dominou os princípios básicos de um design claro escreva programas pouco eficientes. Por outro lado, as preocupações relacionadas aos custos de desenvolvimento e manutenção não devem ser usadas como uma desculpa para justificar um desempenho ineficiente. A generalidade no design pode e deve ser alcançada sem sacrificar o desempenho, mas isso só pode ser feito se o designer entender como medir o desempenho e fizer parte integrante do processo de projeto e implementação. A maioria dos currículos de ciência da computação reconhece que as boas habilidades de programação começam com uma forte ênfase nos princípios fundamentais de engenharia de software. Então, uma vez que um programador aprendeu os princípios de design e implementação de programas claros, o próximo passo é estudar os efeitos da organização de dados e algoritmos sobre a eficiência do programa.