Estoy tratando de implementar un algoritmo que cada una de las cuerdas en el primer vector se realiza una búsqueda binaria en el segundo vector y de «salida de SÍ:» si se encuentra una coincidencia o «No:» en caso contrario.

Ahora con mi programa de mi algo siempre salidas «NO:» y yo no puede averiguar lo que está mal. Cualquier sugerencias o consejos se agradece.

Mi búsqueda Binaria:

bool binary_search(const vector<string>& sorted_vec, string key) {
size_t mid, left = 0 ;
size_t right = sorted_vec.size(); //one position passed the right end
while (left < right) {
    mid = left + (right - left)/2;
    if (key > sorted_vec[mid]){
        left = mid+1;
   } else if (key < sorted_vec[mid]){                                        
        right = mid;
   } else {                                                                  
        return true;

            }                                                                
        return false;                                                        
    }
}

Mi Algo:

if(algo_speed == "fast"){

    string key = fileContent[i];

    while(getline(ifs1, line)){

            fileContent1.push_back(line);

    }

    sort(fileContent1.begin(), fileContent1.end());
    for(size_t i = 0; i < fileContent.size(); i++){
    string temp = fileContent[i];
    bool found = binary_search(fileContent1,temp) ;

     if(found == true) {
            cout << "YES:" << fileContent.at(i) << endl;
        } else {
            cout << "NO:" << fileContent.at(i) << endl;
        }
    }

}

InformationsquelleAutor user2757849 | 2013-09-12

1 Comentario

  1. 6

    Usted está saliendo de su función en la primera miss con el fuera de lugar return false:

    bool binary_search(const vector<string>& sorted_vec, string key) {
       size_t mid, left = 0 ;
       size_t right = sorted_vec.size(); //one position passed the right end
       while (left < right) {
          mid = left + (right - left)/2;
          if (key > sorted_vec[mid]){
              left = mid+1;
          }
          else if (key < sorted_vec[mid]){                                        
            right = mid;
          }
          else {                                                                  
            return true;
         }                                                                                                               
       }
    
       return false;      
    }
    • HAHAH, tonto error, muchas gracias!

Dejar respuesta

Please enter your comment!
Please enter your name here