计算 h 指数

标签 c algorithm list tree sorting

我需要计算 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 中,相当于你的 ncitePages 并且是计算的 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/

相关文章:

list - Scala 函数中的异构参数

c - C 中的 Fscanf 用于存储文件中的数据

c++ - C:数据结构对齐

C : converting binary to decimal

algorithm - 我的 padovan 系列代码有什么问题?

javascript - 从 Javascript 中的数组值生成有效输出

仅保留所有矩阵中存在的行

c - 如何在c中声明大小为n x n的内存。

c++ - C++ 中的数据范围过滤器

c# - 在 C# .NET 中将两个(或更多)列表合并为一个