2011-06-11 53 views
6

की गणना करना मुझे पेड़ में संग्रहीत प्रकाशनों की सूची से h-index की गणना करने की आवश्यकता है।एच-इंडेक्स

क्या मैं था प्रशंसा पत्र

यह की तरह लग रहा की स्थिति-संख्या की एक सूची प्राप्त करने के क्रम में कम हो जानेवाला पेड़ traversing है:

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

उत्तर

0

यह github पर कई समाधान, रूबी में जैसे, अपने 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

शायद मैं कुछ सूक्ष्मता याद आ रही है, लेकिन इस सवाल का जवाब सिर्फ लाइन नंबर से एक घटाना नहीं है? यही है, यदि i लाइन संख्या है और n उद्धरणों की संख्या है, तो आप पेड़ को पार करते हैं जब तक आपको n < i के साथ कोई लाइन नहीं मिलती है और फिर एच-इंडेक्स i - 1 के रूप में वापस कर देता है।

+0

... ऐसा नहीं होना चाहिए, "फिर एच-इंडेक्स * * * * 1 के रूप में वापस करें"? अन्यथा यह मेरे लिए सही लगता है ... – Dmitri

+0

@Dmitri: नहीं, यह 'i - 1' होना चाहिए। ओटी के पहले उदाहरण पर विचार करें: हम लाइन 4 (क्योंकि '0 <4') पर रुकते हैं और' 4 - 1 = 3' का एच-इंडेक्स लौटाते हैं। दूसरे उदाहरण में, हम लाइन 2 पर रुकते हैं और '1' वापस करते हैं। – deprecated

+0

ओह .. जब मैंने लिखा कि मेरे पास कुछ कारणों से मेरे दिमाग में 'n' और' i' पिछड़ा था। – Dmitri