/BuscaPorInterpolacao

Busca por interpolação com Python, C e Javascript

Primary LanguageC

Busca por Interpolacao

Video explicando como nosso algoritmo em c funciona

explicação sobre busca por interpolação

O que é?

O algoritmo de busca por interpolação como o nome sugere, é um tipo de algoritmo de busca que tem intuito de buscar determinado elemento de um vetor, funciona como um algoritmo de busca binária, a unica diferença entre os dois é o calculo feito para achar o elemento

Vantagem e desvantagem

  • Vantagem: A vantagem desse tipo de algoritmo é que se o vetor estiver ordenado e com seus elementos bem distriubuios é possivel reduzir rasticamente a quantidade de operações feitas pela cpu.
  • Desvantagem: A desvantagem desse tipo de algoritmo é que quando o vetor está desordenado, dependendo de onde o elemento está no vetor, o metodo pode acabar invadindo espaço de memória, que acaba acessando indices negativos,quando as entradas crescem exponencialmente a complexidade pode chegar a O(n),sendo o mesmo que uma busca sequencial.

Complexidade

Casos Notação Big-O
Melhor O(1)
Médio O(log2(log2(n)))
Pior O(n)

Complexidade de espaço

A complexidade do espaço auxiliar é representada por O(1)

Representação de codigo em c e análise de complexidade(pior caso)

int busca_por_interpolacao(int *vetor, int tamanho, int valor){

    int inicio = 0;//c1, 1 vez
    int fim = tamanho - 1;//c2, 1 vez
    int meio;//c3, 1 vez

    while (inicio  <= fim){//c4, n vezes
        
        meio = inicio + ((valor - vetor[inicio]) * (fim - inicio)) / (vetor[fim] - vetor[inicio]);//c5, n vezes
        
        if(vetor[meio] == valor){//c6, n vezes

            return meio;//c7,1 vez

        }else if (vetor[meio] < valor){//c8, n vezes

            inicio = meio + 1;//c9, n vezes

        }else {//c10, n vezes

            fim = meio - 1;//c11, n vezes

        }
    }

    return -1;//c12, 1 vez

}
//T(n)=c1+c2+c3+n*(c4+c5+c6+c8+c9+c10+c11)+c7+c12
//T(n)=c1+c2+c3+n*a+c7+c12
//T(n)=a*n
//T(n)=n
//notação Big-O:
//O(n)