Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2016, 21:53
Arcana
 
Fecha de Ingreso: mayo-2010
Mensajes: 185
Antigüedad: 13 años, 11 meses
Puntos: 2
Busqueda Binaria con palabras

Hola, que tal! Trato de hacer un programa dividido por funciones, tengo un diccionario con la frecuencia en la que aparecen las palabras, y en otro arreglo tengo otras cuantas palabras, necesito checar si las palabras del arreglo szPalabrasSugeridas aparecen en el arreglo szPalabras, si aparece agregar esa palabra y su estadistica a szListaFinal, lo intento hacer por busqueda binaria por que seran mas de 50 000 palabras las que se comparen, pero al momento de compilar el programa se queda parpadeando y no me marca ningun error, alguna sugerencia? Les dejo mi codigo.

Codigo que imprime las palabras
Código:
		//Con esa lista de palabras y el diccionario, recupera las sugerencias
		ListaCandidatas(szPalabrasSugeridas, iNumSugeridas, szPalabras, iEstadisticas, iNumElementos,
			szListaFinal, iPeso, iNumLista);

		//Mostrar las opciones candidatas, por orden de peso(frecuencia)
		printf("Las candidatas son \n");
		for (int j = 0; j < iNumLista; j++)
			printf("%s %i\n", szListaFinal[j], iPeso[j]);
Codigo de la funcion que genera las palabras y las compara
Código:
void	ListaCandidatas(
	char	szPalabrasSugeridas[][TAMTOKEN],	
	int		iNumSugeridas,						
	char	szPalabras[][TAMTOKEN],				
	int		iEstadisticas[],					
	int		iNumElementos,						
	char	szListaFinal[][TAMTOKEN],			
	int		iPeso[],							
	int &	iNumLista)							
{

	 int inf, sup, mitad,i;

	 
	 iNumLista = 0;
	 for (i = 0; i < iNumSugeridas; i++)
	 {
		 inf = 0;
		 sup = iNumElementos;
		 char bandera = 'F';
		 while (inf <= sup)
		 {
			 mitad = (inf + sup) / 2;
			 if (strcmp(szPalabras[mitad], szPalabrasSugeridas[i]) == 0)
			 {
				 strcpy_s(szListaFinal[i], szPalabras[mitad]);
				 iPeso[i] = iEstadisticas[mitad];
				 iNumLista++;
				 bandera = 'V';
				 break;
			 }
			 if (strcmp(szPalabras[mitad], szPalabrasSugeridas[i]) > 0)
			 {
				 sup = mitad;
				 mitad = (inf + sup) / 2;
			 }
			 if (strcmp(szPalabras[mitad], szPalabrasSugeridas[i]) < 0)
			 {
				 inf = mitad;
				 mitad = (inf + sup) / 2;
			 }
		 }
	 }
}