Want to create interactive content? It’s easy in Genially!

Get started free

Sentinel linear search

Layne Lais Castilho Firmino

Created on November 23, 2023

Start designing with a free template

Discover more than 1500 professional designs like these:

Corporate Christmas Presentation

Customer Service Manual

Business Results Presentation

Meeting Plan Presentation

Business vision deck

Economic Presentation

Tech Presentation Mobile

Transcript

SENTINEL LINEAR SEARCH

ALEX ONEDA, LAYNE FIRMINO, GUSTAVO PEROTTO,GUILHERME SCHWEITZER E RAFAELA CORREA

INTRODUÇÃO

SENTINEL LINEAR SEARCH

O Sentinel Linear Search é uma variante do Linear Search que usa um valor sentinela para otimizar o processo de busca. Ele tem como base a idéia da Linear Search, porém reduzindo o número de comparações necessárias para encontrar um elemento da lista. Nesse método, substituímos o último elemento da lista com o próprio elemento da busca e rodamos um loop while para verificar se existe alguma cópia do elemento da busca na lista, e assim que encontrado, paramos e saímos do loop.

EFICIÊNCIA

COMPLEXIDADE

CENÁRIOS DE USO

O Sentinel Linear Search pode ter uma vantagem em termos de eficiência quando comparada à Linear Search normal, especialmente em grandes listas. A adição do elemento sentinela permite que o algoritmo evite verificar a condição de parada a cada iteração, tornando-se um pouco mais eficiente.

Em média, o Sentinel Linear Search percorre metade do conjunto de dados antes de encontrar o elemento pesquisado ou chegar ao final. Esse método não requer espaço adicional significativo, já que utiliza apenas variáveis adicionais para armazenar o elemento sentinela para ser pesquisado e usado como parada.

O Sentinel Linear Search é ideal onde os cenários são, por exemplo, conjuntos de dados não ordenados onde a posição do elemento desejado é desconhecida. É apropriado também em situações com baixo custo de pré-processamento, devido a adição do elemento sentinela. Sua abordagem linear se mostra vantajosa em cenários onde uma inicialização rápida é crucial.

using System; class Program { static void sentinelSearch(int[] lista, int tamanho, int valor) { int ultimo = lista[tamanho - 1]; lista[tamanho - 1] = valor; int i = 0; while (lista[i] != valor) i++; lista[tamanho - 1] = ultimo; if ((i < tamanho - 1) || (lista[tamanho - 1] == valor)) { Console.WriteLine($"O valor [{valor}] foi encontrado no índice [{i}]"); } else Console.WriteLine("Valor não encontrado"); } public static void Main() { int[] lista = { 10, 20, 180, 30, 60, 50, 110, 100, 70 }; sentinelSearch(lista, lista.Length, 70); } }

Salvamos o último valor original da lista na variável “ultimo”

Definimos o último elemento da lista para o valor procurado. (Esse é o valor sentinela);

Definimos a variável do índice (i) como o zero, para começarmos o loop no primeiro elemento da lista;

Usamos um loop while para iterar a lista, comparando cada elemento com o valor pesquisado (para automático já que o último item atual é o valor sentinela, para evitar buscas fora do limite da lista);

Se o elemento atual é igual o valor pesquisado, retornamos o índice do elemento atual.

Incrementamos a variável do índice (i) em +1 a cada iteração do loop.

Retornamos o item do último índice da variável “ultimo” para o seu local original.

Após completo o loop, checamos com um “if” se o valor da variável do índice é menor que o tamanho total -1 da lista ou se o item do último índice (agora o valor original já que substituído no passo anterior) é igual ao valor pesquisado.