"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Você pode implementar um algoritmo de pesquisa binária eficiente em C++ que retorne um iterador ao resultado da pesquisa?

Você pode implementar um algoritmo de pesquisa binária eficiente em C++ que retorne um iterador ao resultado da pesquisa?

Publicado em 2024-11-08
Navegar:981

Can You Implement an Efficient Binary Search Algorithm in C   that Returns an Iterator to the Search Result?

Buscando um algoritmo de pesquisa binária eficiente em C

Os programadores geralmente procuram implementar algoritmos de pesquisa binária eficientes que fornecem os benefícios da complexidade do tempo logarítmico . Um requisito comum é que o algoritmo retorne um iterador apontando para o resultado da pesquisa em vez de um booleano simples indicando sua existência.

A Biblioteca Padrão C fornece std::binary_search no cabeçalho , mas apenas retorna um booleano. Conforme observado pelo questionador, isso pode ser frustrante para situações em que a velocidade de uma pesquisa binária é desejada e os dados são classificados.

Felizmente, existem implementações alternativas disponíveis que oferecem a funcionalidade desejada. Uma opção popular é usar um algoritmo personalizado que aproveite as funções std::lower_bound, std::upper_bound ou std::equal_range. Aqui está uma versão simplificada de tal implementação:

template
Iter binary_find(Iter begin, Iter end, T val) {
    // Determine the lower bound using binary search
    Iter i = std::lower_bound(begin, end, val);

    // If the element is found, return the iterator to it
    if (i != end && !(val 

Alternativamente, um std::set pode ser usado, o que garante a ordenação dos elementos e fornece o método find que retorna um iterador para o item desejado. Porém, é importante considerar se os requisitos são compatíveis com o uso de um conjunto, principalmente nos casos em que múltiplas instâncias do mesmo elemento precisam ser armazenadas.

Declaração de lançamento Este artigo foi reimpresso em: 1729693891 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3