计算h指数

Cho*_*eat 7 c algorithm tree list sorted

我需要从存储在树中的出版物列表中计算h-index.

我所做的是以低位顺序遍历树,获得引用位置数列表

看起来像:

line 1 10
line 2 5
line 3 4
line 4 0
Run Code Online (Sandbox Code Playgroud)

我应该停在第3行并返回3.问题在于给出的例子,在这种情况下

line 1 4
line 2 0
line 3 0
Run Code Online (Sandbox Code Playgroud)

它停在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;
  }
Run Code Online (Sandbox Code Playgroud)

Mou*_*sey 0

这在github上有几个解决方案,例如在Ruby中,相当于你的niscitePages和being的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];
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

上一个功能 -

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;
}
Run Code Online (Sandbox Code Playgroud)

如果这不能提供解决方案,那么问题是可验证的 - 所以我们确实需要示例数据,例如,一堆典型数据,说明每种情况下预期的结果,因为这是一个数学问题而不是编码问题,并且只能使用填充的复杂数据结构进行测试。