200 final
This commit is contained in:
4
Makefile
4
Makefile
@@ -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
|
||||||
|
|||||||
5
main.cpp
5
main.cpp
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
i++;
|
if (c.usuario == clave) {
|
||||||
cout << i << ". " << c.usuario << " ";
|
i++;
|
||||||
c.fecha.escribir();
|
cout << i << ". " << c.usuario << " ";
|
||||||
cout << '\n' << " " << c.mensaje << endl;
|
c.fecha.escribir();
|
||||||
|
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];
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
return res % M;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user