logo

Algoritmo em linguagem C

Um algoritmo é uma sequência de instruções executadas em uma sequência predeterminada para resolver um problema ou concluir um trabalho. Uma função é um bloco de código que pode ser chamado e executado a partir de outras partes do programa.

Um conjunto de instruções para resolver um problema ou realizar uma determinada atividade. Na ciência da computação, os algoritmos são usados ​​para uma ampla gama de operações, desde matemática fundamental até processamento complexo de dados.

Um dos algoritmos comuns usados ​​em C é o algoritmo de classificação. Um algoritmo de classificação organiza uma coleção de itens em uma determinada ordem, como numericamente ou alfabeticamente.

Existem muitos algoritmos de classificação, cada um com vantagens e desvantagens. Os algoritmos de classificação mais comuns em C são quicksort, merge e sort.

Um dos principais recursos do C é o suporte a ponteiros. Isso permite a manipulação eficiente de estruturas de dados, como matrizes, filas, etc. Isso o torna adequado para a implementação de algoritmos que exigem manipulação complexa de dados, como classificação e pesquisa algorítmica.

Um dos exemplos famosos de biblioteca de software implementada em C é a Standard Template Library (STL). Esta biblioteca fornece uma ampla variedade de algoritmos para tarefas como classificação, pesquisa e manipulação de estruturas de dados.

Recursos do algoritmo

Ele define vários recursos importantes do algoritmo, incluindo:

    Entradas: Os algoritmos devem receber entradas que possam ser representadas como valores ou dados.Saída: O algoritmo deve produzir alguma saída. Pode ser consequência de um problema ou de uma solução destinada a resolvê-lo.Clareza: Os algoritmos devem ser definidos com precisão, usando instruções inequívocas que um computador ou outro sistema possa seguir inequivocamente.Finitude: O algoritmo requer etapas limitadas. Isso significa que deve ser encerrado após a execução de um certo número de comandos.Validade: O algoritmo deve ser válido. Em outras palavras, deve ser capaz de produzir uma solução para o problema que o algoritmo foi projetado para resolver em um período de tempo razoável.Eficácia:Um algoritmo deve ser eficaz, o que significa que deve ser capaz de produzir uma solução para o problema que foi projetado para resolver em um período de tempo razoável.Generalidade:Um algoritmo deve ser geral, o que significa que pode ser aplicado a uma ampla gama de problemas, em vez de ser específico a um único problema.

Análise de Algoritmo

A análise algorítmica é o processo de avaliação do desempenho do algoritmo em termos de eficiência, complexidade e outros critérios. Normalmente, isso é feito para avaliar muitos algoritmos e selecionar a solução ideal para um determinado problema ou software.

A análise de algoritmos geralmente envolve medir sua complexidade de tempo e espaço.

Tal como acontece com a complexidade do espaço, que descreve a quantidade de memória ou espaço em disco necessária, a complexidade do tempo descreve quanto tempo um algoritmo determina para executar uma tarefa.

Existem diferentes maneiras de analisar a complexidade de tempo de algoritmos, como notação Big O e Omega. O símbolo Omega fornece um limite superior para a complexidade de tempo do algoritmo, enquanto o símbolo Omega fornece um limite inferior.

Além de medir a complexidade do tempo e do espaço, a análise do algoritmo também inclui outros critérios, como estabilidade, paralelismo e escalabilidade.

    Estabilidade: - Refere-se à capacidade do algoritmo de manter a ordem relativa dos elementos no conjunto de dados.Paralelização:- Refere-se à capacidade de executar operações em paralelo em vários processadores.Escalabilidade:- Por outro lado, refere-se à capacidade de um algoritmo de lidar com grandes volumes de dados e outras entradas.

Eles incluem dois tipos de análise.

eles são:-

  1. Análise prévia.
  2. Análise posterior.

Análise Prévia

Prior é um método de análise de algoritmo que se concentra em estimar o desempenho de um algoritmo com base em suas propriedades matemáticas, sem realmente executar o algoritmo.

Essa abordagem permite analisar a complexidade de tempo e espaço de algoritmos e outras métricas sem a necessidade de implementar e executar os algoritmos.

Análise posterior

A análise posterior, por outro lado, é um método de análise de algoritmo que realmente executa o algoritmo e mede seu desempenho.

