Algoritmia - Algoritmo de búsqueda

 
Vista:

Algoritmo de búsqueda

Publicado por Roberto Campo Vela (1 intervención) el 30/05/2005 10:29:08
Buenos días,

tengo un problema (como la mayoría de gente jejeje) y la verdad no he encontrado nada que me lo resuelva (ni buscador del foro, ni google, ni nada).

Tengo claro qué debo hacer, pero no cómo hacerlo :(

Os lo cuento:

necesito realizar un pequeño desarrollo. Y necesito realizar una búsqueda que cumplan una serie de condiciones. El caso es tengo un total de dinero, 800 euros, y de una serie de registros necesito saber cuáles de ellos suman en el total. La cosa se complica porque no sé sobre cuántos registros se va a realizar la búsqueda y también se puede dar el caso de que un registro reste en vez de sumar.

No sé si me explicado bién, la verdad que yo también estoy un poco liado.

Espero me podais ayudar. Gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Búsqueda de registros para cumplir condiciones de suma en un presupuesto

Publicado por Alejandro (307 intervenciones) el 05/03/2024 17:58:30
Roberto, entiendo que necesitas desarrollar un algoritmo que encuentre combinaciones de registros que cumplan con ciertas condiciones en relación con un presupuesto total. Aquí hay una posible aproximación utilizando la técnica de búsqueda de subconjuntos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <vector>
 
// Estructura para representar un registro
struct Registro {
    std::string nombre;
    double valor;
};
 
// Función recursiva para buscar combinaciones
bool buscarCombinacion(std::vector<Registro>& registros, int index, double objetivo, std::vector<Registro>& combinacionActual) {
    // Caso base: si el objetivo es 0, hemos encontrado una combinación válida
    if (objetivo == 0) {
        for (const auto& registro : combinacionActual) {
            std::cout << registro.nombre << " " << registro.valor << " euros\n";
        }
        return true;
    }
 
    // Caso base: si hemos revisado todos los registros
    if (index == registros.size()) {
        return false;
    }
 
    // Caso recursivo: incluir el registro actual en la combinación
    combinacionActual.push_back(registros[index]);
    if (buscarCombinacion(registros, index + 1, objetivo - registros[index].valor, combinacionActual)) {
        return true;
    }
 
    // Caso recursivo: no incluir el registro actual en la combinación
    combinacionActual.pop_back();
    return buscarCombinacion(registros, index + 1, objetivo, combinacionActual);
}
 
// Función principal
void buscarCombinaciones(std::vector<Registro>& registros, double presupuesto) {
    std::vector<Registro> combinacionActual;
    if (!buscarCombinacion(registros, 0, presupuesto, combinacionActual)) {
        std::cout << "No se encontraron combinaciones.\n";
    }
}
 
int main() {
    // Ejemplo de uso
    std::vector<Registro> registros = {
        {"Registro1", 100.0},
        {"Registro2", 200.0},
        {"Registro3", -50.0},
        {"Registro4", 300.0},
        // ... más registros
    };
 
    double presupuestoTotal = 800.0;
 
    buscarCombinaciones(registros, presupuestoTotal);
 
    return 0;
}

Este código utiliza una función recursiva para buscar combinaciones de registros que sumen al presupuesto total. Los registros pueden sumar o restar del presupuesto, ya que el valor es positivo o negativo. Puedes ajustar la estructura de datos y los valores según tus necesidades específicas. Recuerda que este enfoque puede no ser eficiente para un gran número de registros, en cuyo caso podrías considerar algoritmos más avanzados, como programación dinámica o técnicas de ramificación y poda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar