アルゴリズムH-Index Python


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)