일단 문제를 이해하는 것부터 힘들었다. ㅠㅠ
h 인덱스란 한 학자의 연구 업적과 성취, 학계에 미치는 영향력을 자연수로 나타낸 것이라고 하는데 어떤 학자의 논문의 인용된 횟수와 개수들을 따져서 구한다고 한다.
일반적인 정의는 다음과 같다.
"어떤 연구자의 h 인덱스 값이 h 일 때, 이 연구자의 논문 중 h 편이 h 회 이상 인용되었다."
내가 이해한 h 인덱스란,
- 조건을 만족하면서 가장 큰 자연수이다.
- h 인덱스보다 인용 횟수가 크거나 같은 논문의 개수이다.
- h 인덱스보다 인용 횟수가 낮은 논문은 h 인덱스 값에 포함되어선 안 된다.
예시
논문(인용횟수) 배열 | H-INDEX |
61,105, 67 | 3 |
88, 66, 63, 60, 1 | 4 |
5, 5, 5, 5, 5, 5 | 5 |
1.
61, 105, 67은 모두 H-INDEX에 포함이 되었다.
61 > 3
105 > 3
67 > 3
논문 3개가 다 H-INDEX에 포함이 되었다.
2.
88, 66, 63, 60이 H-INDEX에 포함이 되어 H-INDEX는 4이다.
1은 H-INDEX보다 작아서 포함이 안 됨
3.
논문 6개 중 5개는 H-INDEX에 포함이 되었다 (5 >= 5 == True)
그렇지만 마지막 한개를 넣으면 (6 >= 5 == False)이기 때문에 5개로 끝이 난다.
코드 (파이썬3)
def getHIndex(citations):
'''
h 인덱스를 0으로 초기화 하고 내림차순으로 정렬을 해줌.
'''
h_index = 0
citations.sort(reverse = True)
'''
큰 노드부터 하나씩 꺼내 h_index와 비교한다.
h_index가 노드보다 큰 경우 -> 종료
h_index가 노드와 같은 경우 -> 종료 (예시 3)
h_inex가 노드보다 작은 경우 -> h_index에 포함 (h_index++)
'''
for node in citations:
if h_index >= node:
break
else:
h_index += 1
return h_index
내림차순으로 정렬한 뒤 하나씩 꺼내 H-INDEX에 카운트 시키면서 H-INDEX보다 인용횟수가 낮거나 같은 논문을 만나면 종료시키도록 설정하면 구할 수 있다.