Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมหา H-Index จากรายการอ้างอิงใน C++


สมมติว่ามีอาร์เรย์ของอ้างอิงของนักวิจัย เราต้องกำหนดฟังก์ชันเพื่อคำนวณ h-index ของนักวิจัย ตามที่เรารู้ h-index เป็นเมตริกที่ใช้คำนวณผลกระทบของเอกสารของนักวิจัย อย่างเป็นทางการ H-index สามารถนิยามได้ว่า: "นักวิจัยมีดัชนี h ถ้ามี h ใน N เอกสารของพวกเขาที่มีอ้างอิงอย่างน้อย h ครั้งต่อเอกสาร และเอกสารอื่น N - h มีอ้างอิงไม่เกิน h ครั้งต่อเอกสาร"

เช่น ถ้าอินพุทเป็น citations = [5, 4, 1, 2, 6] ผลลัพธ์จะเป็น 3 เนื่องจากมีอย่างน้อย 3 เอกสารที่มีอ้างอิงอย่างน้อย 3 ครั้งต่อเอกสาร คือ 4, 5, 6

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้ −

  • n := ขนาดของอาร์เรย์ สร้างอาร์เรย์ bucket ขนาด n + 1
  • ลูป i ในช่วง 0 ถึง n-1
    • x := c[i]
    • ถ้า x >= n แล้ว เพิ่ม bucket[n] ขึ้น 1 มิฉะนั้นเพิ่ม bucket[x] ขึ้น 1
  • cnt := 0
  • ลูป i จาก n ลงมาหา 0:
    • เพิ่ม cnt ด้วย bucket[i]
    • ถ้า cnt >= i แล้วคืนค่า i
  • คืนค่า -1

ลองดูการติดตั้งต่อไปนี้เพื่อให้เข้าใจได้ดีขึ้น −

ตัวอย่าง

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int solve(vector<int>& c) {       int n = c.size();       vector <int> bucket(n + 1);       for(int i = 0; i < n; i++){          int x = c[i];          if(x >= n){             bucket[n]++;          } else {             bucket[x]++;          }       }       int cnt = 0;       for(int i = n; i >= 0; i--){          cnt += bucket[i];          if(cnt >= i)return i;          } return -1;       } }; main(){    Solution ob;    vector<int> v = {5, 4, 1, 2, 6};    cout << (ob.solve(v)); }

อินพุท

[5, 4, 1, 2, 6]

เอาต์พุท

3