본문 바로가기

알고리즘

[알고리즘 문제] h-index 구하기

일단 문제를 이해하는 것부터 힘들었다. ㅠㅠ

 

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보다 인용횟수가 낮거나 같은 논문을 만나면 종료시키도록 설정하면 구할 수 있다.