Pesquisa Linear: Python, C++ Exemplo
O que รฉ algoritmo de pesquisa?
Um algoritmo de busca รฉ projetado para encontrar um elemento ou objeto em uma coleรงรฃo de elementos ou objetos com uma determinada estrutura de dados. Por exemplo, pesquise a altura mรญnima em uma determinada lista de alturas ou pesquise a marca mais alta em uma lista ou matriz de nรบmeros. Poucos algoritmos de pesquisa populares incluem โPesquisa Linearโ, โPesquisa Binรกriaโ, โPesquisa de Saltoโ, โPesquisa Fibonacciโ, etc.
O que รฉ pesquisa linear?
A pesquisa linear รฉ um dos algoritmos de pesquisa mais simples. A partir de uma determinada lista ou array, ele procura o elemento fornecido um por um. A Pesquisa Linear itera sobre toda a lista e verifica se algum elemento especรญfico รฉ igual ao elemento de pesquisa. Tambรฉm รฉ chamado de pesquisa sequencial.
O que a funรงรฃo de pesquisa linear faz?
Uma matriz de inteiros รฉ dada como โNumbersโ, e uma variรกvel โitemโ contรฉm o nรบmero inteiro a ser pesquisado.
Agora, o algoritmo de pesquisa linear pode fornecer a seguinte saรญda:
- โ-1โ; isso significa que o elemento fornecido nรฃo foi encontrado na matriz
- Qualquer nรบmero entre 0 e n-1; significa que o elemento de pesquisa foi encontrado e retorna o รญndice do elemento na matriz. Aqui, โnโ representa o tamanho do array.
Como funciona a Pesquisa Linear?
Digamos que um array contendo nรบmeros inteiros. A tarefa รฉ encontrar um determinado nรบmero na matriz.
- Se o nรบmero estiver localizado no array, precisamos retornar o รญndice desse nรบmero.
- Se o nรบmero fornecido nรฃo for encontrado, ele retornarรก -1.
No fluxograma, โDadosโ รฉ o array de inteiros, โNโ รฉ o tamanho do array e o โitemโ รฉ o nรบmero que queremos pesquisar no array.
Fluxograma para algoritmo de pesquisa linear:
Aqui estรฃo as etapas do fluxograma:
Passo 1) Leia o item de pesquisa, โitemโ.
Passo 2) Inicie i=0 e รญndice=-1
Passo 3) Se eu
Passo 4) Se Data[i] for igual a โitemโ, vรก para a etapa 5. Caso contrรกrio, vรก para a etapa 6.
Passo 5) รndice = i (como o item รฉ encontrado no รญndice no i). Vรก para a etapa 8.
Passo 6) eu = eu +1.
Passo 7) Vรก para a etapa 3.
Passo 8) Parar.
Para simplificar, fornecemos um exemplo com uma matriz de inteiros. A pesquisa linear tambรฉm รฉ aplicรกvel na string, em uma matriz de objetos ou em uma estrutura.
Pseudocรณdigo para algoritmo de pesquisa sequencial
function linearSearch: in โData[], item foundAt = -1 for i in (0 to data.length): if data[i] equals item // item is found in the array // returning the index return i // item not found in the array // -1 means no item found, as negative index is not valid return -1
C++ Exemplo de cรณdigo de pesquisa linear
#include < bits / stdc++.h >
using namespace std;
int linearSearch(int * arr, int item, int n) {
int idx = -1;
for (int i = 0; i < n; i++) {
if (arr[i] == item) {
idx = i;
break;
}
}
return idx;
}
int main() {
int array[] = {
1, 9, 8, 7, 6, 3, 11, 4, 6, 9, 7, 2, 0, 19, -10
};
int n = sizeof(array) / sizeof(arr[0]);
int item;
cout << "Enter a number to search: ";
cin >> item;
int idx = linearSearch(arr, item, n);
if (idx >= 0) {
cout << item << " is found at index " << idx << endl;
} else {
cout << "Could not find " << item << " in the array" << endl;
}
}
Saรญda:
Enter a number to search: -10 -10 is found at index 14
Python Exemplo de cรณdigo de pesquisa linear
def linearSearch(data, item):
for i in range(len(data)):
if data[i] == item:
return i
return -1
data = [1, 9, 8, 7, 6, 3, 11, 4, 6, 9, 7, 2, 0, 19, -10]
item = int(input("Enter a number to search: "))
idx = linearSearch(data, item)
if idx >= 0:
print("{} is found at index {}".format(item, idx))
else :
print("{} was not found".format(item))
Saรญda:
Enter a number to search: -10 -10 is found at index 14
Anรกlise de complexidade do algoritmo de pesquisa linear
Geralmente, complexidade de tempo significa a quantidade de tempo de CPU para executar uma determinada tarefa. No algoritmo de busca linear, a tarefa รฉ encontrar a chave de busca a partir do elemento do array.
Trรชs tipos de complexidades de tempo sรฃo:
- Worst Case Scenario
- Melhor cenรกrio de caso
- Cenรกrio Mรฉdio de Caso
Complexidade temporal da pesquisa linear no pior cenรกrio:
Digamos que precisamos realizar uma pesquisa linear em um array com tamanho โnโ. Podemos encontrar o item de pesquisa entre o รญndice 0 a n-1. Na pior das hipรณteses, o algoritmo tentarรก combinar todos os elementos do array com o elemento de pesquisa.
Nesse caso, a complexidade do pior caso serรก O(n). Aqui, a notaรงรฃo โOโ-big O significa a funรงรฃo de complexidade.
Complexidade temporal da pesquisa linear no cenรกrio Melhor-Case:
Digamos que estamos procurando um elemento que reside na primeira posiรงรฃo do array. Neste cenรกrio, o algoritmo de pesquisa linear nรฃo pesquisarรก todos os n elementos da matriz. Portanto a complexidade serรก O(1). Isso significa tempo constante.
Complexidade temporal da pesquisa linear no cenรกrio mรฉdio:
Quando um elemento รฉ encontrado no รญndice intermediรกrio do array, entรฃo pode-se dizer que a complexidade mรฉdia do caso para pesquisa linear รฉ O(N), onde N significa o comprimento do array.
A complexidade espacial do algoritmo de busca linear
A complexidade do espaรงo para a busca linear รฉ sempre O(N) porque nรฃo precisamos armazenar ou usar nenhum tipo de variรกvel temporรกria na funรงรฃo de busca linear.
Como melhorar o algoritmo de pesquisa linear
A pesquisa pode ser feita diversas vezes durante o ciclo de vida do programa. Tambรฉm รฉ possรญvel que estejamos executando o algoritmo de busca linear e procurando por qualquer chave especรญfica diversas vezes. Podemos usar o โAlgoritmo de pesquisa binรกriaโ se a matriz for uma matriz classificada.
Suponha que a matriz consista em 10 mil nรบmeros e o elemento de destino seja encontrado no 5000ยบ รญndice. Portanto, o algoritmo tentarรก comparar 5000 elementos. Agora, as comparaรงรตes sรฃo tarefas que exigem muita CPU. Para otimizar o algoritmo de busca linear, temos duas opรงรตes.
- Transposiรงรฃo
- Mover para Frente
Transposiรงรฃo:
Neste mรฉtodo, trocaremos o elemento de pesquisa pelo seu elemento anterior no array. Por exemplo, digamos que vocรช tenha um array como o seguinte:
Dados[] = {1,5,9,8,7,3,4,11}
Agora queremos pesquisar 4. Etapas de Transposiรงรฃo:
Passo 1) โ4โ รฉ encontrado no รญndice 6. Foram necessรกrias seis comparaรงรตes.
Passo 2) Troque dados[6] e dados[5]. Entรฃo a matriz de dados ficarรก assim:
Dados[] = {1,5,9,8,7,4,3,11}
Passo 3) Pesquise 4 novamente. Encontrado no รญndice 5. Desta vez foram necessรกrias cinco comparaรงรตes.
Passo 4) Troque dados [5] e dados [4]. Entรฃo a matriz de dados ficarรก assim:
Dados [] = {1,5,9,8,4,7,3,11}
Agora, se vocรช notar, quanto mais frequente uma chave รฉ pesquisada, mais diminui o รญndice. Assim, diminuindo o nรบmero de comparaรงรตes.
Vรก para a frente:
Neste mรฉtodo, trocamos o elemento de pesquisa no 0ยบ รญndice. Porque se for pesquisado novamente, podemos encontrรก-lo no tempo O(1).
Aplicaรงรฃo do Algoritmo de Pesquisa Linear
Aqui estรฃo alguns aplicativos de pesquisa linear que podemos usar.
- Para arrays pequenos ou apenas alguns elementos na lista, รฉ mais fรกcil usar a pesquisa linear.
- O mรฉtodo de pesquisa linear pode ser usado de forma simples ou arrays multidimensionais ou outras estruturas de dados.
- Geralmente, a busca linear รฉ simples e eficiente para realizar uma busca nos dados โnรฃo ordenadosโ. Podemos buscar facilmente um รบnico dado de uma lista nรฃo ordenada fornecida.