Esta abordagem fornece informações mais precisas e detalhadas sobre o desempenho do algoritmo, mas requer a implementação e execução do algoritmo.

Complexidade do Algoritmo

A complexidade algorítmica é uma medida para medir a eficiência e o desempenho do algoritmo. Os algoritmos são geralmente avaliados em termos do tempo e espaço necessários para resolver um problema ou atingir um objetivo específico.

Dois fatores são usados ​​na complexidade do algoritmo.

eles são:-

  1. Fator tempo.
  2. Fator espacial.

Fator tempo

  • A quantidade de tempo que um algoritmo precisa para realizar uma tarefa é chamada de complexidade de tempo. Geralmente é medida pelo número de operações ou etapas que um algoritmo deve executar para resolver um problema.
  • A complexidade de tempo de um algoritmo é importante porque determina quanto tempo leva para ser executado e pode ter um impacto significativo no desempenho do programa e do sistema.
  • A complexidade de tempo de um algoritmo pode ser expressa usando a notação Big O, uma forma de expressar um limite superior na complexidade de tempo de um algoritmo.
  • Um algoritmo com complexidade de tempo O(n) significa que o tempo necessário para executar o algoritmo é diretamente proporcional ao tamanho dos dados de entrada (n).
  • Outras complexidades de tempo comuns são complexidade quadrática O(n^2) e complexidade logarítmica O(log n).

Análise espacial

  • Por outro lado, a complexidade do espaço refere-se à quantidade de memória ou espaço de armazenamento necessária para executar o algoritmo.
  • Isso é importante porque determina o número de recursos necessários para executar algoritmos que podem afetar o desempenho geral do seu aplicativo ou sistema.
  • Se a complexidade espacial do algoritmo for O(n), ele usa uma quantidade de memória que cresce linearmente com o tamanho da entrada.
  • Se o algoritmo tiver complexidade de espaço O(1), ele usará uma quantidade fixa de memória, independentemente do tamanho da entrada.

Como escrever um algoritmo

1. Primeiro defina o problema que você deseja que o algoritmo resolva.

Por exemplo, suponha que queiramos escrever um algoritmo para encontrar o valor máximo em uma lista de números.

2. Divida o problema em etapas menores e gerenciáveis.

  • Inicialize a variável 'max' com o primeiro valor da lista.
  • Para cada valor subsequente na lista, compare com 'max'.
  • Se o valor for maior que 'max', defina 'max' para esse valor.
  • Continue fazendo isso até que todos os valores da lista tenham sido comparados.
  • Retorna o valor final 'máximo'.

3. Escreva seu algoritmo em pseudocódigo ou em uma linguagem de programação.

Algoritmo escrito em pseudocódigo:

 MAX (list) max = list[0] For i = 1 the length of the list list IF[i] > max max = list[i] End for Maximum return Maximum end 

4. Teste seu algoritmo para ter certeza de que está correto e eficiente.

Você pode testar o algoritmo inserindo diferentes listas de números e verificando se ele retorna o valor máximo correto. Você também pode analisar a complexidade de tempo do seu algoritmo para determinar quão bem ele é dimensionado para entradas maiores.

Exemplo:-

Entrada: [1, 5, 2, 7, 3]

Saída: 7.

Explicação: 7 é o valor máximo da lista.

5. Otimize o algoritmo.

Procure maneiras de otimizar algoritmos para torná-los mais rápidos e eficientes. Isso pode envolver a modificação do pseudocódigo ou a implementação de estruturas de dados ou algoritmos mais eficientes.

programa java olá

Escrita básica de algoritmos

Exemplo: - A soma de dois inteiros.

Passo 1 - Iniciar

Passo 2 - Declare três inteiros a, b, c

etapa 3 - Definir os valores de a e b

Passo 4 - Adicione os valores de a e b

Etapa 5 - Salve a saída da etapa 4 em c

Etapa 6 - Imprimir c

Etapa 7 - Parar

Tipo de algoritmos usados ​​na linguagem C.

1. Algoritmos de classificação

C fornece um rico conjunto de tipos de dados e operadores que podem ser usados ​​para implementar vários algoritmos de classificação, como classificação por bolha, classificação por inserção e classificação rápida.

Esses algoritmos são úteis em muitas aplicações porque podem ser usados ​​para classificar dados de diferentes tamanhos e tipos.

Existem diferentes algoritmos de classificação.

