Module: Pesquisa ternária


Problem

1/9

Pesquisa ternária: início (C++)

Theory Click to read/hide

Pesquisa ternária
Precisamos de pesquisa ternária para encontrar o máximo ou mínimo de uma função unimodal no segmento [l, r]. Uma função é unimodal quando possui um extremo em um segmento.
A busca pelos valores máximos de uma função é frequentemente utilizada para problemas de otimização. Por exemplo, precisamos encontrar o ângulo máximo possível de um triângulo retângulo, no qual a área será maior.  Para fazer isso, vamos percorrer os ângulos de 0 a 90, e neste segmento procuramos uma área que primeiro aumentará e depois diminuirá, ou seja, a função será unimodal.
 
Como funciona
O princípio de operação é semelhante à pesquisa binária, mas podemos ter um caso ao dividir o segmento ao meio, quando o meio do segmento cai exatamente no extremo e & nbsp; não obteremos um resultado claro.
Portanto, para evitar tal caso, é necessário dividir o segmento não em duas partes, mas em três, e descartamos a parte em que não há extremo, etc., até que os limites convirjam para o resultado.

duplo f (duplo hipo, duplo alfa) {     alfa = (alfa *M_PI)/180;     retorno 0,5 * hipo * hipo * cos(alfa) * sin(alfa); } int principal() {     duplo l = 0;     duplo r = 90;     EPS duplo = 1e-6;     dupla hipo = 100;     enquanto (r - l >=EPS) {         duplo m1 = l + (r - l) / 3;         duplo m2 = r - (r - l) / 3;         if (f(hipo, m1) < f(hipo, m2)) {             l=m1;         }         outro {             r=m2;         }     }          fora<< ((l + r) / 2);     retorna 0; }
A pesquisa ternária pode ser modificada usando  método da seção áurea, o que aumenta a taxa de convergência em cerca de 2 vezes.
 
Fontes
1)  pesquisa ternária e proporção áurea
2)  pesquisa ternária


 

Problem

Encontre o mínimo da função \(y=x \cdot x - b \cdot x + 100\), onde o coeficiente b é digitado pelo teclado.< br />  
Exemplos
# Entrada Saída
1 10 5


Nota
Tenha cuidado com o que seu algoritmo está procurando: máximo ou mínimo.