![]() |
![]() |
|
Moderador: latindeveloper


latindeveloper escribió:Que estructura tiene el archivo?


int BuscarRecursivoBinario (nInicio, nFin, ArchivoIndice, TextoBuscado =/*BGTDTY*/)
{
nMitad = (nFin-nInicio)/2;
ArchivoIndice.MoverHasta(nMitad);
LeerRegistro(strRegActual,ArchivoIndice);
if (strRegActual > TextoBuscado )
{
return BuscarRecursivoBinario(nMitad,nFin,ArchvoIndice,TextoBuscado);
}
else
{
return BuscarRecursivoBinario(nInicio,nMitad,ArchvoIndice,TextoBuscado);
}
}


latindeveloper escribió:Voy a darte una idea (por que aun tengo dudas sobre tus archivos):
Dupongamos que LEN es el tamaño del registro (todos los campos). Si es constante entonces la cosa es mas facil, pero si es variable entonces se complica un poco pero al final es casi lo mismo pero los archivos ocupan menos espacio.
Cada registro en tu archivo de datos ocupa LEN bytes, si tienes por ejemplo 10 mil registros y quieres ubicar el registro nro 560 (empezando desde cero) entonces tendrías que moverte 560*LEN leer el archivo y volcarlo en una estructura. Supongamos que 560*LEN es la posicion del registro que tiene el codigo "BGTDTY".
Entonces seguramente en algun archivo de indice existe un registro de esta manera:
Posicion_Fisica Codigo
----------------- --------
560*LEN BGTDTY
Estos campos tienen que estar NECESARIAMENTE ordenados para efectuar una busqueda binaria.
La busqueda binaria se efectua de igual manera que en un array, la unica diferencia es que cuando te mueves lo haces SOBRE EL ARCHIVO.
Para buscar el codigo "BGTDTY" tendría que hacer lo siguiente: (pseudocodigo inventado por mi)
- Código: Seleccionar todo
int BuscarRecursivoBinario (nInicio, nFin, ArchivoIndice, TextoBuscado =/*BGTDTY*/)
{
nMitad = (nFin-nInicio)/2;
ArchivoIndice.MoverHasta(nMitad);
LeerRegistro(strRegActual,ArchivoIndice);
if (strRegActual > TextoBuscado )
{
return BuscarRecursivoBinario(nMitad,nFin,ArchvoIndice,TextoBuscado);
}
else
{
return BuscarRecursivoBinario(nInicio,nMitad,ArchvoIndice,TextoBuscado);
}
}
Nota. En el codigo no esta considerado la condicion de parada (cuando no encuentre nada o encuentre algo...)
BuscarRecursivoBinario debe retornar la posicion fisica donde se encuentra el dato que estas buscando.
Espero haberte explicado ...
Saludos
PD. no se como pude escribir tanto en tan pocos minutos...


Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados