2011-06-11 29 views
6

Tôi cần tính h-index từ danh sách các ấn phẩm tôi lưu trữ trong một cây.Tính h-index

gì tôi đã được đi qua cây để giảm bớt được một danh sách các vị trí-số lượng trích dẫn

nó trông giống như:

line 1 10 
line 2 5 
line 3 4 
line 4 0 

tôi nên dừng lại ở dòng 3 và trở 3. Vấn đề với các ví dụ được đưa ra và trong trường hợp này là

line 1 4 
line 2 0 
line 3 0 

nó dừng ở 2 vì 4> 1 nhưng 0> 3 là sai. Nó sẽ trả về 1 để thay thế. Bạn có thể giải thích cho tôi tại sao? Tôi biết nó giống như một câu hỏi về toán học, nhưng sau đó tôi có thể cần phải thực hiện lại nó nếu có điều gì đó sai trái.

Đây là mã

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

Trả lời

0

này có một số giải pháp về github, ví dụ như trong Ruby, tương đương với n của bạn là citePages và là h-index tính

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

chức năng trước -

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

Nếu điều này không cung cấp một giải pháp sau đó là vấn đề có thể kiểm chứng được - vì vậy chúng tôi thực sự cần dữ liệu ví dụ, ví dụ: jsfiddle của dữ liệu điển hình cho biết kết quả mong đợi trong từng trường hợp, cho rằng đây là một ather hơn là câu hỏi mã hóa và chỉ có thể được kiểm tra với cấu trúc dữ liệu phức tạp.

0

Có lẽ tôi đang thiếu một số tinh tế, nhưng không phải là câu trả lời chỉ trừ một từ số dòng? Tức là, nếu i là số dòng và n là số lượng trích dẫn, bạn đi ngang qua cây cho đến khi bạn tìm thấy một dòng có n < i và sau đó trả lại chỉ mục h là i - 1.

+0

... không phải vậy, "sau đó trả lại chỉ mục h dưới dạng * n * - 1"? Nếu không, nó có vẻ đúng với tôi ... – Dmitri

+0

@Dmitri: không, nó phải là 'i - 1'. Hãy xem ví dụ đầu tiên của Cựu Ước: chúng ta dừng lại ở dòng 4 (vì '0 <4') và trả về chỉ số h của' 4 - 1 = 3'. Trong ví dụ thứ hai, chúng ta dừng lại ở dòng 2 và trả về '1'. – deprecated

+0

Rất tiếc .. Khi tôi viết rằng tôi đã có 'n' và' i' trong đầu vì lý do nào đó. – Dmitri

Các vấn đề liên quan