Cho*_*eat 7 c algorithm tree list sorted
我需要从存储在树中的出版物列表中计算h-index.
我所做的是以低位顺序遍历树,获得引用位置数列表
看起来像:
line 1 10
line 2 5
line 3 4
line 4 0
Run Code Online (Sandbox Code Playgroud)
我应该停在第3行并返回3.问题在于给出的例子,在这种情况下
line 1 4
line 2 0
line 3 0
Run Code Online (Sandbox Code Playgroud)
它停在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;
}
Run Code Online (Sandbox Code Playgroud)
这在github上有几个解决方案,例如在Ruby中,相当于你的niscitePages和being的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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
上一个功能 -
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;
}
Run Code Online (Sandbox Code Playgroud)
如果这不能提供解决方案,那么问题是可验证的 - 所以我们确实需要示例数据,例如,一堆典型数据,说明每种情况下预期的结果,因为这是一个数学问题而不是编码问题,并且只能使用填充的复杂数据结构进行测试。