eles são:-

(i) Classificação por bolha: Um algoritmo de classificação descomplicado que compara componentes próximos repetidamente e os desativa se estiverem fora de serviço.

O algoritmo para classificação por bolha é: -

  1. Comece com uma lista não classificada de elementos.
  2. Compare os dois primeiros elementos da lista. Se o primeiro elemento for maior que o segundo elemento, troque-os.
  3. Passe para o próximo par de elementos e repita o passo 2 até chegar ao final da lista.
  4. Para cada item da lista, repita as etapas 2 e 3 mais uma vez. isso é conhecido como passes.
  5. Repita as etapas 2 a 4 para toda a lista. À medida que você repete as passagens, os elementos irão 'borbulhar' até a posição correta na lista classificada.
  6. Depois que uma passagem é concluída e nenhuma troca é feita, a lista é classificada e o algoritmo pode parar.
  7. A lista ordenada final é retornada.

(ii) Classificação de inserção : um método de classificação que cria uma lista classificada, um elemento individual por vez, colocando cada um no local apropriado.

O algoritmo para classificação por inserção é: -

  1. Inicialize uma lista classificada vazia e uma lista não classificada dos elementos a serem classificados.
  2. O primeiro membro da lista não ordenada deve ser escolhido e colocado na posição apropriada na lista ordenada.
  3. Repita a etapa 2 para cada elemento subsequente na lista não classificada.
  4. Compare o elemento atual com os elementos da lista ordenada, começando pelo elemento imediatamente à esquerda.
  5. Troque os dois elementos se o elemento atual for menor que o elemento à sua esquerda.
  6. Se o elemento atual for maior que o elemento à sua esquerda, insira-o na posição correta na lista classificada.
  7. Repita as etapas 4 a 6 para cada elemento subsequente na lista não classificada.
  8. Depois que todos os elementos forem processados, a lista classificada conterá todos os elementos na ordem correta.
  9. O processo de classificação está concluído.

(iii) Classificação de seleção : um método de classificação que inicia consistentemente a listagem classificada com os menores detalhes da listagem não ordenada.

O algoritmo para classificação de seleção é: -

  1. Comece definindo o elemento primário da lista como o elemento mínimo.
  2. Repita os itens restantes da lista, comparando cada um com o mínimo atual.
  3. Defina um novo mínimo se um elemento for menor que o existente.
  4. Altere o mínimo atual para o primeiro elemento da lista sempre que ele chegar ao fim.
  5. Para a parte restante não classificada da listagem, repita as etapas 2 a 4, mas comece com o segundo item da lista (pois o primeiro elemento já está classificado).
  6. Continue classificando a lista dessa maneira até que tudo esteja classificado.

(iv) Classificação rápida : um algoritmo de classificação de divisão e conquista que escolhe um elemento pivô e divide a lista em sublistas, dependendo se os elementos são menores ou maiores que o pivô. Depois disso, as sublistas são ordenadas repetidamente até que a lista completa seja ordenada.

O algoritmo para classificação rápida é: -

  1. Escolha um elemento pivô da lista. Normalmente é o primeiro elemento, mas também pode ser um elemento aleatório ou a mediana da lista.
  2. Divida a lista em duas sublistas: uma contendo elementos menores que o pivô e outra contendo elementos maiores que o pivô.
  3. Classifique recursivamente a sublista contendo elementos menores que o pivô usando o mesmo processo.
  4. Use o mesmo procedimento para classificar recursivamente a sublista de entradas maiores que o pivô.
  5. Concatene as sublistas classificadas com o elemento pivô intermediário para formar uma lista totalmente classificada.
  6. Retorne a lista totalmente classificada.

(v) Muito vai : o algoritmo de classificação dividir e conquistar divide a lista em duas metades, classifica cada metade e depois mescla as duas metades na ordem de classificação.

Algoritmo de classificação de mesclagem:

  1. Faça duas sublistas da lista: uma com elementos abaixo do pivô e outra com elementos acima do pivô.
  2. Produz uma nova sublista classificada mesclando sublistas iterativamente até que exista apenas uma sublista. Esta será sua lista ordenada.
  3. Etapas para mesclar dois subdiretórios: –
  4. Crie uma lista vazia para armazenar os elementos classificados.
  5. Compara o primeiro elemento de cada sublista.
  6. Adiciona o elemento menor à nova lista e o remove da sublista pai.
  7. Repita as etapas 2 e 3 até que a lista esteja completamente vazia.
  8. Adiciona os elementos restantes de outras sublistas a uma nova lista.
  9. Substitui a sublista mesclada pela nova lista classificada.
  10. Repita esse processo até que todas as sublistas sejam mescladas em uma lista classificada.

