diff --git a/Makefile b/Makefile index b2dae4a..723f6ea 100644 --- a/Makefile +++ b/Makefile @@ -16,10 +16,10 @@ diccionariocuacs.o: diccionariocuacs.cpp diccionariocuacs.hpp cuac.hpp fecha.hpp $(GPP) $(OPTS) -c diccionariocuacs.cpp clean: - rm *.o a.out + rm *.o a.out *.tar tar: a.out - tar cvf quacker.tar *.cpp *.hpp + tar cvf quacker.tar *.cpp *.hpp Makefile tar tvf quacker.tar diff: a.out diff --git a/main.cpp b/main.cpp index 8c3926c..839a61b 100644 --- a/main.cpp +++ b/main.cpp @@ -7,7 +7,10 @@ #include "tablahash.hpp" using namespace std; -DiccionarioCuacs dic = DiccionarioCuacs(20000); +// el número de cubetas tiene que cumplir B = 4r + 3 para todo r en N +// usamos 20003 porque queda cerca de 20000 +// hay que redimensionar dinámicamente +DiccionarioCuacs dic = DiccionarioCuacs(5000); void procesar_pcuac() { Cuac nuevo; diff --git a/tablahash.cpp b/tablahash.cpp index ccf522a..1188e39 100644 --- a/tablahash.cpp +++ b/tablahash.cpp @@ -11,7 +11,6 @@ TablaHash::TablaHash() { TablaHash::~TablaHash() { } -// eeeeeeeeeeeeeeeeeeeh void TablaHash::insertar(Cuac nuevo) { int pos = h(nuevo.usuario); list::iterator it = lista[pos].begin(); @@ -25,38 +24,34 @@ void TablaHash::insertar(Cuac nuevo) { nElem++; } -// eeeeeeeeeeeeeeeeh -// hay que consultar de más reciente a más antiguo void TablaHash::consultar(string clave) { int pos = h(clave); int i = 0; for (list::iterator it = lista[pos].begin(); it != lista[pos].end(); it++) { Cuac c = *it; - i++; - cout << i << ". " << c.usuario << " "; - c.fecha.escribir(); - cout << '\n' << " " << c.mensaje << endl; + if (c.usuario == clave) { + i++; + cout << i << ". " << c.usuario << " "; + c.fecha.escribir(); + cout << '\n' << " " << c.mensaje << endl; } + } cout << "Total: " << i << " cuac" << endl; } // probamos suma posicional -// necesita redispersión -// probamos lineal +// 19s +// probamos suma posicional por trozos +// ruina +// es disp. abierta, no necesita redispersión +// 19s a superar unsigned int TablaHash::h(string clave) { unsigned int res = 0; - for (int i = 0; i < clave.length(); i++) { + for (int i = 0; i < (int) clave.length(); i++) { res = 67 * res + clave[i]; } - - while (!lista[res % M].empty()) { - Cuac c = lista[res % M].front(); - if (clave != c.usuario) { - res = res + 1; - } else { - return res % M; - } - } return res % M; } + +