Sem resumo de edição
Julio Uyehara (discussão | contribs)
Sem resumo de edição
Linha 33: Linha 33:
* De um lado, você tem as questões, que são problemas a serem resolvidos. Uma questão pode descrever o resultado desejado de um algoritmo ou pode descrever um obstáculo que deve ser superado para obter o resultado desejado. Soluções são os métodos, os passos, utilizados para tratar as questões. Uma solução pode relacionar apenas um ou vários passos dentro do algoritmo. Na verdade, o resultado de um algoritmo, a resposta ao último passo, é a solução. As seções seguintes ajudam a entender alguns dos aspectos importantes das questões e soluções. [3]
* De um lado, você tem as questões, que são problemas a serem resolvidos. Uma questão pode descrever o resultado desejado de um algoritmo ou pode descrever um obstáculo que deve ser superado para obter o resultado desejado. Soluções são os métodos, os passos, utilizados para tratar as questões. Uma solução pode relacionar apenas um ou vários passos dentro do algoritmo. Na verdade, o resultado de um algoritmo, a resposta ao último passo, é a solução. As seções seguintes ajudam a entender alguns dos aspectos importantes das questões e soluções. [3]


> Julio
* O refinamento de um algoritmo é a etapa fundamental que conecta a especificação abstrata à sua implementação concreta, servindo como a ponte entre a definição do problema e a solução executável. O objetivo é transformar sistematicamente o que foi especificado em instruções de máquina, assegurando que o comportamento do software seja fiel às regras estabelecidas. [4]
Na programação, o refinamento é a essência da construção de sistemas, garantindo que o programa final não apenas funcione, mas seja matematicamente correto em relação aos documentos que o definiram. Trata-se de preservar a semântica do "contrato" inicial enquanto se introduzem os detalhes de como a máquina deve operar, eliminando ambiguidades da programação intuitiva. [4]
*Do ponto de vista técnico, o processo de refinamento se subdivide em duas categorias principais:
'''Refinamento algorítmico''': Foca na conversão de lógicas abstratas em estruturas de controle de fluxo concretas, como laços, condicionais e atribuições.
'''Refinamento de dados''': Busca a representação mais eficiente para as informações (ex: trocar uma lista completa por uma variável de soma), justificando a escolha de estruturas que otimizam o desempenho sem violar a lógica original. [4]
*Além da correção formal, o refinamento possui uma dimensão prática voltada à otimização de desempenho. Em problemas complexos, soluções iniciais geradas por métodos básicos (heurísticas) muitas vezes são subótimas. É através de técnicas de refinamento que o algoritmo explora o espaço de busca de forma mais agressiva para encontrar resultados globais que métodos simples não alcançam. [5]
*O processo atua de forma cíclica e iterativa para lidar com restrições e garantir a robustez da solução. Em cenários onde uma solução inicial viola regras (como sobreposição física de itens), o refinamento aplica procedimentos de ajustes e '''factibilização''', transformando respostas inválidas em soluções ótimas e reduzindo a sensibilidade do algoritmo aos parâmetros iniciais. [5]


