[Algoritmo] - búsqueda binaria

tipo int de búsqueda binaria

La idea básica : la mitad idea básica es encontrar un tiempo para encontrar el estrecho medio Look

int LowerBound(int a[], int target, int left, int right)
{
    while(right >= left)
    {
        int mid = left + (right - left) / 2;//防止left + right导致上溢
        if(a[mid] > target) right = mid - 1;
        else if(a[mid] < target) left = mid + 1;
        else if(a[mid] == target) return mid;
    }
    return -1;
}

Con el fin de prevenir la aparición de desbordamiento izquierda + derecha, puede ser intercambiado por + izquierda (derecha - izquierda) / 2

Tratando de encontrar ejemplos en los que la posición de elemento de la matriz

#include <stdio.h>

int LowerBound(int a[], int target, int left, int right)
{
    while(right >= left)
    {
        int mid = left + (right - left) / 2;//防止left + right导致上溢
        if(a[mid] > target) right = mid - 1;
        else if(a[mid] < target) left = mid + 1;
        else if(a[mid] == target) return mid;
    }
    return -1;
}
int main(void)
{
    int a[105] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int ans;
    ans = LowerBound(a, 11, 0, 9);
    if(ans >= 0) printf("%d", ans);
    else printf("NO");
    return 0;
}

una doble búsqueda binaria

tipo int y similares, la única diferencia es el tipo de matrimonio
, mientras que - (derecha-izquierda> 0,0000001)
la función ejemplo tz del hermano mayor

tema de fondo

tz jefes de la distante Himalaya desenterrado unas funciones NN orden, con el fin de estudiar la magia de la función, tzdalao las funciones delegadas en el club de programación.

Formato de entrada

La primera línea, un número entero positivo N y dos números reales II, rr, que muestra la gama intervalo cerrado.

Segunda fila, N + 1 N + 1 número real, de izquierda a derecha representa los coeficientes de las funciones.

Formato de salida

Valor de salida de x, redondeado a cinco decimales.

entrada de la muestra

3 -0,9981 0,5
1 -3 -3 1

Ejemplo de salida

-0.41421

explicación

. = 3 por encima de n- muestra, X 3. - 3x 2 -. 3x + 1

La resolución de problemas ideas: coeficientes de entrevistas función de derivación en una matriz, usando la dicotomía de encontrar una derivada es cero
Código AC

include <stdio.h>
#include <math.h>

double a[100] = {0}, n, ans1, mid;
double y(double x)//判断一阶导数的大小
{
    double j = n-1, ans = 0;
    for(int i = 0 ; i < n && j >= 0; i++, j--)
    {
        ans += a[i]*pow(x, j);
    }
    return ans;//返回一阶导数的值
}
int main(void)
{
    double temp;
    double l, r;
    scanf("%lf%lf%lf", &n, &l, &r);
    temp = n;
    for(int i = 0; i <= n; i++)
    {
        scanf("%lf", &a[i]);
        a[i] = a[i]*temp;//求一阶导数的系数
        temp -= 1;
    }
    while(r - l > 0.0000001)。。二分查找
    {
        mid = (r+l)*1.0/2;
        if(y(mid) > 0) l = mid;
        else  r = mid;
    }
    printf("%.5lf", mid);
    return 0;
}

Publicado 20 artículos originales · ganado elogios 2 · Vistas 941

Supongo que te gusta

Origin blog.csdn.net/zhbbbbbb/article/details/103516711
Recomendado
Clasificación