Soluções        Serviços          Atendimento       Governo        Consultoria T.I      Treinamento

Software

Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito e com uma quantidade de esforço finita.

O conceito de algoritmo é frequentemente ilustrado pelo exemplo de uma receita culinária, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações) ou necessitar de decisões (tais como comparações ou lógica) até que a tarefa seja completada. Um algoritmo corretamente executado não irá resolver um problema se estiver implementado incorretamente ou se não for apropriado ao problema.

Um algoritmo não representa, necessariamente, um programa de computador, e sim os passos necessários para realizar uma tarefa. Sua implementação pode ser feita por um computador, por outro tipo de autômato ou mesmo por um ser humano. Diferentes algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instruções em mais ou menos tempo, espaço ou esforço do que outros. Tal diferença pode ser reflexo da complexidade computacional aplicada, que depende de estruturas de dados adequadas ao algoritmo. Por exemplo, um algoritmo para se vestir pode especificar que você vista primeiro as meias e os sapatos antes de vestir a calça enquanto outro algoritmo especifica que você deve primeiro vestir a calça e depois as meias e os sapatos. Fica claro que o primeiro algoritmo é mais difícil de executar que o segundo apesar de ambos levarem ao mesmo resultado.

O conceito de um algoritmo foi formalizado em 1936 pela Máquina de Turing de Alan Turing e pelo cálculo lambda de Alonzo Church, que formaram as primeiras fundações da Ciência da computação.

Índice

  • 1 Etimologia
  • 2 Formalismo
    • 2.1 Término do algoritmo
  • 3 Implementação
  • 4 Análise de algoritmos
  • 5 Classificação
    • 5.1 Classificação por implementação
    • 5.2 Classificação por paradigma
    • 5.3 Classificação por campo de estudo
    • 5.4 Classificação por complexidade
  • 6 Referências
  • 7 Ver também
  • 8 Ligações externas

Etimologia

A palavra algoritmo tem origem no sobrenome, Al-Khwarizmi, do matemático persa do século IX Mohamed ben Musa, cujas obras foram traduzidas no ocidente cristão no século XII, tendo uma delas recebido o nome Algorithmi de numero indorum, sobre os algoritmos usando o sistema de numeração decimal (indiano). Outros autores, entretanto, defendem a origem da palavra em Al-goreten (raiz - conceito que se pode aplicar aos cálculos).[1]

Formalismo

Fluxograma, um exemplo de algoritmo imperativo. O estado em vermelho indica a entrada do algoritmo enquanto os estados em verde indicam as possíveis saídas.

Um programa de computador é essencialmente um algoritmo que diz ao computador os passos específicos e em que ordem eles devem ser executados, como por exemplo, os passos a serem tomados para calcular as notas que serão impressas nos boletins dos alunos de uma escola. Logo, o algoritmo pode ser considerado uma sequência de operações que podem ser simuladas por uma máquina de Turing completa.

Quando os procedimentos de um algoritmo envolvem o processamento de dados, a informação é lida de uma fonte de entrada, processada e retornada sob novo valor após processamento, o que geralmente é realizado com o auxílio de uma ou mais estrutura de dados.

Para qualquer processo computacional, o algoritmo precisa estar rigorosamente definido, especificando a maneira que ele se comportará em todas as circunstâncias. A corretividade do algoritmo pode ser provada matematicamente, bem como a quantidade assintótica de tempo e espaço (complexidade) necessários para a sua execução. Estes aspectos dos algoritmos são alvo da análise de algoritmos.

A maneira mais simples de se pensar um algoritmo é por uma lista de procedimentos bem definida, na qual as instruções são executadas passo a passo a partir do começo da lista, uma idéia que pode ser facilmente visualizada através de um fluxograma. Tal formalização adota as premissas da programação imperativa, que é uma forma mecânica para visualizar e desenvolver um algoritmo. Concepções alternativas para algoritmos variam em programação funcional e programação lógica.

Término do algoritmo

Alguns autores restringem a definição de algoritmo para procedimentos que eventualmente terminam. Marvin Minsky constatou que se o tamanho de um procedimento não é conhecido de antemão, tentar descobri-lo é um problema indecidível, já que o procedimento pode ser executado infinitamente, de forma que nunca se terá a resposta. Alan Turing provou em 1936 que não existe máquina de Turing para realizar tal análise para todos os casos, logo não há algoritmo para realizar tal tarefa para todos os casos. Tal condição é conhecida atualmente como problema da parada.

Para algoritmos intermináveis o sucesso não pode ser determinado pela interpretação da resposta e sim por condições impostas pelo próprio desenvolvedor do algoritmo durante sua execução.

Implementação

A maioria dos algoritmos é desenvolvida para ser implementada em um programa de computador. Apesar disso eles também podem ser implementados por outros modos tais como uma rede neural biológica (tal como no cérebro quando efetuamos operações aritméticas) em circuitos elétricos ou até mesmo em dispositivos mecânicos.