= Referências bibliográficas =
= Referências bibliográficas =
Linha 68: Linha 81:
   isbn        = {9788550809298},
   isbn        = {9788550809298},
   url          = {https://integrada.minhabiblioteca.com.br/reader/books/9788550809298/}
   url          = {https://integrada.minhabiblioteca.com.br/reader/books/9788550809298/}
}
[4]
@article{cavalcanti2003refinamento,
title={Refinamento: a essência da engenharia de software},
author={Cavalcanti, Ana},
journal={Ciência e Cultura},
volume={55},
number={2},
pages={33-38},
year={2003},
publisher={Sociedade Brasileira para o Progresso da Ciência},
url={http://cienciaecultura.bvs.br/scielo.php?script=sci_arttext&pid=S0009-67252003000200022}
}
[5]
@article{yamassaki2003refinamento,
title={Um refinamento do algoritmo tabu de Dowsland para o problema de carregamento de paletes do produtor},
author={Yamassaki, Cintia A. & Pureza, Vitória},
journal={Revista Produção},
pages={6-17},
year={2003},
publisher={Associação Brasileira de Engenharia de Produção}
}
}

Edição das 00h01min de 26 de novembro de 2025

Criação de Algoritmos


  • Um algoritmo é qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída. Portanto, um algoritmo é uma sequência de passos computacionais que transformam a entrada na saída [1]. Podemos enxergar o algoritmo como a solução específica para um problema bem definido. Se precisamos descobrir o maior número em uma lista, podemos criar o seguinte enunciado: Dada uma relação de números de entrada, queremos um único número que seja o maior de todos como resultado.
  • Algoritmo, como solução, é o procedimento exato, passo a passo (ex.: comece pelo primeiro número, compare-o com o próximo, guarde o maior, e repita até o final) que garante que a Entrada seja transformada na Saída desejada. Dessa forma, podemos concluir que um algoritmo é uma sequência de passos computacionais que a partir de uma Entrada e, de maneira totalmente previsível, o transforma em outra em uma Saída, resolvendo assim um problema específico.


> Fernando

  • Informalmente, algoritmo é qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída em um período de tempo finito. Portanto, um algoritmo é uma sequência de etapas computacionais que transformam a entrada em saída. [2]
  • Também podemos considerar algoritmo um instrumento para resolver um problema computacional bem especificado. O enunciado do problema especifica em termos gerais a relação desejada entre entrada e saída para instâncias do problema, geralmente com tamanho arbitrariamente grande. O algoritmo descreve um procedimento computacional específico para se conseguir essa relação entre entrada e saída em todas as instâncias do problema. [2]
  • Diz-se que um algoritmo para um problema computacional é correto se, para toda instância do problema de entrada, ele parar — terminar sua computação em um tempo finito — e gerar a solução correta para a instância do problema. Dizemos que um algoritmo correto resolve o problema computacional dado. Um algoritmo incorreto poderia não parar em algumas instâncias de entrada ou poderia parar com uma resposta incorreta. Ao contrário do que se poderia esperar, eventualmente, os algoritmos incorretos podem ser úteis, se pudermos controlar sua taxa de erros. Um algoritmo pode ser especificado em linguagem comum, como um programa de computador ou mesmo como um projeto de hardware. O único requisito é que a especificação deve fornecer uma descrição precisa do procedimento computacional a ser seguido. [2]
  • Para um processo representar um algoritmo, ele deve ser:
- Finito: O algoritmo deve, em algum momento, solucionar o problema.
- Bem definido: As séries de passos devem ser precisas e apresentar sequências compreensíveis. Especialmente por computadores estarem envolvidos no uso de algoritmos, eles devem ser capazes de entender os passos para criar um algoritmo utilizável.
- Eficaz: Um algoritmo deve solucionar todos os casos do problema para o qual foi definido. Deve sempre solucionar o problema ao qual se destina. [3]
  • O escopo dos algoritmos é incrivelmente grande. É possível encontrar algoritmos que resolvem problemas em Ciência, Medicina, Finanças, Produção Industrial e de Abastecimento e Comunicação. Algoritmos fornecem suporte para todas as partes do cotidiano de uma pessoa. Sempre que uma sequência de ações que resolva algo em nossa vida for finita, bem definida e efetiva, você pode enxergá-la como um algoritmo. [3]
  • Quando se trata de Ciência da Computação, o mesmo algoritmo pode ter várias apresentações. Em resumo, os algoritmos apresentam um método de resolver fórmulas, mas seria um erro dizer que há apenas um algoritmo aceitável para determinada fórmula, ou que existe apenas uma apresentação aceitável de um algoritmo. No entanto, aqui estão alguns usos interessantes para considerar: busca, classificação, transformação, programação, análise de grafos, criptografia, e geração de números pseudoaleatória. [3]
  • Toda tarefa executada em um computador envolve algoritmos. Alguns algoritmos aparecem como parte do hardware do computador (eles são embarcados, daí os microprocessadores embarcados). O próprio ato de inicializar um computador envolve o uso de um algoritmo. Você também encontra algoritmos em sistemas operacionais, aplicativos e em todos os outros softwares. Até mesmo os usuários dependem de algoritmos. Scripts ajudam a direcionar usuários a executar tarefas de uma maneira específica, mas esses mesmos passos podem aparecer como instruções escritas ou como parte de uma declaração de política organizacional. [3]


  • Existem três elementos para todos os algoritmos:
1. Descrever o problema.
2. Criar uma série de passos para solucionar o problema (bem definido).
3. Executar os passos para obter o resultado desejado (finito e efetivo). [3]
  • De um lado, você tem as questões, que são problemas a serem resolvidos. Uma questão pode descrever o resultado desejado de um algoritmo ou pode descrever um obstáculo que deve ser superado para obter o resultado desejado. Soluções são os métodos, os passos, utilizados para tratar as questões. Uma solução pode relacionar apenas um ou vários passos dentro do algoritmo. Na verdade, o resultado de um algoritmo, a resposta ao último passo, é a solução. As seções seguintes ajudam a entender alguns dos aspectos importantes das questões e soluções. [3]

> Julio

  • O refinamento de um algoritmo é a etapa fundamental que conecta a especificação abstrata à sua implementação concreta, servindo como a ponte entre a definição do problema e a solução executável. O objetivo é transformar sistematicamente o que foi especificado em instruções de máquina, assegurando que o comportamento do software seja fiel às regras estabelecidas. [4]

Na programação, o refinamento é a essência da construção de sistemas, garantindo que o programa final não apenas funcione, mas seja matematicamente correto em relação aos documentos que o definiram. Trata-se de preservar a semântica do "contrato" inicial enquanto se introduzem os detalhes de como a máquina deve operar, eliminando ambiguidades da programação intuitiva. [4]

  • Do ponto de vista técnico, o processo de refinamento se subdivide em duas categorias principais:

Refinamento algorítmico: Foca na conversão de lógicas abstratas em estruturas de controle de fluxo concretas, como laços, condicionais e atribuições. Refinamento de dados: Busca a representação mais eficiente para as informações (ex: trocar uma lista completa por uma variável de soma), justificando a escolha de estruturas que otimizam o desempenho sem violar a lógica original. [4]

  • Além da correção formal, o refinamento possui uma dimensão prática voltada à otimização de desempenho. Em problemas complexos, soluções iniciais geradas por métodos básicos (heurísticas) muitas vezes são subótimas. É através de técnicas de refinamento que o algoritmo explora o espaço de busca de forma mais agressiva para encontrar resultados globais que métodos simples não alcançam. [5]
  • O processo atua de forma cíclica e iterativa para lidar com restrições e garantir a robustez da solução. Em cenários onde uma solução inicial viola regras (como sobreposição física de itens), o refinamento aplica procedimentos de ajustes e factibilização, transformando respostas inválidas em soluções ótimas e reduzindo a sensibilidade do algoritmo aos parâmetros iniciais. [5]

Referências bibliográficas


[1]

@article{castro2022algoritmos,
 title={Algoritmos e Pensamento Computacional como Ferramenta no Processo de Ensino-Aprendizagem},
 author={Castro, S{\'e}rgio Augusto Dias},
 year={2022}
}

[2]

@book{cormen2024algoritmos,
 author       = {Cormen, Thomas H. and Leiserson, Charles E. and Rivest, Ronald L. and Stein, Clifford},
 title        = {Algoritmos},
 edition      = {4},
 year         = {2024},
 publisher    = {GEN LTC},
 address      = {Rio de Janeiro},
 isbn         = {9788595159914},
 note         = {E-book},
 url          = {https://integrada.minhabiblioteca.com.br/reader/books/9788595159914/}

}

[3]

@book{mueller2018algoritmos,
 author       = {Mueller, John and Massaron, Luca},
 title        = {Algoritmos Para Leigos},
 year         = {2018},
 publisher    = {Editora Alta Books},
 address      = {Rio de Janeiro},
 note         = {E-book},
 pages        = {10},
 isbn         = {9788550809298},
 url          = {https://integrada.minhabiblioteca.com.br/reader/books/9788550809298/}

}

[4] @article{cavalcanti2003refinamento, title={Refinamento: a essência da engenharia de software}, author={Cavalcanti, Ana}, journal={Ciência e Cultura}, volume={55}, number={2}, pages={33-38}, year={2003}, publisher={Sociedade Brasileira para o Progresso da Ciência}, url={http://cienciaecultura.bvs.br/scielo.php?script=sci_arttext&pid=S0009-67252003000200022} }

[5] @article{yamassaki2003refinamento, title={Um refinamento do algoritmo tabu de Dowsland para o problema de carregamento de paletes do produtor}, author={Yamassaki, Cintia A. & Pureza, Vitória}, journal={Revista Produção}, pages={6-17}, year={2003}, publisher={Associação Brasileira de Engenharia de Produção} }