アルゴリズムH-Index Python
6212 ワード
H-Indexリンク
質問する
H-Indexは科学者の生産力と影響力を測定する指標である.ある科学者のh-indexを表すh値を求めたいです.ウィキペディア1によると、H-Indexの計算は以下の通り.
ある科学者が発表したn編の論文のうち、
h
回以上引用した論文がh
編以上で、残りの論文がh
回以下引用した場合、h
の最高値はこの科学者のH-Indexである.ある科学者が論文を発表する引用回数の配列参照をパラメータとして与えた場合,その科学者のH−Indexを返すために解関数を記述してください.
せいげんじょうけん
科学者が発表した論文の数は1編以上1000編以下である.
論文引用回数は0回以上10000回以下である.
を選択します。
問題の理解とソート
に答える
所与の問題制限から,解決すべきアレイ数は1000個を超えない.
配列の値が10000未満であるため、いずれにしても実装によって問題が解決されると、
私は通過できると思った.
しかし,この問題は問題を実現する方法において確かにH−Indexという概念の理解が必要である.🤦🏻♂️🤦🏻♀️
プログラマーはウィキペディアを推薦したが、関連リンクを見て概念を理解した.👨🏻🎓👩🏻🎓
H-Index問題に必要な概念
H-Indexは私が書いた論文の個数より高くはならない.
ex.もしあなたが100編の論文を書いたら、私の最大のH-Indexは0から100です(すべての論文が引用されていなければ)、
5論文、引用総数が100(
[100, 102, 105, 522, 153]
)H-Index=5を超えても->初めてこの概念を混同した.
すべての論文の参照数が0の場合、H-Index=0、
100論文中99論文の引用数が100,残り1論文が0であればH-Index=0
コード#コード#
コメントコード
def solution(citations):
# 우선 인용 수가 높은 논문부터 봐야 편하기 때문에 정렬
# 낮은 것 부터 보면 전에 봤던 논문들의 인용 수를 또 가져와야 함
citations.sort(reverse=True)
for c_idx, citation in enumerate(citations):
# idx + 1을 해준 이유는 논문의 개수는 1개부터니까
# 논문의 개수보다 인용수가 적으면 그때가 바로 H-Index가 결정되는 구간
# 아래의 if문을 통과하지 않으면 현재 논문의 개수보다 논문의 인용수가 계속 많다는 것
if citation and c_idx + 1 > citation:
return c_idx
# 모든 인용이 0일 경우 return 값도 없고,
# 모든 논문이 논문 개수보다 인용수가 많으면 for문은 return 값이 없고
# 하나 이상의 0인 인용 값이 있을 경우도 return이 없기에
# 위의 조건을 만족하지 못한 것들 바로 밑에서 return
return 0 if len(list(filter(lambda x: x > 0, citations))) != len(citations) else len(citations)
簡潔なコードdef solution(citations):
citations.sort(reverse=True)
for c_idx, citation in enumerate(citations):
if citation and c_idx + 1 > citation:
return c_idx
return 0 if len(list(filter(lambda x: x > 0, citations))) != len(citations) else len(citations)
Reference
この問題について(アルゴリズムH-Index Python), 我々は、より多くの情報をここで見つけました https://velog.io/@hshs0409/알고리즘-H-Index-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol