我需要计算 h-index来 self 存储在树中的出版物列表。
我所做的是按递减顺序遍历树,获取引用位置列表
看起来像:
line 1 10
line 2 5
line 3 4
line 4 0
我应该在第 3 行停止并返回 3。问题出在给出的例子中,在这种情况下
line 1 4
line 2 0
line 3 0
它在 2 处停止,因为 4>1 但 0>3 为假。它应该返回 1。你能解释一下为什么吗?我知道这更像是一个数学家的问题,但之后如果出现严重错误,我可能需要重新实现它。
这是代码
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;
}
最佳答案
关于 github 这有几个解决方案,例如在 Ruby 中,相当于你的 n
是 citePages
并且是计算的 h-index
function h_index(){
var hArray = new Array();
var x = 0;
for(var i = 0; i < citePages.length; i++){
var citeArray = citePages[i];
for(var j = 0; j < citeArray.length; j++){
// The multiplication by one is a hack to convert the string type into a numerical type
hArray[x++] = citeArray[j]*1;
}
}
hArray.sort(sortNumber);
//alert(hArray);
for(var i = 0; i < hArray.length; i++){
if(i > hArray[i]){
return hArray[i-1];
}
}
}
上一个函数 -
function getCitationCount(responseText){
if (responseText == null){
_gel("sContent").innerHTML = "<i>Invalid data.</i>";
alert("There is no data.");
return;
}
var cite_exists = 1;
var cite_str_len = 14;
var len_of_Cite_by_str = 9;
var citeArray = new Array();
for(var i = 0; cite_exists > 0; i++)
{
cite_exists = responseText.search('Cited by');
if(cite_exists == -1){
//alert("No more citations for given Author!");
//return;
}else{
var tmp_string = responseText.substr(cite_exists, cite_str_len);
var end = (tmp_string.indexOf("<")-len_of_Cite_by_str);
citeArray[i] = tmp_string.substr(len_of_Cite_by_str, end);
publications++;
responseText = responseText.substr(cite_exists+cite_str_len, responseText.length);
}
}
return citeArray;
}
如果这不能提供解决方案,那么问题是可验证的 - 所以我们确实需要示例数据,例如典型数据的 jsfiddle,说明每种情况下预期的结果,因为这是一个数学问题而不是编码问题并且只能使用填充的复杂数据结构进行测试。
关于计算 h 指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6315083/