Алгоритм динамического поиска (Dynamic Search) в C++ — объяснение, пример и код

Алгоритм динамического поиска, также известный как алгоритм «поиск по мере ввода», обычно используется для реализации таких функций, как автозаполнение в строках поиска. Этот алгоритм предоставляет предложения в режиме реального времени на основе ввода пользователя и доступных данных.

Как это работает

  1. Начните с набора данных, содержащего список элементов(например, слов, имен или продуктов).
  2. По мере того, как пользователь вводит каждый символ, обновляйте поисковый запрос.
  3. Отфильтруйте набор данных на основе текущего поискового запроса.
  4. Отображать отфильтрованные результаты для пользователя в режиме реального времени.

Пример

Рассмотрим набор языков программирования: ["C", "C++", " Java ", " Python ", " JavaScript ", " Ruby ", " Swift "].

  1. Пользователь вводит "C". Отфильтрованные результаты: ["C", "C++"].
  2. Тип пользователя "C++". Отфильтрованные результаты: ["C++"].
  3. Пользователь вводит " Java ". Отфильтрованные результаты: [" Java ", " JavaScript "].
  4. Пользователь вводит «Py». Отфильтрованные результаты: [" Python "].
  5. Пользователь вводит "Jav". Отфильтрованные результаты: [" Java ", " JavaScript "].

Пример кода на С++

#include <iostream>  
#include <vector>  
#include <string>  
  
std::vector<std::string> dynamicSearch(const std::vector<std::string>& dataset, const std::string& query) {  
    std::vector<std::string> results;  
  
    for(const std::string& item: dataset) {  
        if(item.find(query) != std::string::npos) {  
            results.push_back(item);  
        }  
    }  
  
    return results;  
}  
  
int main() {  
    std::vector<std::string> programmingLanguages = {"C", "C++", "Java", "Python", "JavaScript", "Ruby", "Swift"};  
    std::string userQuery = "Jav";  
  
    std::vector<std::string> suggestions = dynamicSearch(programmingLanguages, userQuery);  
  
    std::cout << "Suggestions for query '" << userQuery << "': ";  
    for(const std::string& suggestion: suggestions) {  
        std::cout << suggestion << ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}  

В этом примере dynamicSearch функция принимает набор данных языков программирования и пользовательский запрос в качестве входных данных. Он возвращает предложения на основе текущего запроса. Когда пользователь вводит символы, алгоритм фильтрует набор данных и отображает предложения в реальном времени.

Примечание. Фактическая реализация динамического поиска может быть более сложной и включать такие методы, как древовидные структуры или эффективное индексирование больших наборов данных.