Necesito calcular el h-index de una lista de publicaciones que almacené en un árbol.Cálculo h-index
lo que hice está atravesando el árbol con el fin de obtener una lista decreciente de la posición-número de citas
que parece:
line 1 10
line 2 5
line 3 4
line 4 0
que debería parar en la línea 3 y volver 3. El problema es con los ejemplos dados y en este caso
line 1 4
line 2 0
line 3 0
que se detenga en 2 porque 4> 1 pero 0> 3 es falso. Debería devolver 1 en su lugar. ¿Puedes explicarme por qué? Sé que es más como una pregunta matemática, pero después de eso podría necesitar volver a implementarlo si algo está muy mal.
Este es el código
int index_h_calc(rbtree_node n, int *i){
if (n == NULL) {
fputs("<empty tree>\n", stdout);
return 0;
}
if (n->right != NULL)
index_h_calc(n->right,i);
graduat *grad;
grad=n->value;
if(DEBUG)
printf("linea %d %d %s\n ",*i,(int)grad->tot,grad->name);
if(*i+1>=(int)grad->tot) {
return *i;
} else
*i+=1;
if (n->left != NULL)
index_h_calc(n->left,i);
return *i;
}
... ¿no debería ser eso, "entonces devuelva el índice h como * n * - 1"? De lo contrario, me parece correcto ... – Dmitri
@Dmitri: no, tiene que ser 'i - 1'. Considere el primer ejemplo del AT: nos detenemos en la línea 4 (porque '0 <4') y devolvemos un índice h de' 4 - 1 = 3'. En el segundo ejemplo, nos detenemos en la línea 2 y devolvemos '1'. – deprecated
Oops .. Cuando escribí que tenía 'n' y' i' atrás en mi mente por alguna razón. – Dmitri