Расчет h-индекса - PullRequest
       15

Расчет h-индекса

6 голосов
/ 11 июня 2011

Мне нужно вычислить 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;
  }

Ответы [ 2 ]

0 голосов
/ 29 июля 2015

Это имеет несколько решений для 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 типичных данных, указывающих, какой результат ожидается в каждом случае, учитывая, что этоматематический, а не кодирующий вопрос и может быть проверен только с заполненной сложной структурой данных.

0 голосов
/ 18 июля 2011

Возможно, мне не хватает какой-то тонкости, но разве не ответ просто вычесть одну из номера строки? То есть, если i - это номер строки, а n - это количество ссылок, вы пересекаете дерево, пока не найдете строку с n < i, а затем возвращаете h-index как i - 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...