(vi) Classificação de heap : um algoritmo de classificação que classifica elementos usando uma estrutura de dados chamada heap.

Este é o algoritmo de classificação:

    Construir pilha máxima: começando com o primeiro nó não folha, compare cada nó com seus nós filhos e substitua os nós pelo maior de seus filhos para satisfazer a propriedade max heap.Trocar raiz com último elemento: Troque a raiz (maior elemento) pelo último elemento da pilha.
  1. Empilhe o resto dos elementos. Começando pela raiz, cada nó é comparado com seus filhos, trocando os nós com seus filhos mais velhos até que a propriedade max heap seja satisfeita.
  2. Repita as etapas 2 e 3 com os elementos recém-empilhados, exceto o último elemento na posição correta.
  3. Repita esse processo até que reste apenas um elemento na pilha. Isso agora está resolvido.
  4. Heapificar para baixo: começando no nó raiz, ele compara os elementos com seus filhos e troca com o maior dos dois até que a propriedade max heap seja satisfeita.Empilhar: comece com o último elemento do heap, compare-o com seu pai e troque-o com o pai para satisfazer a propriedade max heap.

(vii) Classificação Radix : um algoritmo de classificação que classifica elementos com base nos dígitos ou dígitos de sua representação binária.

O algoritmo para classificação Radix é: -

  1. determine quantos dígitos estão contidos no maior elemento da listagem de entrada.
  2. Inicialize uma variável, digamos, dígito, para 1, que representa o dígito atual.
  3. Crie uma lista vazia para cada valor de dígito possível de 0 a 9.
  4. Itere pela lista de entrada e adicione cada elemento à lista apropriada com base no valor da posição do dígito atual.
  5. Concatene todas as listas para formar a nova lista na ordem das listas de dígitos.
  6. Multiplique digitPlace por 10 para passar para a próxima casa de dígito.
  7. Repita as etapas 4 a 6 para cada casa de dígito até que todos os dígitos do maior elemento tenham sido considerados.
  8. A lista final será ordenada em ordem crescente pelos dígitos dos elementos.
  9. Retorne a lista ordenada final.

2. Algoritmos de busca

C também fornece as ferramentas necessárias para implementar uma variedade de algoritmos de busca, como busca linear e busca binária. Esses algoritmos podem encontrar rapidamente itens específicos em um conjunto de dados, tornando-os úteis para uma ampla gama de aplicações.

Existem muitos tipos de algoritmos de pesquisa.

Eles são:-

(i) Pesquisa linear : um algoritmo de pesquisa básico que examina cada item da listagem, um por um, até encontrar o item desejado.

Algoritmo para pesquisa linear: -

  1. Defina a entrada para o algoritmo: A entrada para um algoritmo de pesquisa linear é uma lista de elementos (ou uma matriz) e um elemento alvo que estamos procurando.
  2. Inicialize uma variável chamada 'index' para -1: Esta variável será usada para armazenar o índice do elemento alvo se for encontrado.
  3. Percorra a lista de elementos: começando pelo primeiro elemento, verifique cada elemento da lista um por um.
  4. Compare o elemento presente com o elemento desejado para avaliação: Mantenha o índice do elemento atual na variável de índice e saia do loop se o elemento moderno e o elemento objetivo forem idênticos.
  5. Retorne o índice do elemento de destino: após a conclusão do loop, retorne o valor armazenado na variável de índice. Se o elemento alvo não for encontrado, o valor do índice será -1.

(ii) Pesquisa binária : um algoritmo de pesquisa que opera dividindo a listagem em metades e pesquisa dentro dessas metades tem maior probabilidade de incluir o elemento.