Para programas de computador existe uma grande variedade de linguagens de programação, cada uma com características específicas que podem facilitar a implementação de determinados algoritmos ou atender a propósitos mais gerais.

Análise de algoritmos


A análise de algoritmos é um ramo da ciência da computação que estuda as técnicas de projeto de algoritmos e os algoritmos de forma abstrata, sem estarem implementados em uma linguagem de programação em particular ou implementadas de algum outro modo. Ela preocupa-se com os recursos necessários para a execução do algoritmo tais como o tempo de execução e o espaço de armazenamento de dados. Deve-se perceber que para um dado algoritmo pode-se ter diferentes quantidades de recursos alocados de acordo com os parâmetros passados na entrada. Por exemplo, se definirmos que o fatorial de um número natural é igual ao fatorial de seu antecessor multiplicado pelo próprio número, fica claro que a execução de fatorial(10) consome mais tempo que a execução de fatorial(5).

Um meio de exibir um algoritmo a fim de analisá-lo é através da implementação por pseudocódigo em português estruturado. O exemplo a seguir é um algoritmo em português estruturado que retorna (valor de saída) a soma de dois valores (também conhecidos como parâmetros ou argumentos, valores de entrada) que são introduzidos na chamada da função:

Algoritmo "SomaDeDoisValores";

variável:

SOMA,A,B: inteiro;
inicio
Escreva("Digite um numero");
Leia(A);
escreva("digite outro numero");
leia(B);
SOMA ← A + B;
escreva(SOMA);
fim.

Classificação

Classificação por implementação

Pode-se classificar algoritmos pela maneira pelo qual foram implementados.

  • Recursivo ou iterativo - um algoritmo recursivo possui a característica de invocar a si mesmo repetidamente até que certa condição seja satisfeita e ele é terminado, que é um método comum em programação funcional. Algoritmos iterativos usam estruturas de repetição tais como laços, ou ainda estruturas de dados adicionais tais como pilhas, para resolver problemas. Cada algoritmo recursivo possui um algoritmo iterativo equivalente e vice-versa, mas que pode ter mais ou menos complexidade em sua construção.
  • Lógico - um algoritmo pode ser visto como uma dedução lógica controlada. O componente lógico expressa os axiomas usados na computação e o componente de controle determina a maneira como a dedução é aplicada aos axiomas. Tal conceito é base para a programação lógica.
  • Serial ou paralelo - algoritmos são geralmente assumidos por serem executados instrução a instrução individualmente, como uma lista de execução, o que constitui um algoritmo serial. Tal conceito é base para a programação imperativa. Por outro lado existem algoritmos executados paralelamente, que levam em conta as arquiteturas de computadores com mais de um processador para executar mais de uma instrução ao mesmo tempo. Tais algoritmos dividem os problemas em subproblemas e o delegam a quantos processadores estiverem disponíveis, agrupando no final o resultado dos subproblemas em um resultado final ao algoritmo. Tal conceito é base para a programação paralela. De forma geral, algoritmos iterativos são paralelizáveis; por outro lado existem algoritmos que não são paralelizáveis, chamados então problemas inerentemente seriais.
  • Determinístico ou não-determinístico - algoritmos determinísticos resolvem o problema com uma decisão exata a cada passo enquanto algoritmos não-determinísticos resolvem o problema ao deduzir os melhores passos através de estimativas sob forma de heurísticas.
  • Exato ou aproximado - enquanto alguns algoritmos encontram uma resposta exata, algoritmos de aproximação procuram uma resposta próxima a verdadeira solução, seja através de estratégia determinística ou aleatória. Possuem aplicações práticas sobretudo para problemas muito complexos, do qual uma resposta correta é inviável devido à sua complexidade computacional.

Classificação por paradigma

Pode-se classificar algoritmos pela metodologia ou paradigma de seu desenvolvimento, tais como:

  • Divisão e conquista - algoritmos de divisão e conquista reduzem repetidamente o problema em sub-problemas, geralmente de forma recursiva, até que o sub-problema é pequeno o suficiente para ser resolvido. Um exemplo prático é o algoritmo de ordenação merge sort. Uma variante dessa metodologia é o decremento e conquista, que resolve um sub-problema e utiliza a solução para resolver um problema maior. Um exemplo prático é o algoritmo para pesquisa binária.
  • Programação dinâmica - pode-se utilizar a programação dinâmica para evitar o re-cálculo de solução já resolvidas anteriormente.
  • Algoritmo ganancioso - um algoritmo ganancioso é similar à programação dinâmica, mas difere na medida em que as soluções dos sub-problemas não precisam ser conhecidas a cada passo, uma escolha gananciosa pode ser feita a cada momento com o que até então parece ser mais adequado.
  • Programação linear
  • Redução - a redução resolve o problema ao transformá-lo em outro problema. É chamado também transformação e conquista.
  • Busca e enumeração - vários problemas podem ser modelados através de grafos. Um algoritmo de exploração de grafo pode ser usado para caminhar pela estrutura e retornam informações úteis para a resolução do problema. Esta categoria inclui algoritmos de busca e backtracking.
  • Paradigma heurístico e probabilístico - algoritmos probabilísticos realizam escolhas aleatoriamente. Algoritmos genéticos tentam encontrar a solução através de ciclos de mutações evolucionárias entre gerações de passos, tendendo para a solução exata do problema. Algoritmos heurísticos encontram uma solução aproximada para o problema.

