【问题标题】:Calculating h-index计算 h 指数
【发布时间】:2011-09-12 23:48:51
【问题描述】:

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

我所做的是按递减顺序遍历树,获取引用位置数列表

看起来像:

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;
  }

【问题讨论】:

    标签: c algorithm list tree sorted


    【解决方案1】:

    这在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,因为这是一个数学问题而不是编码问题并且只能使用填充的复杂数据结构进行测试。

    【讨论】:

      【解决方案2】:

      也许我遗漏了一些微妙之处,但答案不就是从行号中减去一个吗?也就是说,如果i 是行号,n 是引用数,则遍历树直到找到带有n &lt; i 的行,然后将h-index 返回为i - 1

      【讨论】:

      • ...不应该是“然后将 h-index 返回为 n - 1”吗?否则对我来说听起来不错......
      • @Dmitri:不,它必须是i - 1。考虑 OT 的第一个示例:我们在第 4 行停止(因为 0 &lt; 4)并返回一个 h-index 为 4 - 1 = 3。在第二个示例中,我们在第 2 行停止并返回 1
      • 哎呀.. 当我写到时,由于某种原因,我的脑海中出现了 ni
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多