DAA - Introdução

Um algoritmo é um conjunto de etapas de operações para resolver um problema de execução de cálculos, processamento de dados e tarefas de raciocínio automatizadas. Um algoritmo é um método eficiente que pode ser expresso em uma quantidade finita de tempo e espaço.

Um algoritmo é a melhor maneira de representar a solução de um problema específico de uma forma muito simples e eficiente. Se tivermos um algoritmo para um problema específico, podemos implementá-lo em qualquer linguagem de programação, o que significa que oalgorithm is independent from any programming languages.

Projeto de Algoritmo

Os aspectos importantes do projeto de algoritmo incluem a criação de um algoritmo eficiente para resolver um problema de maneira eficiente usando o mínimo de tempo e espaço.

Para resolver um problema, diferentes abordagens podem ser seguidas. Alguns deles podem ser eficientes com relação ao consumo de tempo, enquanto outras abordagens podem ser eficientes em termos de memória. No entanto, é preciso ter em mente que o consumo de tempo e o uso de memória não podem ser otimizados simultaneamente. Se exigirmos que um algoritmo seja executado em menos tempo, teremos que investir em mais memória e se exigirmos que um algoritmo seja executado com menos memória, precisaremos ter mais tempo.

Etapas de desenvolvimento de problema

As etapas a seguir estão envolvidas na solução de problemas computacionais.

  • Definição de problema
  • Desenvolvimento de um modelo
  • Especificação de um Algoritmo
  • Projetando um Algoritmo
  • Verificar a exatidão de um algoritmo
  • Análise de um Algoritmo
  • Implementação de um Algoritmo
  • Teste de programa
  • Documentation

Características dos Algoritmos

As principais características dos algoritmos são as seguintes -

  • Algoritmos devem ter um nome único

  • Os algoritmos devem ter definido explicitamente um conjunto de entradas e saídas

  • Algoritmos são bem ordenados com operações inequívocas

  • Algoritmos param em um período finito de tempo. Algoritmos não devem ser executados para o infinito, ou seja, um algoritmo deve terminar em algum ponto

Pseudo-código

O pseudocódigo fornece uma descrição de alto nível de um algoritmo sem a ambigüidade associada ao texto simples, mas também sem a necessidade de conhecer a sintaxe de uma linguagem de programação específica.

O tempo de execução pode ser estimado de uma maneira mais geral usando o Pseudocódigo para representar o algoritmo como um conjunto de operações fundamentais que podem então ser contadas.

Diferença entre Algoritmo e Pseudocódigo

Um algoritmo é uma definição formal com algumas características específicas que descreve um processo, que pode ser executado por uma máquina de computador Turing-completa para realizar uma tarefa específica. Geralmente, a palavra "algoritmo" pode ser usada para descrever qualquer tarefa de alto nível em ciência da computação.

Por outro lado, pseudocódigo é uma descrição legível por humanos informal e (frequentemente rudimentar) de um algoritmo que deixa muitos detalhes granulares dele. A escrita de um pseudocódigo não possui restrição de estilos e seu único objetivo é descrever as etapas de alto nível do algoritmo de uma maneira muito realista em linguagem natural.

Por exemplo, a seguir está um algoritmo para Insertion Sort.

Algorithm: Insertion-Sort 
Input: A list L of integers of length n  
Output: A sorted list L1 containing those integers present in L 
Step 1: Keep a sorted list L1 which starts off empty  
Step 2: Perform Step 3 for each element in the original list L  
Step 3: Insert it into the correct position in the sorted list L1.  
Step 4: Return the sorted list 
Step 5: Stop

Aqui está um pseudocódigo que descreve como o processo abstrato de alto nível mencionado acima no algoritmo Insertion-Sort poderia ser descrito de uma forma mais realista.

for i <- 1 to length(A) 
   x <- A[i] 
   j <- i 
   while j > 0 and A[j-1] > x 
      A[j] <- A[j-1] 
      j <- j - 1 
   A[j] <- x

Neste tutorial, os algoritmos serão apresentados na forma de pseudocódigo, que é semelhante em muitos aspectos a C, C ++, Java, Python e outras linguagens de programação.