Classificação por campo de estudo

Cada campo da ciência possui seus próprios problemas e respectivos algoritmos adequados para resolvê-los. Exemplos clássicos são algoritmos de busca, de ordenação, de análise numérica, de teoria de grafos, de manipulação de cadeias de texto, de geometria computacional, de análise combinatória, de aprendizagem de máquina, de criptografia, de compressão de dados e de interpretação de texto.

Classificação por complexidade


Alguns algoritmos são executados em tempo linear, de acordo com a entrada, enquanto outros são executados em tempo exponencial ou até mesmo nunca terminam de serem executados. Alguns problemas possuem múltiplos algoritmos enquanto outros não possuem algoritmos para resolução.

fonte:wikipedia

MAIS INFORMAÇÕES DO SETOR DE SOFTWARE

Sistema de informação de gestão

Sistema de informação de gestão ou sistema de informações gerenciais (SIG; do inglês, manageme [ ... ]


Blog corporativo

Blogs Corporativos podem ser traduzidos em: uso de blogs dentro do cotidiano das empresas. O Blog  [ ... ]


Padrão de projeto de software

Um Padrão de Projeto de Software ou Padrão de Desenho de Software, também muito conhecido pelo te [ ... ]


Kohana Framework

Kohana é um framework para aplicações web de código aberto, escrito em PHP 5 que adota o padr [ ... ]


Orientação a objetos

A orientação a objetos é um paradigma de análise, projeto e programação de sistemas de softwar [ ... ]


Modelo Balbúrdia

No início da computação, poucos programadores seguiam algum tipo de metodologia baseando-se, em [ ... ]


Governança em T.I (Governança corporativa)

Governança corporativa (português brasileiro) ou governo das sociedades ou das empresas (portuguê [ ... ]


Microsoft SharePoint Designer

Microsoft SharePoint Designer Desenvolvedor Microsoft Plataforma x86 e x64  [ ... ]


Zope


Zope Desenvolvedor Zope Corporation Plataforma multiplataforma Versão es [ ... ]


Outsourcing em gestão

O outsourcing em gestão é uma ferramenta administrativa em que o terceririzado realiza a ativida [ ... ]


Rede social

article thumbnail


Rede social Uma rede social é uma estrutura social composta por pessoas ou organizaçõ [ ... ]


Comércio eletrônico

Comércio eletrônico (português brasileiro) ou comércio electrónico (português europeu) ou e-co [ ... ]


IBM Rational Unified Process

O RUP, abreviação de Rational Unified Process (ou Processo Unificado Racional), é um processo pro [ ... ]


Seis Sigma

article thumbnail

Símbolo comumente usado do Seis Sigma
Seis Sigma ou Six Sigma (em inglês) é um conjunto [ ... ]


Web design

article thumbnail

Exemplo de um layout simples. O web design pode ser visto como uma extensão da prática  [ ... ]


Computador

article thumbnail

Um assistente pessoal digital. Um computador pessoal. Columbia, um supercomp [ ... ]


Desenvolvimento de software

Na computação, o desenvolvimento de software é o ato de elaborar e implementar um sistema computa [ ... ]


Computação em nuvem

article thumbnail

A nuvem (cloud) é o símbolo da Internet. O conceito de computação em nuvem (em inglê [ ... ]


ISO da segurança da informação

ISO 27001 Origem: Wikipédia, a enciclopédia livre. ISO/IEC 27001 é um padrão para sistema de g [ ... ]


E-learning


O e-learning, ou ensino eletrónico, corresponde a um modelo de ensino não presencial suportado  [ ... ]


Alta tecnologia

Alta tecnologia (em inglês, high tech) refere-se à tecnologia considerada de ponta (em inglês,  [ ... ]


Paradigmas de programação

Um paradigma de programação fornece e determina a visão que o programador possui sobre a estrut [ ... ]


NF-e ou Nota fiscal eletrônica

article thumbnail

Pela definição oficial brasileira, uma nota fiscal eletrônica (NF-e) é "um documento de existên [ ... ]


Sistema Integrado de Aprendizagem de Produtos e Serviços

Sistema Integrado de Aprendizagem de Produtos e Serviços - Sinapse (acrônimo) é o nome de uma met [ ... ]


CRM - Customer relationship management

Customer Relationship Management (CRM) é uma expressão em inglês que pode ser traduzida para a l [ ... ]


Sistema de informação contábil

O sistema de informação contábil é um dos componentes do sistema de informação gerencial (SIG, [ ... ]


Software livre nos governos

Nos últimos anos a questão do software livre nos governos está na ordem do dia. Alguns governos c [ ... ]


Desenvolvimento web

article thumbnail

Desenvolvimento web é o termo utilizado para descrever o desenvolvimento de sítios, na Internet  [ ... ]


NetBeans

NetBeans Desenvolvedor Oracle Corporation Plataforma x86 e x64 Lançado em  [ ... ]


Melhoria de Processos do Software Brasileiro

O MPS.BR ou Melhoria de Processos do Software Brasileiro é simultaneamente um movimento para a melh [ ... ]


Licenças Microsoft

Microsoft Product Activation O Microsoft Product Activation (MPA, em português, traduz. literal.:  [ ... ]


E-mail marketing

E-mail marketing é a utilização do e-mail como ferramenta de marketing direto, respeitando norma [ ... ]


ArgoUML

ArgoUML é uma aplicação open source que usa UML para modelar o desenho de software de computado [ ... ]


Banco de dados

article thumbnail

Bancos de dados, ou bases de dados (em Portugal), são coleções de informações que se relacion [ ... ]


Arquitetura de dados

Arquitetura de dados é a estrutura dos componentes de dados de uma organização - considerados sob [ ... ]


Hardware

O hardware pode ser definido como um termo geral para equipamentos como chaves, fechaduras, dobra [ ... ]


Análise de requisitos de software

Análise de requerimento de software Origem: Wikipédia, a enciclopédia livre. Na engenharia de [ ... ]


Indústria de software

A Indústria de Software é o conjunto dos negócios que envolvem o desenvolvimento, a manutençã [ ... ]


Ambiente de desenvolvimento integrado

IDE, do inglês Integrated Development Environment ou Ambiente Integrado de Desenvolvimento, é um p [ ... ]


AJAX


AJAX (acrônimo em língua inglesa de Asynchronous Javascript and XML, em português "Javascript  [ ... ]


Smartphone

article thumbnail

Galaxy Nexus, exemplo de Smartphone. Nokia Communicator 9000, 9110, 9210, 9500  [ ... ]


Rede de computadores

article thumbnail

A Wikipédia possui o portal:
Portal das tecnologias de informação Uma rede de comp [ ... ]


Gerenciamento de nível de serviços

Gerenciamento de nível de serviços é uma disciplina de gestão responsável pelo processo gerenci [ ... ]


Teste de software

article thumbnail

O teste do software é a investigação do software a fim de fornecer informações sobre sua qual [ ... ]


Modelo de entidades e relacionamentos

O modelo de entidades e relacionamentos é um modelo abstrato cuja finalidade é descrever, de man [ ... ]


Hierarquia DIKW

DIKW é uma hierarquia informacional utilizada principalmente nos campos da Ciência da Informação [ ... ]


Tecnologia da informação

article thumbnail

Mapa com os gastos em TI em todo o planeta Tecnologia da Informação (TI) É a área de  [ ... ]


SOA - Arquitetura orientada a Serviços

article thumbnail

Service-Oriented Architecture (SOA), pode ser traduzido como arquitetura orientada a serviços, e é [ ... ]


Rede complexa

Rede Complexa é uma forma de modelar a natureza onde as propriedades de um elemento são resumidas [ ... ]


Programação extrema

Programação extrema (do inglês eXtreme Programming), ou simplesmente XP, é uma metodologia ág [ ... ]


Artigos Relacionados

Pluriverso - Inteligência em Tecnologia

Pluriverso - Inteligência em Tecnologia


Ed.Centro Sul, 2°Andar, SCIA, Qd. 14, Conj. 07, Lt 1, S. Ind.
CEP: 71.250-135, Brasília-DF.  
Como Chegar
| Atendimento  


+55 (61) 4141.5555

Serviços

Desenvolvimento de Software
Oursourcing de T.I
Consultoria em Tecnologia
Licitação com o Governo

Produtos

ERP, CRM, Colaboração
Cloud Computing

Soluções
Soluções em Outsourcing de Tecnologia
Integração de Software
Avaliação de nível tecnológico
Cálculo de custos de T.I
Softwares customizados


Porque escolher a Pluriverso

Blog Corporativo
Blog do Software

Conheça a Pluriverso
quem somos
verticais de atuação
portifólio
casos de sucesso

Atendimento
contatos
sala de imprensa
como chegar
Trabalhe conosco

desenvolvimento de software