Algoritmo para pesquisa binária: -

  1. Entrada: uma lista classificada de n elementos e um elemento de destino x.
  2. Inicializar variáveis: defina o índice baixo como 0, o índice alto como n-1 e médio como (baixo+alto)/2.
  3. Inicie um loop: enquanto o índice baixo for menor ou igual ao índice alto, repita as etapas a seguir.
  4. Compare o elemento intermediário com x: se o elemento intermediário for igual a x, retorne o índice intermediário.
  5. Atualize o índice baixo ou alto: se x for maior que o elemento intermediário, defina o índice baixo como médio + 1. Caso contrário, defina o índice alto como médio - 1.
  6. Atualize o índice médio: Mid = (low+high)/2.
  7. Fim do loop: se o índice baixo for maior que o índice alto, então x não está na lista e o algoritmo retorna uma falha.
  8. Saída: O índice de x na lista ou mensagem de falha.

(iii) Pesquisa em profundidade : Um algoritmo de busca que examina cada ramo tanto quanto possível antes de virar.

As seguintes diretrizes se aplicam à pesquisa em profundidade:

  1. selecione o vértice ou nó inicial do gráfico para começar.
  2. Adicione uma marca de visita ao primeiro vértice.
  3. Coloque diretamente o vértice inicial em uma pilha.
  4. Até que a pilha esteja vazia, repita as seguintes ações: -
    • Remova o vértice superior da pilha.
    • Marque como visitado e insira na pilha cada vizinho não visitado do vértice exibido.
  5. Continue este processo até que todos os vértices do gráfico tenham sido visitados.
  6. Depois que todos os vértices forem visitados, o algoritmo estará completo e uma busca em profundidade será realizada no grafo.

(iv) Pesquisa em largura : Um algoritmo de busca que explora todos os vizinhos de um nó antes de passar para o próximo nível.

O algoritmo para a pesquisa em largura é: -

  1. Comece com o nó raiz ou o estado inicial.
  2. Adicione o nó raiz a uma fila.
  3. Verifique se a fila está vazia; se sim, encerre o algoritmo.
  4. Pegue o primeiro elemento da fila e marque-o como visitado.
  5. Amplifique o nó contemporâneo adicionando todos os seus vizinhos não visitados à fila.
  6. Até que o nó desejado seja localizado ou a fila esteja vazia, repita as etapas 3 a 5.
  7. Retorne o caminho do estado preliminar para o estado de destino se o nó objetivo for encontrado.
  8. Encerre o conjunto de regras e informe que o estado da meta não foi identificado se a fila estiver vazia.

(v) Pesquisa de interpolação : um algoritmo de pesquisa que usa os valores dos elementos pesquisados ​​para estimar a posição no índice.

É importante que a matriz seja distribuída uniformemente. Caso contrário, é um algoritmo.

Funciona como esperado.

O algoritmo pode ser resumido da seguinte forma.

  1. Obtenha a lista de entrada e o valor-chave para pesquisar.
  2. Inicialize as variáveis ​​inferiores e superiores no primeiro e no último índices da lista.
  3. Se o valor inferior for menor ou igual ao valor superior, então: -
    1. Calcule a localização estimada usando a seguinte fórmula:
      pos = baixo + ((alto - baixo) / (arr[alto] - arr[baixo])) * (x - arr[baixo]).
    2. Retorne a posição se o valor da posição estimada for um valor chave.
    3. c) Se o valor da posição estimada for menor que o valor chave, defina-o para um valor inferior.
      Posição + 1.
    4. d) Se o valor da posição estimada for maior que o valor definido pela chave, posição - 1 para cima.
  4. Se o valor da chave não for encontrado, retorne -1 para indicar que o valor não está na lista.

(vi) Pesquisa de salto : um método de pesquisa que itera na lista em etapas de comprimento constante até encontrar o elemento relevante ou determinar que ele não está mais presente.

O algoritmo de pesquisa de salto é o seguinte:

  1. Primeiro, defina o tamanho do salto como a raiz quadrada do número de elementos do array.
  2. Define uma variável chamada 'atual' para o primeiro elemento da matriz.
  3. Itera sobre o array saltando pelo tamanho do salto enquanto incrementa uma variável chamada 'jump'.
  4. Passe para o salto seguinte se o elemento existente for menor que o elemento desejado.
  5. Se o elemento atual for maior que o elemento de destino, execute uma pesquisa linear entre o elemento atual e o elemento de salto anterior para encontrar o elemento de destino.
  6. Se o elemento alvo não for encontrado na matriz, ele retornará -1 para indicar que não está na matriz.
  7. Se o elemento for encontrado, ele retornará o índice do elemento no array.

