200 final

This commit is contained in:
2025-11-04 12:43:30 +01:00
parent 1c6e79149b
commit e5666aa2e9
3 changed files with 20 additions and 22 deletions

View File

@@ -16,10 +16,10 @@ diccionariocuacs.o: diccionariocuacs.cpp diccionariocuacs.hpp cuac.hpp fecha.hpp
$(GPP) $(OPTS) -c diccionariocuacs.cpp $(GPP) $(OPTS) -c diccionariocuacs.cpp
clean: clean:
rm *.o a.out rm *.o a.out *.tar
tar: a.out tar: a.out
tar cvf quacker.tar *.cpp *.hpp tar cvf quacker.tar *.cpp *.hpp Makefile
tar tvf quacker.tar tar tvf quacker.tar
diff: a.out diff: a.out

View File

@@ -7,7 +7,10 @@
#include "tablahash.hpp" #include "tablahash.hpp"
using namespace std; 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() { void procesar_pcuac() {
Cuac nuevo; Cuac nuevo;

View File

@@ -11,7 +11,6 @@ TablaHash::TablaHash() {
TablaHash::~TablaHash() { TablaHash::~TablaHash() {
} }
// eeeeeeeeeeeeeeeeeeeh
void TablaHash::insertar(Cuac nuevo) { void TablaHash::insertar(Cuac nuevo) {
int pos = h(nuevo.usuario); int pos = h(nuevo.usuario);
list<Cuac>::iterator it = lista[pos].begin(); list<Cuac>::iterator it = lista[pos].begin();
@@ -25,38 +24,34 @@ void TablaHash::insertar(Cuac nuevo) {
nElem++; nElem++;
} }
// eeeeeeeeeeeeeeeeh
// hay que consultar de más reciente a más antiguo
void TablaHash::consultar(string clave) { void TablaHash::consultar(string clave) {
int pos = h(clave); int pos = h(clave);
int i = 0; int i = 0;
for (list<Cuac>::iterator it = lista[pos].begin(); it != lista[pos].end(); it++) { for (list<Cuac>::iterator it = lista[pos].begin(); it != lista[pos].end(); it++) {
Cuac c = *it; Cuac c = *it;
if (c.usuario == clave) {
i++; i++;
cout << i << ". " << c.usuario << " "; cout << i << ". " << c.usuario << " ";
c.fecha.escribir(); c.fecha.escribir();
cout << '\n' << " " << c.mensaje << endl; cout << '\n' << " " << c.mensaje << endl;
} }
}
cout << "Total: " << i << " cuac" << endl; cout << "Total: " << i << " cuac" << endl;
} }
// probamos suma posicional // probamos suma posicional
// necesita redispersión // 19s
// probamos lineal // probamos suma posicional por trozos
// ruina
// es disp. abierta, no necesita redispersión
// 19s a superar
unsigned int TablaHash::h(string clave) { unsigned int TablaHash::h(string clave) {
unsigned int res = 0; 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]; res = 67 * res + clave[i];
} }
return res % M;
}
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;
}