3. Algoritmos gráficos

O suporte do C para ponteiros e estruturas de dados, como arrays e listas vinculadas, o torna adequado para implementar algoritmos que manipulam gráficos, como encontrar o caminho mais curto entre dois nós em um gráfico.

Existem diferentes tipos de algoritmos gráficos.

eles são:-

    Algoritmo de Dijkstra: Um algoritmo que encontra o caminho mais curto entre dois nós em um gráfico, atualizando continuamente a distância mais curta de cada nó.Algoritmo A*: um método que atualiza continuamente o caminho mais curto para cada nó em um gráfico para determinar a rota mais curta entre eles.Algoritmo de Prim: Uma abordagem para descobrir a menor árvore geradora do grafo conectado ponderado.Algoritmo de Kruskal: Uma abordagem para identificar a árvore de abrangência mais baixa do gráfico ponderado vinculado.Algoritmo Bellman-Ford: Um algoritmo que, mesmo quando o gráfico tem pesos de aresta negativos, exibe o caminho mais curto entre um nó de fornecimento específico e todos os outros nós da rede.

4. Algoritmos criptográficos

C oferece suporte a operações de baixo nível e manipulação eficiente de dados, tornando-o ideal para implementar algoritmos usados ​​em criptografia, como algoritmos de criptografia e descriptografia de dados.

Existem diferentes tipos de algoritmos de criptografia.

Eles são:-

    Algoritmos de hash: Esses algoritmos produzem saídas de tamanho fixo (hash) a partir de entradas de tamanho arbitrário. Os exemplos incluem MD5, SHA-1 e SHA-2.Algoritmos de chave simétrica: as etapas de criptografia e descriptografia em tais algoritmos empregam a mesma chave privada. AES, DES e Blowfish são alguns exemplos.Algoritmos de chave assimétrica: uma chave pública e uma chave não pública são usadas por esses métodos como chaves separadas para criptografia e descriptografia. Alguns exemplos incluem RSA, ECC e DSA.Algoritmos de troca de chaves: Esses algoritmos permitem que duas partes troquem chaves com segurança em um canal inseguro. Por exemplo, podemos citar Diffie-Hellman e Elliptic Curve Diffie-Hellman.

Vantagens do algoritmo

Os algoritmos têm muitas vantagens.

eles são:-

    Rapidez e eficiência: Os algoritmos podem processar grandes quantidades de dados com rapidez e precisão, tornando-os úteis para tarefas que consomem muito tempo ou são propensas a erros para serem executadas pelas pessoas.Consistência: Os algoritmos seguem um conjunto de diretrizes pré-determinadas. Pode produzir resultados consistentes sem ser influenciado por preconceitos e emoções pessoais.Automação: Os algoritmos podem executar tarefas automaticamente, deixando as pessoas livres para se concentrarem em tarefas mais complexas ou criativas.Maior precisão: Os algoritmos muitas vezes podem atingir níveis de precisão mais elevados do que os humanos, especialmente quando lidam com grandes quantidades de dados.Melhor tomada de decisão: Os algoritmos nos ajudam a tomar decisões mais informadas e objetivas, analisando dados e identificando padrões e tendências que não são facilmente visíveis para as pessoas.Escalabilidade: Os algoritmos podem ser facilmente ampliados ou reduzidos para atender às demandas e às cargas de trabalho em constante mudança.

Desvantagens do algoritmo

Os algoritmos são muito úteis para programação, mas os algoritmos têm desvantagens.

renomeando pasta no linux

eles são:-

    Escopo limitado: Os algoritmos só podem resolver problemas dentro do seu escopo e podem não ser capazes de resolver problemas complexos ou abstratos.Viés: Os algoritmos podem perpetuar e reforçar preconceitos nos dados utilizados para treinamento, levando a resultados injustos.Transparência insuficiente: Muitos algoritmos ocultam o processo através do qual chegam às suas conclusões. Isso pode dificultar a reflexão ou a verificação dos resultados.Confiança na precisão dos dados:A exatidão do conjunto de regras depende fortemente da precisão e aplicabilidade dos dados utilizados na instrução. Efeitos imprecisos ou imprecisos podem ser o resultado de dados incorretos.adaptabilidade restrita:Os algoritmos são projetados para seguir diretrizes e não se adaptam a mudanças de circunstâncias e condições.